我正在尝试将网站从一个主机迁移到另一个主机。在第一台主机上,当您提交表单时,所有表单值都会自动插入带有输入名称的变量(这是PHP)。在新主机上,除非我这样做,否则这些值都为空:
$data = $_GET['data'];
是否有导致此问题的PHP配置设置?如果没有,是否有一种简单的方法可以循环遍历所有$ _GET变量并自动将它们的值分配给具有相同名称的变量?
谢谢!
答案 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']
让我畏缩。