如何在PHP中获取所有提交的表单值并自动将它们分配给变量?

时间:2011-04-22 15:49:04

标签: php forms post get

我正在尝试将网站从一个主机迁移到另一个主机。在第一台主机上,当您提交表单时,所有表单值都会自动插入带有输入名称的变量(这是PHP)。在新主机上,除非我这样做,否则这些值都为空:

$data = $_GET['data'];

是否有导致此问题的PHP配置设置?如果没有,是否有一种简单的方法可以循环遍历所有$ _GET变量并自动将它们的值分配给具有相同名称的变量?

谢谢!

4 个答案:

答案 0 :(得分:6)

该设置为register_globals,但现在已弃用,强烈建议不要使用它,因为它存在安全风险。任何人都可以在脚本中设置变量,这些变量可能会以负面或意外的方式与您的代码进行交互。

如果你绝对必须,你可以这样做:

foreach ($_GET as $key=>$value) {
    $$key = $value;
}

或更简单地说:

import_request_variables("g");

或者,为了让它更安全一点:

import_request_variables("g", "myprefix_"); // This way forces you to use "myprefix_" 
// in front of the variables, better ensuring you are not unaware 
// of the fact that this can come from a user

extract($ _ GET)也可以像其他人指出的那样工作,它还允许指定(通过额外的参数)添加前缀或如果你的提取与已经存在的变量冲突怎么办(例如,如果你在定义了一些其他变量后提取。)

答案 1 :(得分:3)

答案 2 :(得分:1)

你可以这样做:

foreach ($_GET["data"] as $name => $value){
  $$name = $value;
}

这个问题是人们可以轻松地在脚本中摆弄变量。我可以访问http://yoursite.com/?sql=DELETE+FROM ...

我建议不要这样做,只是坚持使用$ _GET。

答案 3 :(得分:0)

您的问题表明,在将$ _GET ['data']分配给$ data时,您没有进行任何过滤或验证,除非您在脚本的下方进行了这些检查。

从我所看到的,大多数程序员首先会这样做,如果预期的数据与期望值不匹配,那么早期失败,以便在期望积极的int的情况下的上述赋值将变成类似:

if( isset($_GET['data']) && (int)$_GET['data'] === 0){
//fail
}else{
$data = $_GET['data'];
}

所以只看简单

$data = $_GET['data'] 

让我畏缩。