$_POST方法无法正常工作,但$_GET可正常运行的问题排查
你提到$_POST方法接收表单数据时完全没反应,但$_GET能正常运行,结合你给出的代码片段,我来帮你一步步排查可能的原因,先从最常见的问题入手:
检查HTML表单的
method属性
你给出的代码里只展示了PHP逻辑和部分HTML头部,没看到完整的表单代码。首先要确认你的表单是否明确设置了method="post"——如果表单用的是method="get",那数据只会被放到$_GET里,$_POST自然是空的。正确的表单开头应该是这样:<form method="post" action="">另外
action属性如果留空,默认会提交到当前页面,这部分一般没问题,但也要确保没有写错路径。确认表单控件的
name属性
你的PHP代码里尝试获取$_POST['frm'],那对应的表单元素必须设置name="frm"(比如<input type="text" name="frm">)。很多新手容易把id和name搞混:id是给前端样式/JS用的,后端接收数据只认name属性。如果是多个元素要提交成数组,记得写成name="frm[]"。检查表单提交的特殊限制
如果表单里包含文件上传,必须添加enctype="multipart/form-data"属性,否则不仅文件传不了,$_POST数据也可能丢失;如果没有文件上传,这个属性可以省略。另外还要检查有没有JavaScript代码阻止了表单的默认提交行为——比如监听了submit事件却调用了preventDefault(),但没处理后续的提交逻辑,导致数据根本没发出去。排查PHP配置限制
打开PHP的配置文件php.ini,检查post_max_size和upload_max_filesize这两个值:如果提交的数据量(包括表单内容和文件)超过了post_max_size,$_POST会被清空。你可以在代码开头加一句phpinfo();,运行后查看当前的配置值,要是太小就调整配置(注意修改后要重启Web服务器)。用最简代码测试定位问题
把你的代码简化成最基础的版本,排除其他干扰因素,比如:<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { var_dump($_POST); } ?> <!DOCTYPE html> <html lang="fa"> <head> <meta charset="utf-8"> </head> <body> <form method="post"> <input type="text" name="test" value="测试内容"> <button type="submit" name="btn">提交</button> </form> </body> </html>运行这个代码,点击提交后如果能正常输出
$_POST的数据,说明问题出在你原来的代码里(比如被注释掉的user_login函数有逻辑问题,或者表单结构有疏漏);如果还是不行,那大概率是服务器的PHP配置或者Web服务器(比如Nginx/Apache)的配置有问题。
内容的提问来源于stack exchange,提问作者movAhed

