0

当我检查我的 cookie 时,我确实看到 PHPSESSID 正在生成。但是当我尝试使用它们时,我收到一条错误消息,指出变量未定义。

这就是我设置会话的方式:

$posts = array("auto_year", "auto_brand", "auto_model", "auto_bodywork", "auto_doors", 
"auto_fuel", "auto_gearbox", "auto_type", "auto_uitvoering", "auto_part", "auto_description", "email_address");

//Define POSTS and set into SESSIONS
foreach ($posts as $post) {
   if (isset($_POST[$post])) {
      $_SESSION[$post] = $_POST[$post];
      $$post = $_SESSION[$post];
   }
}

我也手动尝试过,例如:

$_SESSION['auto_year'] = '2012';

但它仍然不起作用。我确实在两者的页面上都调用了 session_start() ,但它一直给我这个错误。

4

3 回答 3

1

使用${}您可以创建动态变量。在您的情况下,只需更改为:

${$post} = $_SESSION[$post];

于 2013-02-07T19:46:56.277 回答
0

来自您的表单的 $_POST 数据可能有问题。由于我没有表单信息,我通过设置 $_POST 尝试了这个。

session_start();

$_POST['auto_year'] = 1977;

$posts = array("auto_year", "auto_brand", "auto_model", "auto_bodywork", "auto_doors",
    "auto_fuel", "auto_gearbox", "auto_type", "auto_uitvoering", "auto_part", "auto_description", "email_address");

//Define POSTS and set into SESSIONS
foreach ($posts as $post) {
    echo $post."<br>";
    if (isset($_POST[$post])) {
echo "Creating variable for $post<br>";
        $_SESSION[$post] = $_POST[$post];
        $$post = $_SESSION[$post];
        echo '$auto_year: '.$auto_year . "<br>";
    }
}
echo "<br><br>".var_dump($_SESSION);
于 2013-02-07T19:34:35.920 回答
0

另一种选择是使用 extract() 创建变量,这使您可以一次设置所有变量;

extract($_SESSION);

将为会话中的每个键创建一个变量,例如 $auto_year、$auto_brand 等。

http://php.net/manual/en/function.extract.php

注意 我想知道为什么要将所有数据放在单独的变量中,而单个关联数组可能同样容易处理?

于 2013-02-07T20:04:28.053 回答