【问题标题】:HTML Form Post Method to PHP: $_POST Empty到 PHP 的 HTML 表单发布方法:$_POST 空
【发布时间】:2018-01-12 23:23:41
【问题描述】:

我搜索了其他几个类似的问题,但没有一个能帮助我。

我正在处理一个将使用 PHP 发布到数据库的表单,但未发送发布数据。 $_POST 是一个空数组,file_get_contents('php://input') 返回一个空字符串。

这是一个 MWE。

HTML:

<!DOCTYPE html>
<html>
<head></head>
<body>   
<div class="content">
    <form action="formprocessor.php" method="post">
        <label>Name: </label>
        <input name="name" type="text" />

        <label>Email: </label>
        <input name="email" type="text" />

        <input name="mySubmit" type="submit" value="Submit!" />
    </form>
</div>
</body>
</html>

formprocessor.php:

<?php

ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);

var_dump(file_get_contents('php://input')); //returns string(0) ""
//or
var_dump($_POST); //returns array(0) {}

echo $_POST;
?>

html 和 php 位于同一目录中的不同文件中。提交此表单后,我在浏览器中得到了这个:

string(0) "" array(0) { } Array

在 Windows Server 2008 上运行 PHP 5.3.28

我相信代码没有问题,但可能与服务器或 php 配置有关。任何方向都会有帮助。

我已经检查了配置文件。我能确定的唯一相关设置是 post_max_size,它的值是 8M。

以下是提交表单后,Chrome 开发者工具上的“网络”标签显示的内容:

【问题讨论】:

  • 不是你的问题,但不要echo var_dump()。相反,var_dump() 单独产生输出总是自己产生,从不返回字符串到 echo。
  • 发布的代码都是正确的。您是否已经有其他 PHP 表单在此服务器上正常运行?我正在尝试在 PHP 或 Win Server(我很生疏)中考虑会阻碍 POST 的配置。
  • 已注明并更正。谢谢。
  • HTML 和 PHP 文件是否在同一个文件夹中?如果没有,那么您需要这样做或将表单的操作修复到正确的 URL。
  • 使用浏览器中的 Web 开发人员工具检查您的请求,以检查是否有任何内容被实际发布

标签: php html post


【解决方案1】:

感谢 DarkBee 为我指明了正确的方向,但我发现了问题所在。我有 URL 重写规则来屏蔽 .html 和 .php 扩展名。这导致发布操作从“formprocessor.php”重定向到“formprocessor”,此时发布数据似乎丢失了。

我将以下内容放在子目录的 web.config 中以禁用规则,现在它按预期工作。

<system.webServer>
<rewrite>
  <rules>
    <remove name="Redirect .php extension" />
    <remove name="hide .php extension" />
  </rules>
</rewrite>

事后看来,这应该非常明显。如果有人知道一种更简洁的方法来避免这种冲突,而不是禁用重写规则,那将很有帮助。希望这可以帮助其他人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多