2009-10-18 3 views
6

これを行うもっとエレガントな方法があるはずです。PHP - すべてのPOSTデータをSESSION変数に変換してください。

空ではないポストデータをセッション変数に変換するにはどうしたらいいですか?基本的には、POST配列に存在するXのすべてのインスタンスに対して以下の関数を実行します。

if (!empty($_POST['X'])) $_SESSION['X']=$_POST['X']; 

私はそれを一つずつやるつもりだったが、その後、私は許容されるPOST名の辞書を指定します

+2

、あなたは私が0に治療を受けていると元気ですセキュリティ – borrel

答えて

10

はるかにエレガントな解決策が存在しなければならない考え出し。

$accepted = array('foo', 'bar', 'baz'); 

foreach ($_POST as $foo=>$bar) { 
    if (in_array($foo, $accepted) && !empty($bar)) { 
     $_SESSION[$foo] = $bar; 
    } 
} 

またはそれに相当するもの。 0を空として扱うので、emptyは使用しません。

+0

に使用する定義済みリストを使用します実際には私のデータを整理するのに役立ちます。ありがとう! –

+0

が必要に応じて変更されました。 –

+0

正直なところ、empty()を使用するのは避けてください。ここでは、すべての状況で効果的なテクニックを開発します。あらゆるデータタイプに適切な機能があります。それらを使用してください! –

1

私がお勧めする最初の事はではありませんこれを行う。巨大な潜在的なセキュリティホールです。たとえば、ユーザー名やユーザータイプのセッション変数(非常に一般的なもの)に依存しているとします。誰かがその詳細を投稿するだけです。あなたが唯一の$_POSTから$_SESSIONすなわちに承認された値をコピーすることによって、ホワイトリストのアプローチを取るべきである:

$vars = array('name', 'age', 'location'); 
foreach ($vars as $v) { 
    if (isset($_POST[$v]) { 
    $_SESSION[$v] = $_POST[$v]; 
    } 
} 

をあなたが「空」の定義方法は、あなたがチェックの種類を決定します。上記のコードではisset()が使用されています。また、あなたは空の文字列またはあなたが行く。ここ数0

+0

はい、ポインタありがとうございます。実際には1つずつ実行する必要がありますが、コードをきれいにするために配列をホワイトリストに登録できます。 空リストに含まれていても空でないPOSTデータだけがセッション変数に変換されるようにするには、上記のコードに "not empty()"チェックを実装するにはどうすればよいですか?私は空で登録されている "0"でいいです。 –

2

を書きたくない場合は、if ($_POST[$v]) ...を行う

if(isset($_POST) { 
foreach ($_POST as $key => $val) { 
    if($val != "Submit") 
    $_SESSION["$key"] = $val; 
} 
} 
3

構文エラー、まだオープンブラケットがあるという理由だけである可能性があります。それはそのように動作するはず

$vars = array('name', 'age', 'location'); 
foreach ($vars as $v) { 
    if (isset($_POST[$v])) { 
     $_SESSION[$v] = $_POST[$v]; 
    } 
} 

でなければなりません。

if ($_POST[$v])... 

これは空のデータを削除します。

1

これは、@のMEDERの答えの簡易版で、このビットに私を導く:

<?php 
$accepted = array('foo', 'bar', 'baz'); 

foreach ($accepted as $name) { 
    if (isset($_POST[$name])) { 
     $_SESSION[$name] = $_POST[$name]; 
    } 
} 

ます。また、遠くに及ぶempty()のように、どのくらいの点に注意してください。ただし、上記isset()ため!empty()を代入します@メディアが指摘した。

0
$_SESSION["data"] = $POST; 
    $var = $_SESSION["data"]; 

次に、投稿変数として$ varを使用してください。たとえば:

echo $var["email"]; 

の代わりに、これを行うには、スマートなものではありません

echo $_POST["email"]; 

乾杯

関連する問題