Cookie未保存在foreach中


Cookie not save in foreach

人员我正在尝试构建一个购物车,所以我必须将id、quantity和location_id传递给函数。在函数中,如果找到类似的id和location_id,我将查看传入的id和local_id。我将对该项目加1。但是,如果我使用数组中的函数,它就不起作用。下面是我构建的另一个函数,用于测试foreach中传递给函数的变量。但is并没有说明我传入的第一个变量。它只会保存最新的变量。

以下是我的功能代码:

static public function test($id , $per_min, $location_id_cart = 0){
    echo $new_cart = $id.'-'.$per_min.'-'.$location_id_cart;
    if(isset($_COOKIE['cart_item'])){
        $last = $_COOKIE['cart_item'];
        $testing = $last.','.$new_cart;
    }else{
        $testing = $new_cart;
    }
    $set = setcookie("cart_item", $testing, time()+3600);
    var_dump($_COOKIE);
}

以下是我调用函数的代码:

    $id = 125;
    $multi_location = array(636 , 789);
    $multi_quantity = array();
    $multi_quantity[636] = 5;
    $multi_quantity[789] = 10; 
    $array_key = array_keys($multi_quantity);
    foreach($array_key as $o){
        if(!in_array($o , $multi_location)){
            unset($multi_quantity[$o]);
        }
    }
    $count = 0;
    foreach($multi_location as $i){
        ZCart::test($id , $multi_quantity[$i], $i);
    }

我的结果:

 'cart_item' => string '125-10-789' (length=10)

我的预期结果:

'cart_item' => string '125-5-636,125-10-789'

如果我刷新页面,得到的结果是:

'cart_item' => string '125-10-789,125-10-789,125-10-789,125-10-789,125-10-789,125-10-789,125-10-789'

cookie将只保存数组中给定的最新值。它不将125-5-636保存到cookie。为什么?有人能帮我吗?非常感谢。

尝试以下代码:

static public function test($id , $per_min, $location_id_cart = 0){
    $new_cart = $id.'-'.$per_min.'-'.$location_id_cart;
    if(isset($_COOKIE['cart_item'])){
        $last = $_COOKIE['cart_item'];
        $testing = $last.','.$new_cart;
    }else{
        $testing = $new_cart;
    }
    $set = setcookie("cart_item", $testing, time()+3600);
    //This line deals with adding to the cookie while the script is running
    $_COOKIE['cart_item'] = $testing;
    //var_dump($_COOKIE);
}

我有一种感觉,当你使用setcookie()时,$_COOKIE数组没有更新,这就是为什么我们用它下面的行手动更新它。

此外,我会删除var_dump()调用,同时回显$new_cart变量,因为这将阻止setcookie()工作。相反,我会把它放在你的呼叫代码的底部:

$id = 125;
$multi_location = array(636 , 789);
$multi_quantity = array();
$multi_quantity[636] = 5;
$multi_quantity[789] = 10; 
$array_key = array_keys($multi_quantity);
foreach($array_key as $o){
    if(!in_array($o , $multi_location)){
        unset($multi_quantity[$o]);
    }
}
$count = 0;
foreach($multi_location as $i){
ZCart::test($id , $multi_quantity[$i], $i);
}
var_dump($_COOKIE);

如果你正在使用购物车,我强烈建议你使用会话,它可以让你在服务器端存储敏感的东西,避免受到伤害,根据我的经验,它比cookie更容易使用!

另一种选择是将用户的购物车存储在数据库中,然后如果他们没有登录,则使用存储在cookie中的ID链接到该购物车。如果用户关闭浏览器,但保留cookie中的安全内容,这将允许购物车留在身边。我希望这是有道理的!

因为您没有使用数组或不同的变量。每次调用循环中的函数时,它都会更新cart_item的值。它不会将值存储在不同的变量中。