【问题标题】:Posting from IE8 to PHP gives blank $_POST从 IE8 发布到 PHP 给出空白 $_POST
【发布时间】:2011-05-23 12:43:48
【问题描述】:

我有一个简单的 HTML 表单,向 php 脚本发送一个 post 请求。在 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 会给出您期望的响应(即它填充了表单中的数据),但大多数时候它是空的。

对于 Web 应用程序来说,不能使用 POST 是一个问题 - 任何人都知道发生了什么,以及如何解决它?

【问题讨论】:

  • 我无法重现这个。我一直坐在这里点击按钮 30 秒,从来没有看到过掉线的 POST。您确定您的 IE 设置或互联网连接没有问题吗?
  • 你确定它在做回发,而且不仅仅是 IE8 不接受 ENTER 按钮作为提交吗? (例如stackoverflow.com/questions/964734/… & stackoverflow.com/questions/3631949/… )——也可以查看stackoverflow.com/questions/2383190/…
  • 感谢大家的关注。这就是整个脚本 - 我将它复制到一个单独的文件中以确保!这不是网络问题,因为我在我的本地机器上安装了 apache。我正在点击提交按钮,而不是使用回车键。
  • 我意识到这是一个测试脚本,这并不能解决您的问题,但$_SERVER['PHP_SELF'] 在这种情况下是不安全的。请注意。
  • 感谢 scoates - 我不知道 $_SERVER['PHP_SELF'] 有任何问题 - 风险在哪里?

标签: php internet-explorer-8


【解决方案1】:

这听起来非常非常奇怪。其他版本的 IE 也会出现这种情况吗?

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

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

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

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

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

【讨论】:

  • 您可以在 IE 中使用 Firebug Lite,但我不确定它在这里有什么好处。
  • 感谢 spudley - 我会尝试 fiddler 看看这是否揭示了什么。现在还有几天,因为我周末回家了 - 请注意这个空间。
【解决方案2】:

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

【讨论】:

  • 我已经这样做了,request_method 将该方法报告为“post” - 不过感谢您的建议。
  • 那么似乎有什么不愉快的事情正在发生。重新格式化并重新安装 Windows?这仍然是习惯方式吗?
  • 坦率地说,我会重新格式化并安装 Linux,但我们的 IT 人员会对任何非 M$ 的东西感到紧张。事实证明,我们不能为此责怪盖茨先生!
【解决方案3】:

如果您有时会发布文件(即使用文件输入),请确保在您的 &lt;form&gt; 元素中设置 enctype="multipart/form-data"。

【讨论】:

    【解决方案4】:

    你检查过生成的html吗?是否有可能 echo $_SERVER['PHP_SELF'] 没有产生您所追求的输出,从而弄乱了 html 表单,从而弄乱了 POST?

    【讨论】:

    • 谢谢 - 我已经检查过了,但如果其他人发现 $_POST 有问题,请注意
    【解决方案5】:

    感谢大家参与这个。

    原来问题出在我启用的 Apache 模块上。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 2019-05-31
      • 1970-01-01
      相关资源
      最近更新 更多