是否有一种方法或一段代码可以查找POST和GET数据并将其转换为普通变量?
我的意思是:
$_POST["hello"] = "Wow."
到
$hello = "Wow."
但也可以自动完成并使用许多POSTS和GETS,所以这样:
$_POST["name"]="John";
$_GET["email"]="john@john.com";
$_POST["sex"]="male";
到
$name="John";
$email="john@john.com";
$sex="male";
我知道第二个例子是不可能的(你不能同时获得GET和POST数据(或者我知道),但是想法是该页面是获取GET还是POST变量它应该转为它自动变成变量。
那么有什么功能可以帮助我吗?
答案 0 :(得分:2)
您可以使用extract():extract($_REQUEST);
($_REQUEST
合并$_POST
和$_GET
)
但我会将其视为不良做法,因为它会为您的代码添加一些黑魔法,从而导致不可预测的情况。它也很容易被利用:
考虑你有一个变量:$secret = 100;
,任何人都不应该改变
现在是一个变态的用户,并在表单提交中注入以下POST变量:$_POST['secret'] = 200;
在那里你有剥削!
答案 1 :(得分:1)
您可以使用Extract,它适用于所有类型的数组。
<?php
/* Suppose that $var_array is an array returned from
wddx_deserialize */
$size = "large";
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape, $wddx_size\n";
?>
编辑:我不认为这是一个好习惯
答案 2 :(得分:0)
我意识到这是一篇非常古老的帖子,但如果有人在看,这里就是答案。
有一种安全的方法可以自动执行此操作,而无需在$ _POST上使用提取,这是一个安全风险,如上所述。如果您为它提供了一个简单的键数组,这个函数将适用于$ _POST。
function post_params($arr){
$pp = array();
foreach($arr AS $key){
if(isset($_POST[$key])){
$pp[$key] = $_POST[$key];
}
}
return $pp;
}
然后当您调用该函数时,请执行以下操作:
$expected_post_keys = array('firstname','lastname');
$safe_post_arr = post_params($expected_post_keys);
extract($safe_post_arr);
对于$ _GET你可以采取一些额外的措施(你也可以这样做,也可以用$ _POST):
function get_params($arr){
// arr predefined explicitly - do not call with _GET as argument
$gp = array();
foreach($arr as $key){
if(isset($_GET[$key])){
$gp[$key] = htmlspecialchars($_GET[$key]);
}else{
$gp[$key] = 0;
}
}
return $gp;
}
当你调用这个函数时:
$valid_get_keys = array('id','action');
$safe_get_arr = get_params($valid_get_keys);
extract($safe_get_arr );
此方法为您提供您期望的每个变量/键,但如果它们未在$ _GET中定义,则它们的值为0.
如果你必须经常这样做,只需将两个方法放在一个类中,就可以实现自动化。您需要检索_GET或_POST的任何脚本,您可以调用该类,然后通过提供必要的密钥来调用您需要的任何方法。