【问题标题】:PHP: Possible to automatically get all POSTed data?PHP:可以自动获取所有发布的数据吗?
【发布时间】:2011-09-14 03:47:21
【问题描述】:

简单的问题:即使您不知道所有字段,是否可以将所有数据发布到页面?

例如,我想编写一个简单的脚本来收集任何已发布的数据并通过电子邮件发送。我可以预见表单中的字段可能会随着时间的推移而发生很大变化,因此从长远来看,为了节省自己一些时间,我想知道我是否可以编写一些自动收集所有内容的东西?

有可能吗?

【问题讨论】:

标签: php forms post


【解决方案1】:

当然。只需遍历$_POST 数组:

foreach ($_POST as $key => $value) {
    echo "Field ".htmlspecialchars($key)." is ".htmlspecialchars($value)."<br>";
}

【讨论】:

  • @Django Reinhardt 请注意,未选中的复选框不会出现在 $_POST 数组中,因此如果您使用复选框,则需要使用 isset 以不同方式处理它们。
  • 如果有文件,会不会自带
  • $_GET 也可以这样用吗?
【解决方案2】:

没有人提到原始发布数据,但很高兴知道,如果发布的数据没有键,只有值,请使用Raw Post Data

$postdata = file_get_contents("php://input");

PHP 人:

php://input 是一个只读流,允许您读取原始数据 从请求正文。在 POST 请求的情况下,最好 使用 php://input 而不是 $HTTP_RAW_POST_DATA 因为它没有 依赖于特殊的 php.ini 指令。此外,对于那些情况 $HTTP_RAW_POST_DATA 默认不填充,它是一个潜在的 激活时内存占用较少的替代方案 always_populate_raw_post_data。 php://input 不适用于 enctype="multipart/form-data"。

【讨论】:

    【解决方案3】:

    是的,你可以简单地使用

         $input_data = $_POST;
    

    extract() 可能对您有用。

    【讨论】:

    • extract($_POST) 将模仿register_globals。不要那样做。
    • @netcoder;我只是建议他这很有用;这也是一种选择。请你给我一个例子,让你的 cmets 有价值。
    • 在未经过滤/未经处理的用户提供的数据上使用extract 是非常非常糟糕的主意。帮自己一个忙,不要在你的代码中加入不安全因素。
    【解决方案4】:

    所有发布的数据都将在 $_POST 超全局中。

    http://php.net/manual/reserved.variables.post.php

    【讨论】:

      【解决方案5】:

      只要您不想要任何特殊格式:可以。

      foreach ($_POST as $key => $value) 
          $body .= $key . ' -> ' . $value . '<br>';
      

      显然,需要更多格式,但这是“简单”的方式。除非我误解了这个问题。

      你也可以这样做(如果你喜欢这种格式,那肯定更容易):

      $body = print_r($_POST, true);
      

      【讨论】:

      • +1 后一个建议 ($body = print_r($_POST, true);) 对我来说是最简单的,无需遍历子元素。在开发 webhook 应用程序时,我只需要暂时查看原始 POST 内容。
      【解决方案6】:

      您可以使用 array_keys() 检索 $_POST 数组的所有键,然后使用这些键的值构造电子邮件消息。

      var_dump($_POST) 还将为您转储有关 $_POST 中所有信息的信息。

      【讨论】:

        【解决方案7】:

        要添加到其他人,var_export 也可能很方便:

        $email_text = var_export($_POST, true);
        

        【讨论】:

          【解决方案8】:

          您可以使用$_REQUEST$_POST 访问所有内容,例如发布、获取和Cookie 数据。

          【讨论】:

            猜你喜欢
            • 2016-01-14
            • 1970-01-01
            • 2017-03-18
            • 2023-03-18
            • 1970-01-01
            • 1970-01-01
            • 2022-11-21
            • 1970-01-01
            • 2021-07-20
            相关资源
            最近更新 更多