人员我正在尝试构建一个购物车,所以我必须将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的值。它不会将值存储在不同的变量中。