【问题标题】:PHP $_POST array empty , $_GET intact howeverPHP $_POST 数组为空,但 $_GET 完好无损
【发布时间】:2016-05-17 07:14:18
【问题描述】:

我一直在寻找几个小时来解决我的问题。 我发现了几个类似的问题,但其中很少有适用于我的修复程序,到目前为止都没有奏效。

我正在通过发布表单填写数据库,但数组显示为空:

print_r($_POST);

这会导致

数组( )

index.php 文件的完整代码:

    <?php

print_r($_POST);

?>

<!DOCTYPE html>
<html>
    <head>
        <title> Insert games </title>
    </head>
    <body>
        <form action="index.php" method="post">
            <label for="name"> Game Name </label>
            <input type="text" id="name" name="name">
            <input type="submit" name="submit">
        </form>
    </body>
</html>

所以这应该做的是将name 作为$_POST 值发送到我可以打印它的同一个文件。
它与$_GET 完美配合,而且我知道我可以在不使用$_POST 的情况下制作这个特定的应用程序。但在这个项目的后期,我希望能够使用$_POST 获取更多敏感信息。

已经要求其他发帖人执行几个调试代码,这些是我执行相同操作时得到的结果:

var_dump($_POST);

结果

数组(0) { }

$data = file_get_contents('php://input');
var_dump($data);

结果为@​​987654330@ 显然帖子数据通过这个可见,但我仍然不知道如何使用这些数据以及为什么$_POST 无法正常工作。

我在 Windows 7 上使用 Xampp,Apache 和 MySQL 处于活动状态。

如果有人能给我一些建议,我将非常感激

-米克

【问题讨论】:

  • 奇怪,你更改 PHP.ini 文件吗?
  • 您是否有一个 htaccess 文件,其中包含任何重定向/重写?
  • @IvijanStefanStipić 我曾见过类似的问题,即 php.ini 文件之前存在问题。据说max_post_size(或类似的东西)应该是80M,“Read_Order”(同样不是100%确定名字)应该是“EGPCS”这两个都已经在我的php.ini中了
  • @Andy 我不太清楚你的意思是什么?你能详细说明一下吗?
  • @A-2-A 它又一次没有结果,只有 $_POST 应该在的空数组。

标签: php mysql arrays forms post


【解决方案1】:

尝试输入action="$_SERVER['PHP_SELF']" 并按下提交按钮。

【讨论】:

  • 你的说法是把 PHP 代码放在 HTML 中不带任何标签?当我用 "$_SERVER['PHP_SELF']" 替换我的操作时,它会将我重定向到具有该名称的页面,这给了我一个 404 错误。目前正在尝试将其打印到操作代码中...
  • 是的,你是对的,你应该添加一个php标签,像这样:action="&lt;?php $_SERVER['PHP_SELF']?&gt;"
  • 嗯,它仍然没有结果,我不认为问题出在操作上,因为当我使用 $_GET 时效果很好。
【解决方案2】:

您的代码没有任何问题。

数组([名称] => 测试 [提交] => 提交)

检查您的 Xampp 设置。 你也可以试试 action="/index.php"。

【讨论】:

  • 我应该在我的 Xampp 设置中寻找什么?当我在操作前添加“/”时,它只会将我重定向到 php 文件上方的目录。我很确定我的行为没问题?因为它确实使用 $_GET 方法工作。
【解决方案3】:

我发现@felixsigl 在本网站的另一篇帖子中提供了一个很好的临时解决方法:Link

如下:

function getRealPOST() {
$pairs = explode("&", file_get_contents("php://input"));
$vars = array();
foreach ($pairs as $pair) {
    $nv = explode("=", $pair);
    $name = urldecode($nv[0]);
    $value = urldecode($nv[1]);
    $vars[$name] = $value;
}
return $vars;
}

    $_POST = (getRealPOST());

这使用php://input 字符串并将其转换为一个可以正常使用的$_POST 数组。

我希望这可以帮助遇到与我相同问题的人。
如果有人发现 $_POST 无法正常工作的原因,请务必告诉我。

【讨论】:

    猜你喜欢
    • 2021-02-21
    • 2013-07-19
    • 2014-12-12
    • 2016-06-20
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多