6

必须有一种更优雅的方式来做到这一点。

如何在不逐行指定每一行的情况下将所有非空帖子数据转换为会话变量?基本上,我想对 POST 数组中存在的所有 X 实例执行下面的函数。

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

我打算一个一个地做,但后来我想一定有一个更优雅的解决方案

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 回答