
php 表单使用 method="post" 时,数据不会出现在 url 中,必须通过 $_post(而非 $_get)接收;否则将导致变量为空或报错。本文详解表单提交方法与超全局数组的匹配关系,并提供可运行的修复示例。
php 表单使用 method="post" 时,数据不会出现在 url 中,必须通过 $_post(而非 $_get)接收;否则将导致变量为空或报错。本文详解表单提交方法与超全局数组的匹配关系,并提供可运行的修复示例。
在 PHP Web 开发中,表单数据传递失败是最常见的入门级问题之一。其根本原因往往在于HTTP 请求方法(GET vs POST)与服务端数据接收方式不匹配。如您所示的代码中,表单明确声明了 method="post":
<form id="login-form" method="post" target="_self" autocomplete="off"> <input type="text" name="User" required /> <input type="password" name="Password" required /> <input type="hidden" name="Page" value="<?= htmlspecialchars($Page) ?>" /> <input type="submit" value="Sign In"/> </form>
这意味着浏览器会将 User、Password 和 Page 这三个字段作为 HTTP 请求体(body) 发送给服务器,而非附加在 URL 查询字符串中。因此,在 CheckUser.php 中若仍使用 $_GET 读取,所有值都将为 NULL 或触发 Notice: Undefined index 错误。
✅ 正确做法是:统一使用 $_POST 接收 method="post" 表单的数据:
<?php
// CheckUser.php — 修正后版本
$Page = $_POST['Page'] ?? '';
$User = $_POST['User'] ?? '';
$Password = $_POST['Password'] ?? '';
// 安全建议:对输出内容进行 HTML 转义
echo "Page: " . htmlspecialchars($Page) . "<br />";
echo "User: " . htmlspecialchars($User) . "<br />";
echo "Password: " . str_repeat('*', strlen($Password)) . " (masked for security)<br />";
?>⚠️ 关键注意事项:
立即学习“PHP免费学习笔记(深入)”;
- $_POST 和 $_GET 是两个独立的超全局数组,不会自动互通;
- 若需同时获取 URL 参数(如 /CheckUser.php?debug=1)和表单数据,可并用 $_GET 与 $_POST,但不可混用;
- 始终使用空合并运算符(??)或 isset() 检查键是否存在,避免未定义索引警告;
- 对用户输入执行 htmlspecialchars() 再输出,防止 XSS 攻击;
- 隐藏字段 同样遵循 method 规则——POST 表单中它属于 $_POST。
? 扩展提示:若希望调试实际接收到的数据,可在 CheckUser.php 开头添加:
<pre class="brush:php;toolbar:false;"><?php print_r($_POST); ?>
这将清晰显示所有 POST 参数及其值,是快速定位传输问题的高效手段。
综上,表单通信的核心原则是:方法决定载体,载体决定接收器。牢记 POST → $_POST、GET → $_GET,并辅以合理校验与安全处理,即可稳定实现跨页数据传递。










