从$ _POST数组自动命名变量。

时间:2014-04-11 08:58:54

标签: php

我的PHP脚本处理一些POST变量。

而不是手动命名每个变量

$name = $_POST['name'];
$email = $_POST['account'];

我喜欢我的脚本从$ _POST数组中获取所有变量名称,并使用这些名称自动创建变量,例如(不是代码,只是说明原理)

foreach ($_POST as $name => $value) {
    $[$name] = $value;
}

这样的事情可能吗?

5 个答案:

答案 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;
}