无法创建动态变量

时间:2013-02-07 19:21:55

标签: php session

当我检查我的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(),但它只是一直给我错误。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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);

答案 2 :(得分:0)

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

extract($_SESSION);

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

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

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