只有带name属性的表单控件才会被提交,name缺失则数据不会出现在$_get或$_post中;get将参数拼在url后,适合搜索等只读操作,post将数据放请求体中,适合登录等敏感操作。

表单提交时哪些字段会被发送
只有带 name 属性的表单控件才会被提交。没有 name 的 <input>、<textarea></textarea>、<select></select>,哪怕有值,也不会出现在 $_GET 或 $_POST 中。
常见错误现象:
- 写了
<input type="text" id="username">,但忘了加name="username",后端收不到 - 用了
type="button"而不是type="submit",表单根本不会触发提交 - 把数据写在
<div> 或 <code><table> 里,这些标签不参与表单序列化 <p>正确做法:</p> <ul> <li>每个要传的字段必须有 <code>name,且值应语义清晰(如name="email") - 提交按钮建议用
<input type="submit">或<button type="submit"></button> - 隐藏数据用
<input type="hidden" name="token" value="abc123">
GET 和 POST 提交方式的关键区别
method="get" 会把所有 name=value 拼到 URL 后面,变成类似 target.html?q=hello&page=2;method="post" 则把数据放在请求体中,URL 干净,且无长度限制。
使用场景:
- 搜索、分页、过滤等只读操作,优先用
GET—— 方便分享链接、支持浏览器前进/后退 - 登录、表单提交、含敏感或大量文本(如评论)的操作,必须用
POST - 不要用
GET传密码、token、长文本,URL 长度受限(通常 2KB 左右),且会留在历史记录和服务器日志中
注意:GET 提交后,目标页面可通过 new URLSearchParams(window.location.search) 直接读取参数;POST 必须由服务端(如 PHP 的 $_POST、Python Flask 的 request.form)接收解析。
如何传递数组或结构化数据
HTML 表单原生不支持嵌套对象,但可以通过命名约定让后端自动解析为数组。PHP 尤其擅长这个,只要 name 带方括号即可。
例如,要传多行表格数据:
<input name="items[0][id]" value="101"><input name="items[0][name]" value="Apple"><input name="items[1][id]" value="102"><input name="items[1][name]" value="Banana">
PHP 接收后,$_POST['items'] 就是二维数组;Node.js 或 Python 需手动解析键名,或改用 FormData + JSON 传输。
容易踩的坑:
- 前端用 JavaScript 动态生成 input 时,忘记同步设置
name(比如用el.name = 'users[]'而不是el.setAttribute('name', 'users[]')) - 多个同名
name="tag"的 checkbox,只有选中的才提交;若全未选中,该 key 在$_POST中根本不存在 - 空字符串、
0、false在 PHP 中可能被empty()误判,建议用isset($_POST['field'])判断是否提交
不依赖后端的跨页传值替代方案
如果只是两个纯 HTML 页面之间传值(没服务端),别硬套表单提交。直接用浏览器存储 API 更可靠。
推荐顺序:
- 单次流程(如向导页 → 结果页):用
sessionStorage,关掉标签页就清空 - 需要持久保留(如用户偏好):用
localStorage,记得JSON.stringify()序列化再存 - 简单参数且非敏感:拼
URLSearchParams到跳转链接,目标页用new URLSearchParams(window.location.search)解析
注意:localStorage 和 sessionStorage 只能存字符串,且同源限制严格 —— http://a.com 和 https://a.com 互不可见;URL 参数长度有限,中文需 encodeURIComponent() 编码。
真正难处理的,从来不是“怎么传”,而是“谁来保证字段名一致、类型对得上、空值有默认行为”。表单看似简单,但 name 写错一个字母,后端就收不到;前后端对同一个字段的校验逻辑不统一,就会出现“前端说填了,后端说没收到”。











