0

POSTおよびGETデータを検索し、それらを通常の変数に変換する方法またはコードはありますか?

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

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

の中へ

$hello = "Wow."

しかし、それを自動的に、そして多くのPOSTとGETSで行うこともできるので、次のようになります。

$_POST["name"]="John"; 
$_GET["email"]="john@john.com"; 
$_POST["sex"]="male";

の中へ

$name="John"; 
$email="john@john.com"; 
$sex="male";

2番目の例は不可能です(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でextractを使用せずにこれを自動化する安全な方法があります。これは、前述のセキュリティリスクです。この関数は、期待する単純なキーの配列をフィードすると、$_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 に答える