【发布时间】:2011-09-14 03:47:21
【问题描述】:
简单的问题:即使您不知道所有字段,是否可以将所有数据发布到页面?
例如,我想编写一个简单的脚本来收集任何已发布的数据并通过电子邮件发送。我可以预见表单中的字段可能会随着时间的推移而发生很大变化,因此从长远来看,为了节省自己一些时间,我想知道我是否可以编写一些自动收集所有内容的东西?
有可能吗?
【问题讨论】:
-
当然只使用全局数组 $_POST, $_GET, $_Ser.....
简单的问题:即使您不知道所有字段,是否可以将所有数据发布到页面?
例如,我想编写一个简单的脚本来收集任何已发布的数据并通过电子邮件发送。我可以预见表单中的字段可能会随着时间的推移而发生很大变化,因此从长远来看,为了节省自己一些时间,我想知道我是否可以编写一些自动收集所有内容的东西?
有可能吗?
【问题讨论】:
当然。只需遍历$_POST 数组:
foreach ($_POST as $key => $value) {
echo "Field ".htmlspecialchars($key)." is ".htmlspecialchars($value)."<br>";
}
【讨论】:
$_POST 数组中,因此如果您使用复选框,则需要使用 isset 以不同方式处理它们。
没有人提到原始发布数据,但很高兴知道,如果发布的数据没有键,只有值,请使用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"。
【讨论】:
【讨论】:
extract($_POST) 将模仿register_globals。不要那样做。
extract 是非常非常糟糕的主意。帮自己一个忙,不要在你的代码中加入不安全因素。
所有发布的数据都将在 $_POST 超全局中。
【讨论】:
只要您不想要任何特殊格式:可以。
foreach ($_POST as $key => $value)
$body .= $key . ' -> ' . $value . '<br>';
显然,需要更多格式,但这是“简单”的方式。除非我误解了这个问题。
你也可以这样做(如果你喜欢这种格式,那肯定更容易):
$body = print_r($_POST, true);
【讨论】:
$body = print_r($_POST, true);) 对我来说是最简单的,无需遍历子元素。在开发 webhook 应用程序时,我只需要暂时查看原始 POST 内容。
您可以使用 array_keys() 检索 $_POST 数组的所有键,然后使用这些键的值构造电子邮件消息。
var_dump($_POST) 还将为您转储有关 $_POST 中所有信息的信息。
【讨论】:
要添加到其他人,var_export 也可能很方便:
$email_text = var_export($_POST, true);
【讨论】:
您可以使用$_REQUEST 和$_POST 访问所有内容,例如发布、获取和Cookie 数据。
【讨论】: