2011-02-05 2 views
2

文字列を引数にとり、同じ名前の変数の値を取得するために使用する必要がある関数を作成しています。例文字列を変数名に変換する

については

文字列$foo = "$_POST['email']";$_POST['email'] == $exampleがtrueを返すように私は、$_POST['email']の値を取得し、$exampleとして保存する必要が渡された場合。値を関数に直接渡す方法はありません(関数を価値あるものにするためには変数を動的にする必要があります)。

私は可変変数を使うと思いましたが、必要な値の主要なソースとなるスーパーグローバルでは機能しません。

基本的に、必要な変数を文字列として(通常はスーパーグローバル配列で)変数の値を取得する方法はありますか?

詳細が必要な場合はお知らせください。

おかげ

+0

、私は、値セットを提供するために、MySQLのテーブルを使用していますadminによって、それ自体が少数の可能な変数に制限され、データベースに入る前にチェックされます。フロントエンドでは、この関数が呼び出される前にすべてがチェックされ、検証されたデータで意味をなさない場合、関数は停止します。私の心にはかなり安全ですが、批評は大歓迎です。 – YsoL8

+0

また、なぜ私は配列キーを考えなかったのですか? – YsoL8

+0

"...同じ名前の変数の値を取得するために使用する必要があります。"もう一つの心はPHPによって台無しにされました。 **お願いします。やめる。思う。 **実際に*望んでいることを考え、適切なADTを使用してください。問題は回避されました。 –

答えて

4

変数の変数が答えであるが、あなたは$_POST配列から値を取得した後なら、なぜ関数にだけキーを渡さないでしょうか?

注:機能は例として提供されていますが、私の実際の推奨は以下のとおりです。あなたが入力配列、使用するキーとsanitaionフィルタを選択することができます実際filter_input()、で

function fetchFromPost($key) { 
    if(isset($_POST[$key]) { 
    return $_POST[$key]; 
    } else { 
    return null; //or do whatever you want to do in case key is not found 
    } 
} 

、私はあなたを真剣に疑うが、それは、可能であるあなた

+1

+1 '$ _POST'を' $ _REQUEST'に変更して、 'post'、' get'、 'cookie'を一度に持つことができます。 – jeroen

+1

@jeroen - $ _REQUESTを使用しても、値がどこから来たのかわからないことになります。 –

+4

これらはすべてユーザーのものであるため、いずれも信頼できません。 – Mchl

2

のためにそこに既にありますこれを使うべきです。 これは、PHPの注入を可能にし、ソースコードを作る非常に脆弱な文字列がどこから来たのかがわからない場合:secuityの懸念に対処するために

<? 
function eval_expression($expression) 
{ 
    eval("\$temp = $expression;"); 
    return $temp; 
} 

// Usage: 
echo eval_expression("\$_GET['plop']"); 
+0

-1ちょうど 'eval'を使うために、ストレスのない免責条項であっても(このアプローチは機能しないかもしれませんが、むしろ**このアプローチは*昇格してはいけません**) –

+0

それ以上のことを強調すべきだった。私は、私がそこに与えた解決策が間違っていたので、私が削除した別の返事でやった。あなたが別のより良いものを知らないかぎり、文字通りの質問に対する唯一の実用的な解決策であると思われるものを、あまりにも深刻なものにするのは少し間違っているように感じます。今のところ、この答えをそのまま受け入れてください。教育目的のためだけに、暗い側面を垣間見る。 ;-) – GolezTrol

+0

太字とイタリックを追加しました。 ;-) – GolezTrol

関連する問題