post表单必须显式声明method="post",漏写或拼错(如"post"、"post ")会导致浏览器降级为get,后端$_post为空;文件上传还须设enctype="multipart/form-data"。

POST 表单必须显式声明 method="post"
不写 method 属性,浏览器默认用 GET;写了但拼错(比如 method="Post" 或 method="POST " 带空格),部分浏览器会降级为 GET。最终后端收不到 $_POST 数据,print_r($_POST) 输出空数组。
正确写法只有这一种:<form method="post" action="/handle.php"></form>。大小写敏感,不能带多余空格或引号嵌套错误。
- 如果后端是 PHP,务必检查是否真的在接收
$_POST而不是$_GET或$_REQUEST - 调试时可在 PHP 文件开头加
var_dump($_SERVER['REQUEST_METHOD']);确认请求确实是 POST - 表单外的
<input>元素(不在<form></form>内)永远不会提交,哪怕有name
所有要传的数据都得有 name 属性
name 是服务器识别字段的唯一依据。没有 name 的 <input>、<select></select>、<textarea></textarea>,哪怕填了内容、点了提交,也不会进请求体。
常见漏掉的场景:动态生成的表格行、JS 插入的输入框、用 <button></button> 代替 <input type="submit"> 却没设 name。
- 按钮值也要传?给
<button type="submit" name="action" value="delete">删除</button> - 多选 checkbox 需用数组命名:
name="tags[]",PHP 才能收到数组而非单个字符串 - 隐藏字段传参很常用:
<input type="hidden" name="ref_id" value="12345">
文件上传必须配 enctype="multipart/form-data"
只要表单里有 <input type="file">,enctype 就不能省,也不能写成 application/x-www-form-urlencoded——否则文件根本不会发出去,后端 $_FILES 为空,$_POST 也可能收不到其他字段。
这个属性只对 POST 表单生效,GET 表单不支持文件上传。
- 正确写法:
<form method="post" enctype="multipart/form-data" action="/upload.php"></form> - 即使只有 1 个文件字段,其他全是文本,也必须设此属性
- 设了但后端没处理
$_FILES,文件就丢了;光读$_POST是看不到文件名或内容的
后端接收不到数据?先看请求体有没有真发出去
浏览器开发者工具 Network 标签页里点提交后的请求,看 Headers → Request Payload 是否有内容。如果为空,说明前端表单结构就有问题;如果有内容但后端收不到,大概率是 PHP 配置或接收方式不对。
- PHP 默认能直接读
$_POST,但若用了json_decode(file_get_contents('php://input')),那是给 raw body 准备的,和普通表单不兼容 - Apache + mod_php 下,
post_max_size和upload_max_filesize限制可能拦住大表单,报错却静默 - Nginx 用户注意:
client_max_body_size默认常为 1MB,超了会返回 413 错误,但页面可能只显示空白
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











