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 工作正常的主要内容,如果未能解决你的问题,请参考以下文章

html日期输入-> php-> sql不工作

用 Postman 发送 POST 参数不起作用,但发送 GET 参数可以

.ajax 不会 POST,但会 GET 没有问题

存储$ _GET并在POST请求中再次使用它

表单的 post 方法如何在幕后实际工作

php高级