2012-04-18 14 views
0

POSTとGETデータを探して、それらを通常の変数に変える方法やコードがありますか?PHPで自動処理POSTとGET

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

$hello = "Wow." 

にしかし、また、このようなので、多くのポストにして取得し、自動的にそれを行うことができる:

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

は、私はそれを作ることを意味します

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

私は2番目の例は不可能であることを知っています(GETとPOSTのデータを同時に取得することはできません)。しかし、考えられるのは、ページにGETまたはPOST変数を付けるかどうかですそれを自動的に変数に変換します。

私に役立つ機能がありますか?

+2

これらは、最初は通常の変数です。 –

+0

メソッドPOSTを持つフォームとそのアクションは、GET変数とGET変数の両方を送ることができます。 EG:

Jared

+1

あなたは 'register_globals'を求めています。悪いOP!さらに、 '/foo.php?bar = baz'にポストするのはどうですか? $ _GETと$ _POSTがあります。 – cmbuckley

答えて

2

のに良い練習として考えていないextract()extract($_REQUEST);

$_REQUEST$_POST$_GETを組み合わせた)しかし、私のようにそれを検討します悪い練習、あなたのコードに黒い魔法を加えると、予期せぬ状況につながる可能性があるからです。また、簡単に悪用可能です:

変数がありません:$secret = 100;誰も変更する必要があります。
今、変態のユーザーが来て、フォーム変数に次のPOST変数を挿入します:$_POST['secret'] = 200;
そこに搾取があります!

+0

ありがとうございます。私は古い練習に固執しています。私はちょうど不思議だった。 – user1177476

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

非常に危険なユーザーが投稿したデータ –

+0

確かに、私はそれがユーザーの投稿したデータで特に良い練習ではないと信じています –

+0

おそらく悪い考えを示唆していないことは事実の後に悪いと言っている方が良いです –

0

私はこれが非常に古い記事であることを認識していますが、誰かが探していると答えがあります。

$ _POSTの抽出を使用せずにこれを自動化する安全な方法があります。これは前述のセキュリティリスクです。この関数は、あなたが期待する単純なキーの配列を与えるなら、$ _POSTのために働きます。

function post_params($arr){ 

    $pp = array(); 
    foreach($arr AS $key){ 
     if(isset($_POST[$key])){ 
      $pp[$key] = $_POST[$key]; 
     } 
    } 

    return $pp; 
} 

その後、関数を呼び出す際に、この操作を行います。(あなたにも$ _POSTのために、このようにそれを行うことができます)あなたがそうのような余分な施策のカップルを取ることができます$ _GETのために

$expected_post_keys = array('firstname','lastname'); 
$safe_post_arr = post_params($expected_post_keys); 
extract($safe_post_arr); 

を:

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を取得してクラスを呼び出す必要のあるスクリプトでは、必要なキーを入力することによって、必要なメソッドを呼び出すことができます。