第十一章-PHP表单传值
第十一章-PHP表单传值
一,核心概念
1. 表单的基本结构(HTML)
通过HTML的<form>
标签定义表单,关键属性包括:
action
: 指定处理表单数据的PHP脚本路径(如action="process.php"
)。method
: 定义数据传输方式,常用GET
或POST
。
<form action="process.php" method="post"><input type="text" name="username"><input type="password" name="password"><input type="submit" value="提交">
</form>
2. PHP接收表单数据的超全局变量
PHP通过预定义超全局变量获取表单数据:
$_GET
: 接收通过method="get"
提交的数据(数据附加在URL中)。$_POST
: 接收通过method="post"
提交的数据(数据通过HTTP请求体传输)。$_REQUEST
: 合并了$_GET
、$_POST
和$_COOKIE
的数据(不推荐,因安全性低)。
示例:获取数据
// 通过POST获取表单字段
$username = $_POST['username'];
$password = $_POST['password'];
3. GET vs POST的区别
3.1 底层原理
- GET请求:
- 数据通过URL参数传输,如
process.php?name=John&age=25
。 - 浏览器历史记录和服务器日志会保存完整URL。
- 数据通过URL参数传输,如
- POST请求:
- 数据在HTTP请求体中传输,不可见。
- 适用于敏感操作(如修改数据库)。
3.2 使用场景扩展
- GET的典型场景:
- 搜索引擎关键词传递:
search.php?q=keyword
。 - 分页导航:
articles.php?page=2
。
- 搜索引擎关键词传递:
- POST的典型场景:
- 用户注册、登录、支付操作。
- 上传文件或提交大型文本(如博客文章)。
特性 | GET | POST |
---|---|---|
数据位置 | URL参数(可见) | HTTP请求体(不可见) |
数据长度限制 | 受URL长度限制(约2048字符) | 无限制(服务器配置可能限制) |
安全性 | 不适合敏感数据(如密码) | 相对更安全 |
缓存/书签 | 可缓存、可收藏为书签 | 不可缓存 |
典型用途 | 搜索、分页等非敏感操作 | 登录、注册、文件上传 |
4. 安全性注意事项
-
过滤输入:始终验证和清理用户输入,避免SQL注入、XSS攻击。
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
-
防止CSRF:使用令牌(Token)验证请求来源。
-
文件上传:需设置
enctype="multipart/form-data"
,并通过$_FILES
处理。
5. 完整示例
HTML表单(form.html
):
<form action="process.php" method="post">邮箱:<input type="email" name="email">密码:<input type="password" name="password"><input type="submit" value="登录">
</form>
PHP处理脚本(process.php
):
if ($_SERVER['REQUEST_METHOD'] === 'POST') {$email = $_POST['email'];$password = $_POST['password'];// 简单验证if (!empty($email) && !empty($password)) {echo "登录成功!邮箱:$email";} else {echo "请填写所有字段!";}
}
6. 其他传值方式
- 文件上传:使用
$_FILES
处理。 - 隐藏字段:
<input type="hidden" name="id" value="123">
传递隐藏数据。 - Session/Cookie:结合
$_SESSION
和$_COOKIE
管理用户状态。
二,表单传值方式
1. 基础传值方式
(1) GET 方法
-
特点:
- 数据通过URL参数传递(如
?key1=value1&key2=value2
)。 - 数据可见、长度受限(约2048字符)。
- 可缓存、可书签保存。
- 数据通过URL参数传递(如
-
适用场景:
- 搜索、分页、筛选等非敏感操作。
-
示例:
<form action="search.php" method="get"><input type="text" name="keyword"><input type="submit" value="搜索"> </form>
// PHP获取数据 $keyword = $_GET['keyword'];
(2) POST 方法
-
特点:
- 数据通过HTTP请求体传输,不可见。
- 无长度限制(受服务器配置影响)。
- 不可缓存,适合敏感操作。
-
适用场景:
- 用户登录、注册、文件上传等。
-
示例:
<form action="login.php" method="post"><input type="text" name="username"><input type="password" name="password"><input type="submit" value="登录"> </form>
$username = $_POST['username']; $password = $_POST['password'];
2. 扩展传值方式
(1) 隐藏字段(Hidden Fields)
-
用途:
- 传递无需用户填写但后端需要的数据(如用户ID、令牌)。
-
示例:
<form action="update.php" method="post"><input type="hidden" name="user_id" value="123"><input type="text" name="new_email"><input type="submit" value="更新邮箱"> </form>
$user_id = $_POST['user_id'];
(2) 文件上传(File Upload)
-
特点:
- 需设置表单的
enctype="multipart/form-data"
。 - 通过
$_FILES
超全局数组处理文件。
- 需设置表单的
-
示例:
<form action="upload.php" method="post" enctype="multipart/form-data"><input type="file" name="avatar"><input type="submit" value="上传头像"> </form>
$file_name = $_FILES['avatar']['name']; $tmp_path = $_FILES['avatar']['tmp_name']; move_uploaded_file($tmp_path, "uploads/$file_name");
3. 高级传值技术
(1) AJAX 异步传值
-
用途:
- 不刷新页面提交数据,提升用户体验。
-
示例(使用JavaScript Fetch API):
// 前端代码 document.getElementById('myForm').addEventListener('submit', function(e) {e.preventDefault();const formData = new FormData(this);fetch('api/save.php', {method: 'POST',body: formData}).then(response => response.json()).then(data => console.log(data)); });
// PHP返回JSON响应 header('Content-Type: application/json'); echo json_encode(['status' => 'success']);
(2) Session 和 Cookie
-
Session:
- 服务器端存储用户状态,通过
$_SESSION
访问。
session_start(); $_SESSION['user_id'] = 123; // 存储 $userId = $_SESSION['user_id']; // 读取
- 服务器端存储用户状态,通过
-
Cookie:
- 客户端存储数据,通过
$_COOKIE
访问。
setcookie('theme', 'dark', time() + 3600); // 设置 $theme = $_COOKIE['theme']; // 读取
- 客户端存储数据,通过
4. RESTful API 传值方式
(1) HTTP 方法扩展
-
PUT/DELETE:
- 用于更新或删除资源(需通过AJAX或框架模拟)。
// 伪代码:通过POST模拟PUT if ($_POST['_method'] === 'PUT') {// 处理更新逻辑 }
(2) JSON 数据传值
-
前端发送JSON:
fetch('api/users', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ name: 'John', age: 30 }) });
-
PHP接收JSON:
$data = json_decode(file_get_contents('php://input'), true); $name = $data['name'];
5. 安全性对比与选择建议
传值方式 | 安全性 | 适用场景 | 注意事项 |
---|---|---|---|
GET | 低 | 公开数据查询 | 避免传递敏感信息 |
POST | 中 | 表单提交、敏感操作 | 结合HTTPS使用 |
Session | 高 | 用户登录状态、跨页面数据共享 | 及时销毁Session防止会话固定 |
Cookie | 中 | 客户端偏好设置 | 避免存储敏感数据 |
AJAX/JSON | 高 | 前后端分离、API交互 | 需验证来源和CORS配置 |
6. 最佳实践
-
始终验证输入:
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); if (!$email) die("邮箱格式无效");
-
防范CSRF:
// 生成Token $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); // 表单中嵌入 <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>"> // 验证Token if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) die("非法请求");
-
使用HTTPS:
- 对敏感数据传输强制启用HTTPS。
三,接收数据方式
1. 基础数据接收方式
(1) 通过 $_GET
接收URL参数
-
场景:处理
method="get"
表单或URL中的查询参数(如?id=123
)。 -
示例:
// URL: example.com?name=John&age=25 $name = $_GET['name'] ?? '未填写姓名'; // 使用空合并运算符避免未定义错误 $age = filter_input(INPUT_GET, 'age', FILTER_VALIDATE_INT); // 过滤并验证为整数
(2) 通过 $_POST
接收表单数据
-
场景:处理
method="post"
的表单提交。 -
示例:
// 表单字段:<input type="text" name="email"> $email = $_POST['email'] ?? ''; // 使用过滤器验证邮箱格式 $email = filter_var($email, FILTER_VALIDATE_EMAIL); if (!$email) {die("邮箱格式无效"); }
(3) 通过 $_REQUEST
接收混合数据
-
注意:
$_REQUEST
合并了$_GET
、$_POST
和$_COOKIE
,但不推荐使用(安全性低,优先级不可控)。 -
示例:
$data = $_REQUEST['key']; // 可能来自GET、POST或COOKIE
2. 复杂数据接收方式
(1) 接收数组数据
-
场景:表单中多选框(Checkboxes)或同名字段。
-
HTML示例:
<input type="checkbox" name="hobbies[]" value="reading"> 阅读 <input type="checkbox" name="hobbies[]" value="sports"> 运动
-
PHP处理:
$hobbies = $_POST['hobbies'] ?? []; if (!empty($hobbies)) {foreach ($hobbies as $hobby) {echo htmlspecialchars($hobby); // 转义输出防止XSS} }
(2) 接收文件数据($_FILES
)
-
场景:文件上传表单(需设置
enctype="multipart/form-data"
)。 -
HTML示例:
<form action="upload.php" method="post" enctype="multipart/form-data"><input type="file" name="file_upload"> </form>
-
PHP处理:
$file = $_FILES['file_upload']; if ($file['error'] === UPLOAD_ERR_OK) {$tmp_name = $file['tmp_name'];$target_path = "uploads/" . basename($file['name']);move_uploaded_file($tmp_name, $target_path); }
(3) 接收JSON数据
-
场景:前端通过AJAX发送JSON格式数据(如API请求)。
-
PHP处理:
$json_data = file_get_contents('php://input'); // 读取原始输入流 $data = json_decode($json_data, true); // 转换为关联数组 if (json_last_error() !== JSON_ERROR_NONE) {die("JSON解析失败"); } $username = $data['username'] ?? '';
3. 安全性处理
(1) 输入过滤与验证
-
推荐函数:
filter_input()
、filter_var()
-
示例:
// 过滤并验证整数 $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT); if ($id === false || $id < 1) {die("ID无效"); }// 清理字符串(移除标签和空格) $comment = filter_input(INPUT_POST, 'comment', FILTER_SANITIZE_STRING); $comment = trim($comment);
(2) 防止SQL注入
-
使用预处理语句(PDO示例):
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass'); $stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email"); $stmt->execute(['email' => $_POST['email']]); $user = $stmt->fetch();
(3) 防止跨站请求伪造(CSRF)
-
生成并验证Token:
session_start(); // 生成Token if (empty($_SESSION['csrf_token'])) {$_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // 表单中嵌入Token <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>"> // 验证Token if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {die("非法请求"); }
4. 其他数据接收方式
(1) 命令行参数($argv
和 $argc
)
-
场景:PHP CLI(命令行界面)脚本接收参数。
-
示例:
php script.php arg1 arg2
// script.php print_r($argv); // 输出:Array([0] => script.php, [1] => arg1, [2] => arg2)
(2) 接收HTTP头部信息(getallheaders()
或 $_SERVER
)
-
场景:获取请求头信息(如认证Token)。
-
示例:
$headers = getallheaders(); $auth_token = $headers['Authorization'] ?? '';
(3) 处理PUT/DELETE请求
-
场景:RESTful API中处理非POST请求。
-
示例:
if ($_SERVER['REQUEST_METHOD'] === 'PUT') {parse_str(file_get_contents('php://input'), $put_data);$id = $put_data['id'];// 处理更新逻辑 }
5. 最佳实践总结
-
始终检查变量是否存在:
// 使用 isset() 或空合并运算符 $value = $_POST['key'] ?? 'default';
-
优先使用过滤器函数:
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
-
避免直接使用未过滤的数据:
// 错误示例(易受XSS攻击) echo $_GET['content']; // 正确做法 echo htmlspecialchars($_GET['content']);
-
严格限制文件上传类型和大小:
$allowed_types = ['image/jpeg', 'image/png']; if (!in_array($_FILES['file']['type'], $allowed_types)) {die("只允许上传JPEG和PNG图片"); }
四,PHP处理复选框
1. HTML复选框基础
1.1 正确命名复选框
-
关键点:使用数组形式命名(
name="字段名[]"
),以便PHP接收多个值。 -
示例:
<form action="process.php" method="post"><input type="checkbox" name="hobbies[]" value="reading"> 阅读<input type="checkbox" name="hobbies[]" value="coding"> 编程<input type="checkbox" name="hobbies[]" value="sports"> 运动<input type="submit" value="提交"> </form>
1.2 动态生成复选框
-
场景:从数据库或配置中加载选项。
-
PHP动态生成示例:
$allowedHobbies = ['reading', 'coding', 'sports', 'music']; foreach ($allowedHobbies as $hobby) {echo '<input type="checkbox" name="hobbies[]" value="' . htmlspecialchars($hobby) . '"> ' . $hobby; }
2. PHP接收复选框数据
2.1 接收数组数据
-
使用
$_POST
或$_GET
:$selectedHobbies = $_POST['hobbies'] ?? [];
- 若用户未勾选任何复选框,
$_POST['hobbies']
将不存在,需用空合并运算符 (??
) 避免错误。
- 若用户未勾选任何复选框,
2.2 验证与过滤数据
-
检查是否为数组:
if (!is_array($selectedHobbies)) {die("非法请求"); }
-
过滤非法值:
$allowedValues = ['reading', 'coding', 'sports', 'music']; $validHobbies = array_intersect($selectedHobbies, $allowedValues); if (count($validHobbies) === 0) {die("请至少选择一个有效兴趣"); }
3. 安全性处理
3.1 防止XSS攻击
-
转义输出:
foreach ($validHobbies as $hobby) {echo htmlspecialchars($hobby, ENT_QUOTES, 'UTF-8'); }
3.2 防止SQL注入
-
预处理语句示例(PDO):
$stmt = $pdo->prepare("INSERT INTO user_hobbies (user_id, hobby) VALUES (:user_id, :hobby)"); foreach ($validHobbies as $hobby) {$stmt->execute(['user_id' => $userId,'hobby' => $hobby]); }
4. 常见问题与解决方案
问题1:只接收到最后一个值
- 原因:复选框未使用数组命名(如
name="hobby"
)。 - 解决:确保命名格式为
name="字段名[]"
。
问题2:未选中时报错 Undefined index
-
原因:直接访问
$_POST['hobbies']
而未检查是否存在。 -
解决:使用空合并运算符或
isset()
:$selectedHobbies = isset($_POST['hobbies']) ? $_POST['hobbies'] : [];
问题3:动态生成的选项被篡改
- 场景:用户提交了不在允许列表中的值。
- 解决:通过
array_intersect()
过滤非法值(见2.2节)。
5. 完整示例
HTML表单(form.html
)
<form action="process.php" method="post"><fieldset><legend>选择你的兴趣:</legend><?php$hobbies = ['reading' => '阅读', 'coding' => '编程', 'sports' => '运动'];foreach ($hobbies as $value => $label) {echo '<label><input type="checkbox" name="hobbies[]" value="' . htmlspecialchars($value) . '"> ' . htmlspecialchars($label) . '</label><br>';}?></fieldset><input type="submit" value="提交">
</form>
PHP处理脚本(process.php
)
<?php
// 1. 接收数据并验证
$selectedHobbies = $_POST['hobbies'] ?? [];
if (!is_array($selectedHobbies)) {die("非法请求");
}// 2. 过滤合法值
$allowedHobbies = ['reading', 'coding', 'sports'];
$validHobbies = array_intersect($selectedHobbies, $allowedHobbies);
if (empty($validHobbies)) {die("请至少选择一个兴趣");
}// 3. 安全存储到数据库(示例)
try {$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'user', 'pass');$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);$stmt = $pdo->prepare("INSERT INTO user_hobbies (user_id, hobby) VALUES (?, ?)");foreach ($validHobbies as $hobby) {$stmt->execute([1, $hobby]); // 假设用户ID为1}echo "保存成功!选择的兴趣:" . implode(', ', $validHobbies);
} catch (PDOException $e) {die("数据库错误:" . $e->getMessage());
}
6. 高级应用
6.1 将数据存储为JSON
-
场景:单个字段存储多个选项(非关系型数据)。
-
示例:
$hobbiesJson = json_encode($validHobbies); // 存入数据库 $stmt = $pdo->prepare("UPDATE users SET hobbies = ? WHERE id = ?"); $stmt->execute([$hobbiesJson, $userId]);
6.2 回显已选中的复选框
-
场景:编辑表单时显示用户之前的选择。
-
示例:
$userHobbies = ['reading', 'sports']; // 从数据库读取 foreach ($allowedHobbies as $value => $label) {$checked = in_array($value, $userHobbies) ? 'checked' : '';echo '<input type="checkbox" name="hobbies[]" value="' . $value . '" ' . $checked . '> ' . $label; }
项目示例:留言管理系统
1. 项目结构
public/├── index.php # 表单页面 & 处理结果└── style.css # 一点简单样式
2. 代码
2.1 public/index.php
<?php
/*** index.php — 简易留言板 Demo** 运行方式(任选其一):* 1) PHP 内置服务器:php -S localhost:8000 -t .* 2) Docker:docker run -it --rm -p 8000:80 -v "$PWD":/var/www/html php:8.3-apache** 生产环境注意:* - 请添加 CSRF token、防爆破、验证码等安全措施* - 若要写数据库,请使用 PDO 并开启预处理防止 SQL 注入* - 推荐使用 PRG 模式避免重复提交*//* ---------- 0) 初始化 ---------- */// 开启 Session(如果后续要加 CSRF,可在此使用)
// session_start();// 设置默认时区,防止 date() 提示 warning
date_default_timezone_set('Asia/Shanghai');// 统一输出编码(部分低版本 PHP CLI 默认 ISO-8859-1)
ini_set('default_charset', 'UTF-8');// 定义变量以便模板区直接使用
$result = null;
$error = null;/* ---------- 1) 业务逻辑:仅在 POST 时处理 ---------- */
if ($_SERVER['REQUEST_METHOD'] === 'POST') {// 使用 null 合并运算符防 Notice$name = trim($_POST['name'] ?? '');$message = trim($_POST['message'] ?? '');// ---- (1) 基础验证 ----if ($name === '' || $message === '') {$error = '姓名和留言内容均不能为空!';} elseif (mb_strlen($name, 'UTF-8') > 30) {$error = '姓名请控制在 30 个字符以内!';} else {// ---- (2) 业务存储 / 发送邮件 / 写日志 ----// ★此处仅做演示;若要入库请使用 PDO + prepared statement$result = ['name' => htmlspecialchars($name, ENT_QUOTES, 'UTF-8'),'message' => htmlspecialchars($message, ENT_QUOTES, 'UTF-8'),'time' => date('Y-m-d H:i:s'),'ip' => $_SERVER['REMOTE_ADDR'] ?? 'unknown',];// ---- (3) 若用 PRG,取消注释下面两行 ----// $_SESSION['flash'] = $result; // 存 flash 数据// header('Location: '.$_SERVER['PHP_SELF']); exit;}
}/* ---------- 2) 取回 flash 数据(如果采用了 PRG) ---------- */
// if (isset($_SESSION['flash'])) {
// $result = $_SESSION['flash'];
// unset($_SESSION['flash']);
// }
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>PHP 表单传值 Demo</title><link rel="stylesheet" href="style.css"><!-- 基础安全请求头,可按需调整 --><?phpheader('X-Frame-Options: SAMEORIGIN');header("Content-Security-Policy: default-src \'self\'");?>
</head>
<body><h1>留言板(示例)</h1><!-- ---------- 3) 结果区 ---------- --><?php if ($result): ?><section class="success"><h2>提交成功!</h2><p><strong><?= $result['name'] ?></strong>于 <?= $result['time'] ?> 留言:</p><!-- nl2br 把换行转换为 <br>;white-space:pre-wrap 在 CSS 里也能实现 --><blockquote><?= nl2br($result['message']) ?></blockquote><small>IP:<?= $result['ip'] ?></small></section><?php elseif ($error): ?><section class="error"><?= $error ?></section><?php endif; ?><!-- ---------- 4) 表单区 ---------- --><form action="" method="post" autocomplete="off"><label>姓名:<input type="text"name="name"maxlength="30"requiredvalue="<?= isset($name) ? htmlspecialchars($name, ENT_QUOTES, 'UTF-8') : '' ?>"></label><label>留言:<textarea name="message"rows="5"required><?= isset($message) ? htmlspecialchars($message, ENT_QUOTES, 'UTF-8') : '' ?></textarea></label><button type="submit">提交</button></form>
</body>
</html>
2.2 public/style.css
body{font-family:system-ui, sans-serif;max-width:680px;margin:40px auto;padding:0 1rem;line-height:1.6}
h1{margin-bottom:1rem}
form{display:flex;flex-direction:column;gap:1rem}
label{display:flex;flex-direction:column;font-weight:600}
input,textarea{font:inherit;padding:.5rem;border:1px solid #ccc;border-radius:6px}
button{padding:.6rem 1.2rem;border:none;border-radius:6px;cursor:pointer;background:#007aff;color:#fff;font-weight:600}
button:hover{opacity:.9}
.success, .error{padding:1rem;border-radius:6px;margin-bottom:1rem}
.success{background:#e8f9e9;border:1px solid #4caf50}
.error{background:#ffeef0;border:1px solid #f44336}
blockquote{margin:.5rem 0;padding-left:1rem;border-left:4px solid #ccc;font-style:italic;white-space:pre-wrap}
相关文章:
第十一章-PHP表单传值
第十一章-PHP表单传值 一,核心概念 1. 表单的基本结构(HTML) 通过HTML的<form>标签定义表单,关键属性包括: action: 指定处理表单数据的PHP脚本路径(如action"process.php")…...
互联网大厂Java求职面试:从Java核心到微服务的深度探索
场景引入: 在一个阳光明媚的早上,谢飞机满怀信心地走进了一家知名互联网大厂的面试房间。面试官坐在桌子的另一端,手中拿着一份简历,面带微笑地开始了今天的面试。 第一轮提问:核心语言与平台 面试官: "谢飞机,你好。我看到你熟悉Java SE,能不能简单介绍一下Ja…...
微服务即时通信系统(十二)---入口网关子服务
目录 功能设计 模块划分 业务接口/功能示意图 服务实现流程 网关HTTP接口 网关WebSocket接口 总体流程 服务代码实现 客户端长连接管理封装(connectionManage.hpp) proto文件的编写 身份鉴权proto 事件通知proto 各项请求的URL的确定 服务端完成入口网关服务类…...
ES练习册
es索引结构和数据实例 这里提供索引结构和数据实例提供给大家使用练习,希望大家能够一起成长进步~~~~ #添加索引 PUT /ecommerce_products {"settings": {"number_of_shards": 3,"number_of_replicas": 1,"analysis": {&…...
运算符分为哪几类?哪些运算符常用作判断?简述运算符的优先级
运算符主要分为以下几类: 算术运算符:用于执行基本的数学运算,如加、减、乘、除、取模等。例如:、-、*、/、%。赋值运算符:用于将值赋给变量。例如:、、-、*、/、%。比较运算符ÿ…...
shell编程基础知识及脚本示例
文章目录 前言一、shell变量1.命名规则2.定义及使用变量 二、shell传递参数1.位置参数2. 任意参数 三、shell一维数组0.定义方式1.定义并获取数组的单个元素2.定义并获取数组的所有元素3.定义并获取数组的元素个数4.定义并获取数组的元素索引 四、shell条件判断语法五、shell常…...
再学GPIO(一)
GPIO输出模式 STM32的GPIO(General Purpose Input Output 通用输入输出)引脚支持多种输出模式,不同模式决定了引脚的驱动能力和信号特性。STM32的GPIO输出模式主要分为以下4种: 推挽输出(Push-Pull Output)…...
OpenCV彩色图像分割
OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 灰度图像大多通过算子寻找边缘和区域生长融合来分割图像。彩色图像增加了色彩信息,可以通过不同的色彩值来分割图像,常用彩色空间HSV/HIS、RGB、LAB等都可以用于分割。本节使用inRange…...
django filter 排除字段
在Django中,当你使用filter查询集(QuerySet)时,通常你会根据模型的字段来过滤数据。但是,有时你可能想要排除某些特定的字段,而不是过滤这些字段。这里有几种方法可以实现这一点: 使用exclude方…...
多模态大语言模型arxiv论文略读(四十五)
CAT: Enhancing Multimodal Large Language Model to Answer Questions in Dynamic Audio-Visual Scenarios ➡️ 论文标题:CAT: Enhancing Multimodal Large Language Model to Answer Questions in Dynamic Audio-Visual Scenarios ➡️ 论文作者:Qil…...
Vue3 通过Vue3-Print-Nb在线工单打印 模板打印 自定义打印 打印下载
介绍 通过在应用中集成打印功能,用户可以直接从页面打印工单,不用导出文件或使用其他外部工具。节省时间,提高效率,特别是当需要大量打印时。同时也可以将文件模板上传到数据库,提供给部门工作自行下载。 开源文档&am…...
视觉“解锁”触觉操控:Franka机器人如何玩转刚柔物体?
集智联机器人(Plug & Play Robotics),简称PNP机器人,是Franka Robotics和思灵机器人金牌合作伙伴,集智联机器人团队成员均来自于国内外机器人行业知名企业,具有较强的学术背景。PNP机器人致力于为客户提…...
FlinkUpsertKafka深度解析
1. 设计目标与工作机制 Upsert-Kafka Connector 核心功能:支持以 Upsert(插入/更新/删除) 模式读写 Kafka 数据,适用于需要动态更新结果的场景(如聚合统计、CDC 数据同步)。数据流类型: 作为 …...
百度Create大会深度解读:AI Agent与多模态模型如何重塑未来?
目录 百度Create大会亮点全解析:从数字人到Agent生态布局 数字人商业化:从"拟人"到"高说服力"的进化 Agent生态:从"心响"App看百度的Agent战略布局 "心响"App的技术架构与创新点 多模态大模型&a…...
新能源汽车运动控制器核心芯片选型与优化:MCU、DCDC与CANFD协同设计
摘要:随着新能源汽车产业的迅猛发展,汽车运动控制器的性能和可靠性面临着更高的要求。本文深入探讨了新能源汽车运动控制器中MCU(微控制单元)、DCDC电源管理芯片和CANFD总线通信芯片的选型要点、优化策略及其协同设计方案。通过综…...
【软件工程】 白盒测试简介
1. 前言 在软件测试过程中,白盒测试(White-box Testing)是一种重要方法,它通过检查程序内部结构来验证软件功能。本文以一道典型的伪代码程序为例,结合白盒测试的基本操作,设计语句覆盖测试用例࿰…...
uniapp自定义一个选择年月日时分的组件。
<template><view><u-popup :show"timePopShow" mode"bottom" close"close" open"open" :closeOnClickOverlay"true"><view class"popup-container"><!-- 自定义时间内容 --><vi…...
Git命令(Gitee)
三板斧: git init //初始化本地仓库 git add . //添加所有文件到缓存区 (或指定文件) git commit -m "备注" //提交,填写备注 git remote add origin <远程仓库链接> git push -u origin ma…...
Node.js 应用部署:镜像体积优化与安全的多阶段构建探索
Node.js 应用部署:镜像体积优化与安全的多阶段构建探索 在开发 Node.js 应用时,部署过程中的镜像体积优化和安全性保障是至关重要的环节。本文将通过两种不同的 Docker 部署方式,深入探讨如何实现高效的镜像体积优化和安全的部署环境。 传统的单阶段构建方式 许多开发者在…...
深度解析:Web Crawling与Web Scraping的区别与联系
在现代互联网数据驱动的时代,Web Crawling(网页爬取)和Web Scraping(网页抓取)成为数据采集领域的两大核心技术。尽管两者常被混用,但它们在技术实现、应用目的和操作流程上存在显著差异。本文将基于权威资料,特别是维基百科的定义࿰…...
C# 利用log4net 工作台打印和保存到文件
目录 log4net简介引言1、添加引用库2、添加引用和构建实例3、添加属性配置4、添加配置文件最后 log4net简介 log4net是一个开源的日志记录组件,专为.NET平台设计。它是Apache log4j框架在Microsoft .NET平台的实现,属于Apache Logging Servic…...
2025 VSCode中如何进行dotnet开发环境配置完整教程
我一直都是用Visual Studio 2019来开发C#项目的,用的比较顺手,也习惯了。看其他技术文章有介绍VS Code更轻量,更方便。 所以就想来研究如何使用VS Code,看看它是如何构建代码、调试代码、如何运行C#应用程序。 本文将详细介绍如何…...
vscode本地化显示远程图形化界面
远程登陆到服务器端 sudo vim /etc/ssh/sshd_config修改文件中的参数,保存。主要参数如下 配置好上述后需要reload一下ssh,安装xclock。 service ssh reload # 安装x11-apps,这样就可以使用xclock apt install x11-apps查看环境变量,在其中并没有DISPL…...
STM32 CAN通信 HAL库实战教程:从零到测试成功
STM32 CAN通信 HAL库实战教程:从零到测试成功 <我打印的是陀螺仪的数据> 目录 简介:为什么学习CAN通信CAN通信基础概念STM32 CAN硬件配置CAN初始化详解CAN数据发送实现CAN数据接收实现测试与验证方法常见问题与解决总结与拓展 1. 简介࿱…...
数据结构强化篇
应用题 排序 插入排序 void InsertSort (ElemType A[], n int) {int i, j;for (i2; i<n; i) //依次将 A[2]~A[n]插入前面已排序序列if (A[i]<A[i-1]) { //若 A[i]关键码小于其前驱,将 A[i]插入有序表A[0]A[i]; //复制为哨兵,A[0]不存放…...
泰迪杯实战案例超深度解析:旅游景点游客流量预测与资源优化
(2025年泰迪杯数据挖掘挑战赛D题特等奖案例) 一、案例背景与目标 1.1 应用场景与痛点 某5A级景区面临以下核心问题: 拥堵严重:节假日热门景点游客密度超过10人/㎡,排队时间长达2小时。 资源浪费:接驳车空载率30%,餐饮点位在非高峰时段闲置率60%。 应急滞后:突发降雨或…...
qt 3d航迹图
一般就是三种方法 1.opengl,vtk这种从零自己画,网上也可能有半成品,大多是付费的。 2.重写qwt3d,07年就停止更新了,画出来类似opengl,需要自己修改参数,参数修改不对很难搞,对于经…...
探索排序算法的奥秘(上):冒泡排序、选择排序、插入排序
在计算机科学中,排序算法是数据处理的基础工具之一。通过对数据进行有序排列,可以极大地提高数据检索和处理的效率。本文将详细介绍三种经典的排序算法:冒泡排序、选择排序和插入排序。我们将从算法思想、原理、代码实现(C语言、P…...
Stable Diffusion 技术全景解析与行业竞争力分析
目录 一、Stable Diffusion 技术概览 1. 核心背景 2. 技术架构 二、行业地位与竞品对比 1. 市场定位 2. 核心竞争优势 三、部署成本与硬件要求 1. 硬件配置方案 2. 优化技巧 四、优势与劣势分析 1. 核心优势 2. 主要劣势 五、开源策略与商业模型 1. 开源协议 2. …...
基于Python的DeepSeek API图形界面开发
基于Python的DeepSeek API图形界面开发 在人工智能技术广泛应用的今天,如何将强大的API能力与用户友好的界面结合,成为开发者关注的重点。本文将以DeepSeek API为例,详解如何通过Python构建兼具功能性与美观度的GUI应用程序。 一、技术架构…...
w~嵌入式C语言~合集4
我自己的原文哦~ https://blog.51cto.com/whaosoft/13870376 一、STM32怎么选型 什么是 STM32 STM32,从字面上来理解,ST是意法半导体,M是Microelectronics的缩写,32表示32位,合起来理解,STM32就是指S…...
自动驾驶(ADAS)领域常用数据集介绍
1. KITTI 数据集 简介:由德国卡尔斯鲁厄理工学院与丰田研究院联合创建,是自动驾驶领域最经典的评测基准,涵盖立体视觉、光流、3D检测等任务。包含市区、乡村和高速公路场景的真实数据,标注对象包括车辆、行人等,支持多…...
【嵌入式八股23】Linux关键指令
系统关机命令 在 Linux 系统中,有多种命令可用于实现系统关机或重启操作,以下为你详细介绍各命令及其特点: 指令 说明 shutdown该命令能够安全地将系统关机。它允许用户指定关机的时间,还可以在关机前向所有登录用户发送警告消息。例如,shutdown -h now 可立即关机,shu…...
机器学习的一百个概念(13)布里尔分数
前言 本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索: 知识库创建人机器学习@Shockang机器学习数学基础@Shocka…...
AI提示词(Prompt)终极指南:从入门到精通(附实战案例)
在AI重塑工作方式的今天,掌握Prompt工程已成为智能时代的必备技能。本指南系统解析提示词设计精髓,从认知底层逻辑到实战应用技巧,带您解锁AI工具的完整潜能。涵盖主流模型选型策略、三大黄金法则、结构化模板及典型避坑指南,更有…...
鸿蒙版电影app设计开发
鸿蒙电影购票APP项目介绍 一、项目概述及使用方式 (一)项目概述 在智能手机与移动互联网蓬勃发展的当下,移动设备已成为人们生活不可或缺的一部分,而电影购票这一日常娱乐消费行为也日益向移动端迁徙。鸿蒙系统作为新兴力量&…...
如何启动jar包隐藏cmd窗口
要启动一个JAR文件并隐藏命令行窗口(cmd),你可以使用不同的方法,具体取决于你的操作系统。以下是几种常见的方法: 在Windows中使用批处理文件 你可以创建一个批处理文件(.bat文件),…...
【Redis】基础3:一些应用场景
文章目录 1. session管理1.1 手机号登录流程1.2 session的数据结构设计1.2.1 一些概念1.2.2 session数据结构例子 1.3 引入redis来实现共享session1.3.1 流程发送验证码短信的流程验证码登录流程登录检查流程 1.3.2 要考虑的问题 2. 限时抢购代金券2.1 业务流程2.2 代金券表设计…...
【创新实训个人博客】multi-agent调研(2)
下面的部分我们将简单介绍现有的三个multi-agent框架,并对它们进行简单的比较 multi-agent框架分析 MetaGPT 相关资料 代码repo:https://github.com/geekan/MetaGPT论文:https://arxiv.org/pdf/2308.0035 AgentVerse 相关资料 代码repo&…...
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡 在科技飞速发展的当下,鸿蒙 Next 系统无疑成为了众多科技爱好者与行业人士关注的焦点。今日,卓伊凡便收到这样一个饶有趣味的问题:鸿蒙 Next 系统究竟需要多长时间才能完全成熟ÿ…...
模方ModelFun瓦片数据操作教程
摘要:本文主要介绍模方ModelFun瓦片数据操作,包含:打开/关闭瓦片数据,备份和恢复,导出 OBJ/ OSGB,导出DOM/DSM。 1.打开/关闭瓦片数据 在“总体模型视图/OSGB”里对 tiles 进行操作:选择&…...
RabbitMQ应用(基于腾讯云)
1.防火墙配置 关于RabbitMQ的远程,主要有4个端口需要开通【入站规则】,分别是: 端口 5672:这是 RabbitMQ 的默认 AMQP(Advanced Message Queuing Protocol)端口,用于客户端与 RabbitMQ 服务器之…...
堆和二叉树的概念和操作
目录 1.树的概念 1.1数的表示 1.2二叉树 1.3特殊的二叉树 1.3.1满二叉树 1.3.2完全二叉树 1.3.3 二叉树存储结构 2.堆 2.1堆的实现 初始化和销毁 堆的插入 堆的向上调整算法编辑 编辑 堆的删除 出堆顶 1.树的概念 树是非线性的数据结构,有限节点具有的层…...
互联网大厂Java面试实录:从Spring Boot到微服务架构的技术问答
互联网大厂Java面试实录:从Spring Boot到微服务架构的技术问答 在某互联网大厂的面试现场,严肃的面试官开始了对求职者谢飞机的技术考核。此次面试围绕Java技术栈的应用与场景展开。 第一轮:基础架构与语言 面试官: 请你用简单…...
Rollup、Webpack、Esbuild 和 Vite 前端打包工具
Rollup、Webpack、Esbuild 和 Vite 都是前端开发中常用的打包工具,它们各有特点,以下是对它们的详细对比: 核心功能 Rollup:专注于 JavaScript 模块打包,擅长将小的 JavaScript 模块打包成一个或多个文件,…...
刀客独家 | 潘胜接管百度移动生态市场部
一、 据刀客doc向独家信源确认,百度移动生态事业群(MEG)市场部日前完成重要人事调整:潘胜已经接任市场负责人。 此前,根据雷锋网3月底的报道,百度云渠道生态总经理陈之若离职,原移动生态事业群…...
如何在Chrome浏览器中启用硬件加速【提升浏览器性能】
在使用谷歌浏览器时,硬件加速是提升性能的一个重要功能。它可以将一些计算任务从CPU转移到GPU,从而加速图像处理、视频播放等任务。如果您希望提升浏览器的运行速度,可以通过以下简单步骤启用硬件加速。 1. 打开Chrome浏览器设置 首先&#…...
部署mongodb三幅本集群
背景:原先使用的mongodb采用的是SSPL协议,此协议客户检测到有bug,故需要替换mongodb的版本,原先采用helm部署的mongodb但是无法找到4.1.4版本的chart包,故手写yaml部署 1、部署mongodb-arbiter服务 这个服务是用来选…...
JavaScript 解构赋值(下):对象解构与高级应用
对象解构赋值 基本语法 const person { name: Alice, age: 30 }; const { name, age } person;console.log(name); // Alice console.log(age); // 30别名 const { name: fullName, age: years } person; console.log(fullName); // Alice console.log(years); // 30…...
批量级负载均衡(Batch-Wise Load Balance)和顺序级负载均衡(Sequence-Wise Load Balance)
本文主要比较了批量级负载均衡(Batch-Wise Load Balance)和顺序级负载均衡(Sequence-Wise Load Balance)在 Mixture-of-Experts(MoE)模型训练中的核心区别 。批量级负载均衡通过对整个训练批次的专家负载进行平衡约束,实现了更灵活的均衡策略,有助于专家在不同领域的专…...