2012-04-18 79 views
0

是否有一种方法或一段代码查找POST和GET数据并将它们转换为正常变量?自动处理POST和GET中的PHP

我的意思是做:

$_POST["hello"] = "Wow." 

$hello = "Wow." 

而且还能够与很多帖子,并得到自动做到这一点,所以像这样:

$_POST["name"]="John"; 
$_GET["email"]="[email protected]"; 
$_POST["sex"]="male"; 

分成

$name="John"; 
$email="[email protected]"; 
$sex="male"; 

我知道第二个例子是不可能的(你不能GET,并在同一时间POST数据(或让我知道),但这个想法是,该页面是否得到一个GET或POST一个变量应当开启它会自动变成变量。

那么有没有一个功能或者什么可以帮助我?

+2

他们摆在首位正常的变量。 – 2012-04-18 09:03:27

+0

具有方法POST的表单及其操作具有GET变量可以发送GET和POST变量......只是说。 EG:

Jared 2012-04-18 09:05:05

+1

您要求提供'register_globals'。坏OP!另外,如何发布到'/foo.php?bar = baz'?然后你会有$ _GET和$ _POST。 – cmbuckley 2012-04-18 09:09:17

回答

2

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

不过,我会考虑它作为不好的练习,因为它给你的代码增加了一些黑魔法,这会导致不可预知的情况。此外,它是很容易被利用:

想想看,你有一个变量:$secret = 100;其中任何人都不应改变。
现在来淫用户并注入下面的帖子变量形式提交:$_POST['secret'] = 200;
有你有剥削!

+0

谢谢。那么我坚持旧的做法。我只是想知道。 – user1177476 2012-04-18 09:21:09

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

?> 

编辑:我不认为是一个很好的做法,虽然

+0

非常危险的用户提交的数据 – 2012-04-18 09:06:56

+0

事实上,我认为它不是专门与用户提交的数据 – 2012-04-18 09:09:30

+0

也许甚至不是暗示一个坏主意是不是事实 – 2012-04-18 09:12:43

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的任何脚本都可以调用该类,然后通过为其提供必要的键来调用所需的任何方法。