我的PHP脚本处理一些POST变量。
而不是手动命名每个变量
$name = $_POST['name'];
$email = $_POST['account'];
我喜欢我的脚本从$ _POST数组中获取所有变量名称,并使用这些名称自动创建变量,例如(不是代码,只是说明原理)
foreach ($_POST as $name => $value) {
$[$name] = $value;
}
这样的事情可能吗?
答案 0 :(得分:2)
您可以使用extract功能。但存在风险,因为您无法知道发布了哪些数据,并且它将在您调用它的范围内创建或覆盖变量,可能会导致意外行为。
您可以使用extract
的其中一个标志来部分解决此问题,例如:
extract($_POST, EXTR_SKIP);
无论如何,请务必阅读此功能文档页面上的两个警告(红色块)。当然,当您使用自己的foreach
循环执行此操作时,也会应用相同的警告,因此答案表明这些警告不再安全。
答案 1 :(得分:1)
php中有 extract 函数:
extract($_POST);
答案 2 :(得分:1)
这是一个非常糟糕的主意,因为它允许用户在PHP脚本中创建任何变量(在使用此代码的范围内)。例如,如果您有$debugging
标志:
$debugging = false;
foreach ($_POST as $name => $value) {
$$name = $value;
}
// some time later, we do a query and output the SQL if debugging
if($debugging){
echo $sql;
}
如果恶意用户提交了名为debugging
且值为1
的输入,该怎么办?您的调试标志将被更改,用户可以看到敏感的调试数据。
答案 3 :(得分:0)
您可以使用变量变量执行此操作,如下所示:
foreach ($_POST as $name => $value) {
$$name = $value;
}
如果您想要更多地使用变量名称,还可以使用以下格式:
foreach ($_POST as $name => $value) {
${$name.'_1'} = $value;
}
这里有评论说不要使用变量变量 - 主要是因为它们很难排除故障,让其他人难以阅读你的代码,而且(大多数情况下)会产生比他们更多的头痛解决。
答案 4 :(得分:0)
试试这个(这是一种不好的做法):
foreach ($_POST as $name => $value) {
$$name = $value;
}