2012-04-18 94 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的任何腳本都可以調用該類,然後通過爲其提供必要的鍵來調用所需的任何方法。