PHP $_POST 不工作,但 $_GET 工作正常
Posted
技术标签:
【中文标题】PHP $_POST 不工作,但 $_GET 工作正常【英文标题】:PHP $_POST not working but $_GET works fine 【发布时间】:2013-03-01 10:27:20 【问题描述】:我正在尝试使用<form method="post">
构建一个简单的登录系统。在我的笔记本电脑上的 MAMP 上一切正常,但是当我将脚本上传到服务器(Windows)时它不起作用; $_POST 数组好像是空的。
我把所有内容都注释掉了,但还是不行。
index.php:
<form id="login-form" method="POST" action="_scripts/check_login.php">
Email Address
<input name="login-email" type="text" id="login-email">
Password
<input name="login-password" type="text" id="login-password">
<input type="submit" name="Submit" id="login-button" value="Login">
</form>
_scripts/check_login.php:(除了一些用于调试的 var_dumps,我已经删除了所有内容)
var_dump($_POST);
$loginEmail = trim($_POST['login-email']);
echo '<br>';
$loginPassword = ($_POST['login-password']);
var_dump($loginEmail);
echo '<br>';
var_dump($loginPassword);
当我提交表单时,无论我在文本字段中输入什么,我都会看到:
array(0)
string(0) ""
NULL
如果我在上述两个文件中将“post”的所有实例更改为“get”,一切正常。但我不想使用get。 (如果我使用 method="post" 提交表单,$_REQUEST 也不起作用)。
NB 这一切在 localhost 上都可以正常工作,但在服务器(运行 Windows)上却不行。所以这似乎是服务器的问题,但我不知道是什么。您可以在此处查看 PHPInfo:http://brailleapps.org/phpinf0.php
有什么想法吗?
编辑:解决了!见下文。
【问题讨论】:
$_SERVER
包含哪些 POST 请求?你试过enctype吗?是否允许 FastCGI 客户端接收POST verb for IIS?
我们遇到了同样的问题,但是一旦我们转移到实时服务器,ajax 帖子就无法正常工作。经过长时间的努力,我们发现服务器的 mod rewrite 模块关闭了。一旦打开一切都很好。所以检查一下。但据我所知,POST和mod rewrite没有关系。试一试。
这可能是内容类型的问题。如果没有内容类型被识别或丢失,则$_POST
为空。尝试设置if(empty($_SERVER['CONTENT_TYPE'])) $_SERVER['CONTENT_TYPE'] = "application/x-www-form-urlencoded";
。 var_dump(file_get_contents('php://input'));
说什么?
查看这个帖子:***.com/questions/9914979/php-post-not-working
您能否检查 _SERVER["REQUEST_METHOD"] 变量以确保它被有效地作为 Post 发送?
【参考方案1】:
一种可能性是 POST 不是服务器上允许的动词:
http://www.iis.net/configreference/system.webserver/security/requestfiltering/verbs
【讨论】:
那篇文章是关于 IIS 的;问题是关于 Apache。 卫生部。我读的太快了。我看到了 Windows 并假设为 IIS。 @AarolamaBluenk - PHPinfo 几乎可以肯定地说它是 IIS。 确实如此。 Microsoft-IIS/7.5。 嗯,保持该评论有效,我怀疑它会帮助某人。【参考方案2】:我最终把它修好了,我想我不妨在这里发布什么有用的东西,以防其他人将来遇到同样的问题。
原来这些 HTTP 模块之一干扰了 POST:
辐射压缩 辐射上传模块
关闭这些模块后,POST 工作正常。
(注意这是在一个全新的应用程序上,我知道没有任何现有代码可能依赖于其中一个模块......关闭它们可能会产生我不知道的意外后果,YMMV。 )
【讨论】:
如何在MAMP中关闭这些模块,请解释一下【参考方案3】:我遇到了 $_POST 为空/NULL 的同样问题,在花了 30 分钟搜索 SO 和 Google 之后,我终于找到了适合我的解决方案。
因为我不知道如何更改 MAMP 的 php.ini 文件,所以我编辑了我的 htaccess 以包含以下内容:
php_value post_max_size 60M
php_value upload_max_filesize 60M
我现在可以对提交的输入进行 var_dump($_POST) 处理。
参考链接:http://helpfulcoder.blogspot.ca/2011/01/empty-post-array-in-mamp.html
【讨论】:
以上是关于PHP $_POST 不工作,但 $_GET 工作正常的主要内容,如果未能解决你的问题,请参考以下文章