6

これを行うには、もっとエレガントな方法が必要です。

行ごとに指定せずに、空でないすべての投稿データをセッション変数に変換するにはどうすればよいですか? 基本的に、POST 配列に存在する X のすべてのインスタンスに対して以下の関数を実行したいと考えています。

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

私はそれを1つずつ行うつもりでしたが、もっとエレガントな解決策があるに違いないと考えました

4

6 に答える 6

10

許容できる POST 名の辞書を指定します。

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

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

またはその趣旨の何か。空としてempty扱うので使いません。0

于 2009-10-18T06:49:55.653 に答える
3

構文エラーは、ブラケットがまだ開いているためです。そのはず

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

そのように動作するはずです。使用する場合

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

空のデータを取り除きます。

于 2011-08-31T20:23:18.197 に答える
2

どうぞ、

if(isset($_POST) {
 foreach ($_POST as $key => $val) {
  if($val != "Submit")
   $_SESSION["$key"] = $val;
 }
}
于 2009-10-18T06:53:58.093 に答える
1

これは、@mederの回答の簡略化されたバージョンであるこのビットに私を導きました:

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

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

@meder が指摘したように、上記の代わり!empty()に使用することもできます。isset()empty()

于 2012-11-09T21:18:00.960 に答える
1

私が最初に提案することは、あなたがこれをしないことです。これは巨大な潜在的なセキュリティ ホールです。ユーザー名やユーザータイプ (非常に一般的) のセッション変数に依存しているとします。誰かがそれらの詳細を投稿するだけです。$_POST承認された値のみを次のようにコピーすることにより、ホワイトリストのアプローチを取る必要があります$_SESSION

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

「空」をどのように定義するかによって、実行するチェックの種類が決まります。上記のコードはisset(). if ($_POST[$v]) ...空の文字列や数字の 0 を書きたくない場合も同様です。

于 2009-10-18T06:51:29.690 に答える
0
  $_SESSION["data"] = $POST;
  $var = $_SESSION["data"];

次に、 $var を投稿変数として使用します。例えば:

  echo $var["email"];

それ以外の

  echo $_POST["email"];

乾杯

于 2014-06-21T19:53:35.960 に答える