0

有没有一种方法或一段代码可以查找 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 变量它应该自动将其转换为变量.

那么有什么功能或可以帮助我的东西吗?

4

3 回答 3

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";

?>

编辑:虽然我不认为这是一个好习惯

于 2012-04-18T09:05:43.707 回答
1

您可以使用extract(extract($_REQUEST); ) :($_REQUEST结合$_POST$_GET

但我认为这是不好的做法,因为它为您的代码添加了一些黑魔法,这可能导致不可预知的情况。它也很容易被利用:

考虑到你有一个变量:$secret = 100;没有人应该改变它。
现在来了一个古怪的用户,并在表单提交中注入了以下 POST 变量:$_POST['secret'] = 200;
你有漏洞利用!

于 2012-04-18T09:05:54.163 回答
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 的任何脚本都可以调用该类,然后通过为其提供必要的键来调用您需要的任何方法。

于 2017-09-27T22:05:58.783 回答