これを行うには、もっとエレガントな方法が必要です。
行ごとに指定せずに、空でないすべての投稿データをセッション変数に変換するにはどうすればよいですか? 基本的に、POST 配列に存在する X のすべてのインスタンスに対して以下の関数を実行したいと考えています。
if (!empty($_POST['X'])) $_SESSION['X']=$_POST['X'];
私はそれを1つずつ行うつもりでしたが、もっとエレガントな解決策があるに違いないと考えました
これを行うには、もっとエレガントな方法が必要です。
行ごとに指定せずに、空でないすべての投稿データをセッション変数に変換するにはどうすればよいですか? 基本的に、POST 配列に存在する X のすべてのインスタンスに対して以下の関数を実行したいと考えています。
if (!empty($_POST['X'])) $_SESSION['X']=$_POST['X'];
私はそれを1つずつ行うつもりでしたが、もっとエレガントな解決策があるに違いないと考えました
許容できる POST 名の辞書を指定します。
$accepted = array('foo', 'bar', 'baz');
foreach ( $_POST as $foo=>$bar ) {
if ( in_array( $foo, $accepted ) && !empty($bar) ) {
$_SESSION[$foo] = $bar;
}
}
またはその趣旨の何か。空としてempty
扱うので使いません。0
構文エラーは、ブラケットがまだ開いているためです。そのはず
$vars = array('name', 'age', 'location');
foreach ($vars as $v) {
if (isset($_POST[$v])) {
$_SESSION[$v] = $_POST[$v];
}
}
そのように動作するはずです。使用する場合
if ($_POST[$v])...
空のデータを取り除きます。
どうぞ、
if(isset($_POST) {
foreach ($_POST as $key => $val) {
if($val != "Submit")
$_SESSION["$key"] = $val;
}
}
これは、@mederの回答の簡略化されたバージョンであるこのビットに私を導きました:
<?php
$accepted = array('foo', 'bar', 'baz');
foreach ( $accepted as $name ) {
if ( isset( $_POST[$name] ) ) {
$_SESSION[$name] = $_POST[$name];
}
}
@meder が指摘したように、上記の代わり!empty()
に使用することもできます。isset()
empty()
私が最初に提案することは、あなたがこれをしないことです。これは巨大な潜在的なセキュリティ ホールです。ユーザー名やユーザータイプ (非常に一般的) のセッション変数に依存しているとします。誰かがそれらの詳細を投稿するだけです。$_POST
承認された値のみを次のようにコピーすることにより、ホワイトリストのアプローチを取る必要があります$_SESSION
。
$vars = array('name', 'age', 'location');
foreach ($vars as $v) {
if (isset($_POST[$v]) {
$_SESSION[$v] = $_POST[$v];
}
}
「空」をどのように定義するかによって、実行するチェックの種類が決まります。上記のコードはisset()
. if ($_POST[$v]) ...
空の文字列や数字の 0 を書きたくない場合も同様です。
$_SESSION["data"] = $POST;
$var = $_SESSION["data"];
次に、 $var を投稿変数として使用します。例えば:
echo $var["email"];
それ以外の
echo $_POST["email"];
乾杯