从IE8发布到PHP会产生空白$ _POST

时间:2010-12-10 14:37:11

标签: php internet-explorer-8

我有一个简单的HTML表单,向php脚本发送一个帖子请求。在IE8中,表单只能间歇性地工作 - 大多数时候PHP脚本看到一个空的$ _POST变量。

这是我的代码:

<html>
<head>
<title>Post test</title>
</head>
<body style="text-align: center;">
<?php

echo "<pre>".print_r($_POST, TRUE)."</pre>";

?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<input type="text" name="name">
<input type="hidden" name="hidden" value="moo" >
<input type="submit" value="Search" >
</form>
</body>
</html>

有时print_r会给出你期望的响应(即它填充了表单中的数据),大部分时间都是空的。

无法使用POST对于Web应用程序来说有点问题 - 任何人都知道发生了什么,以及如何解决它?

5 个答案:

答案 0 :(得分:2)

感谢大家趟这个。

事实证明问题出在我启用的Apache模块中。

这是一个允许apache使用Windows身份验证通过Windows用户ID识别用户的模块 - mod_auth_sspi

效果是由模块中的已知错误引起的,但是有一个简单的额外指令可以解决,直到在下次更新中添加修复,如下所述:

http://sourceforge.net/projects/mod-auth-sspi/forums/forum/550583/topic/3392037

答案 1 :(得分:1)

听起来非常奇怪。是否也会在其他版本的IE中发生?

我不能告诉你问题是什么,但这是我对如何诊断的建议:

  1. 打印$_REQUEST而非$_POST,以查看数据是否通过其他方式传入。

  2. 使用FiddlerWireshark等工具准确跟踪浏览器实际发送的内容。

  3. 特别是Fiddler对我有很多帮助(主要是在调试Ajax代码时),并且会告诉你浏览器发布的确切内容。如果您的Web服务器是localhost,您还可以使用Fiddler跟踪PHP获取之前收到的内容。如果没有,如果你有权安装那种东西,你可以在服务器上使用wireshark。

    除了Fiddler之外,我还建议使用像Firebug这样的基于浏览器的工具,但我不知道哪一个IE足够好(IE开发工具栏没有提供请求和响应数据的详细信息,据我所知)。

答案 2 :(得分:0)

我怀疑当脚本告诉你$ _POST为空时,你实际上并没有POST表单。您可以在print($_SERVER['REQUEST_METHOD']);

之后添加print_r($_POST);进行检查

答案 3 :(得分:0)

如果您在某些时候发布文件(例如使用文件输入),请确保在enctype="multipart/form-data"元素中设置<form>

答案 4 :(得分:0)

你检查过生成的HTML吗?是否有可能echo $_SERVER['PHP_SELF']没有产生你所追求的输出,这会混淆html格式,这会弄乱POST?