PHP:可以自动获取所有发布的数据吗?
Posted
技术标签:
【中文标题】PHP:可以自动获取所有发布的数据吗?【英文标题】:PHP: Possible to automatically get all POSTed data? 【发布时间】:2011-09-14 03:47:21 【问题描述】:简单的问题:即使您不知道所有字段,是否可以将所有数据发布到页面?
例如,我想编写一个简单的脚本来收集任何已发布的数据并通过电子邮件发送。我可以预见表单中的字段可能会随着时间的推移而发生很大变化,因此从长远来看,为了节省自己一些时间,我想知道我是否可以编写一些自动收集所有内容的东西?
有可能吗?
【问题讨论】:
当然只使用全局数组 $_POST, $_GET, $_Ser..... How to grab all variables in a post (php)的可能重复 【参考方案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 数据。
【讨论】:
以上是关于PHP:可以自动获取所有发布的数据吗?的主要内容,如果未能解决你的问题,请参考以下文章
有人可以将来自不同主机的表单数据发送到我的 PHP 脚本,该脚本将获取的数据插入 MySQL 吗?如果是这样,我们如何保护它?