PHP用$_POST和$_GET接收表单数据须严格匹配HTML的method属性:POST用$_POST['name'],GET用$_GET['name'];name属性缺失、配置限制或未过滤输入是常见错误根源。

PHP怎么用$_POST和$_GET接收表单数据
直接看请求方法:HTML表单的method属性决定PHP该用哪个超全局变量。设为post就查$_POST,设为get就查$_GET——不是“都可以用”,也不是“自动识别”。$_REQUEST虽能混读,但不推荐,它依赖php.ini中request_order配置,行为不稳定。
-
<form method="POST"></form>→ 必须用$_POST['field_name']取值 -
<form method="GET"></form>→ 必须用$_GET['field_name']取值 - 表单没写
method,默认是GET,容易误以为提交成功但数据全在URL里暴露 - 含文件上传的表单必须用
POST,且<form></form>要加enctype="multipart/form-data"
为什么$_POST取不到值?常见断点排查
不是代码写错,往往是环境或配置卡住。最常踩的坑是没检查表单name属性——id或class无效,PHP只认name。
- 浏览器开发者工具里确认表单实际提交的URL和参数(Network → Form Data 或 Query String)
- PHP脚本开头加
var_dump($_POST);或print_r($_GET);,看数组是否为空或结构异常 - 检查
php.ini中post_max_size和max_input_vars是否过小(尤其多复选框或动态字段时) - Apache下若启用了
mod_security,可能拦截含特殊字符(如<script></script>)的POST内容,返回403但无提示
安全处理前必须做这三件事
直接把$_POST或$_GET内容echo到页面、拼SQL、写文件,等于敞开大门。过滤不能靠“用户不会乱输”。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 用
isset()或array_key_exists()判断键是否存在,避免Notice: Undefined index - 用
filter_input()替代裸读:filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL)比trim($_POST['email'])更可靠 - 输出到HTML前必须用
htmlspecialchars(),否则XSS漏洞立现;入库前用预处理语句(PDO/MySQLi),别拼字符串
复选框、下拉多选这些“可能不存在”的字段怎么处理
复选框未勾选时,整个name根本不会出现在$_POST里,不是null也不是空字符串——这是最容易导致逻辑错乱的地方。
立即学习“PHP免费学习笔记(深入)”;
- 复选框组统一用数组名:
<input type="checkbox" name="hobby[]" value="read">,PHP自动转成$_POST['hobby']数组 - 判断是否存在用
isset($_POST['hobby']),再用is_array()确认类型,避免foreach报Warning - 下拉多选(
<select multiple></select>)同理,name必须带[],否则只传最后一个选中的值 - 如果想让“未选”也传一个默认值,可加隐藏域:
<input type="hidden" name="agree" value="0"><input type="checkbox" name="agree" value="1">
Undefined index警告或空数组遍历时崩溃,问题不在语法,而在没理解HTTP表单提交机制本身是稀疏的——它只发你勾选/填写的内容,其余字段天然缺席。


















