PHP $_POST不起作用,但$_GET运行良好

13

我正在尝试使用<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_dump)

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也无效。)
请注意,在本地主机上,所有这些功能都可以正常工作,但在运行Windows的服务器上则不行。因此,似乎是服务器的问题,但我不知道是什么问题。您可以在此处查看PHPInfo:http://brailleapps.org/phpinf0.php 有任何想法吗?
编辑:已解决!请参见下文。

3
这可能与内容类型有关。如果没有识别到任何内容类型或缺失,则 $_POST 是空的。请尝试设置 if(empty($_SERVER['CONTENT_TYPE'])) {$_SERVER['CONTENT_TYPE'] = "application/x-www-form-urlencoded";}。还有 var_dump(file_get_contents('php://input')); 的输出是什么? - Quasdunk
2
你能检查一下_SERVER["REQUEST_METHOD"]变量,确保它已经被正确地发送为Post请求了吗? - Pedrom
@Quasdunk 刚刚尝试了那个 if(empty($SERVER[... 行,但似乎没有产生任何影响。你的第二段代码输出了 string(0) "" - GMA
$_POST变量的作用范围仅限于一个脚本...所以在使用var_dump()之前,请检查是否已经迁移到其他脚本并返回到此脚本。 - funtime
@Quasdunk 谢谢!在我的POST请求中将Content-Type设置为“application/json”是导致这个问题的原因。使用默认的“text/html” HTTP内容类型发送POST请求已经解决了这个问题,现在我可以再次看到我的POST变量了!对于任何有兴趣正确处理PHP中的“application/json”请求的人,请查看:https://dev59.com/rGox5IYBdhLWcg3w6odg - TheKarateKid
显示剩余6条评论
4个回答

4

最终,我解决了它。为了以防万一,我在这里发布了有效的方法,以便将来有相同问题的人可以参考。

结果发现其中一个HTTP模块干扰了POST请求:

RadCompression
RadUploadModule

关闭这些模块后,POST请求就正常工作了。

(请注意,这是在全新的应用程序上进行的操作,我知道没有任何依赖于这些模块的现有代码...关闭它们可能会产生我不知道的意想不到的后果,因此请自行决定是否关闭.)


如何在MAMP中关闭这些模块,你能解释一下吗? - rajarajan2809

2

抱歉,我读题太快了。我看到 Windows 就以为是 IIS。 - Bart
1
@AarolamaBluenk - PHPinfo 几乎可以确定是 IIS。 - slugonamission
1
确实如此。Microsoft-IIS/7.5。 - Bart
1
算了吧,保留那条注释,我怀疑它会对后来的某个人有帮助。 - Duniyadnd
我认为我遇到了这个问题,使用Windows Azure托管的网站,_GET可以正常工作,但_post无法从表单传递数据。 - Jon D
显示剩余3条评论

0
另外一件事是,如果您曾经更改过 .htaccess 文件来隐藏格式,例如 .php 或 .html
请使用 action="filename" 而不是 action="filename.php"
这样您的问题就解决了。

0

我曾经遇到过$_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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接