Php Cookie未保存在foreach中

Php Cookie未保存在foreach中,php,cookies,cart,Php,Cookies,Cart,人 我正在尝试构建一个购物车,因此我必须将id、数量和位置id传递给函数。在函数中,如果找到类似的id和location\u id,我将查看传入的id和location\u id。我将+1添加到该项目。但是,如果在数组中使用该函数,它将不起作用。 下面是我构建的另一个函数,用于测试foreach中传递给函数的变量。 但这并不是我传入的第一个变量。它将只保存最新的变量 下面是我的功能代码: static public function test($id , $per_min, $location_

人 我正在尝试构建一个购物车,因此我必须将id、数量和位置id传递给函数。在函数中,如果找到类似的id和location\u id,我将查看传入的id和location\u id。我将+1添加到该项目。但是,如果在数组中使用该函数,它将不起作用。 下面是我构建的另一个函数,用于测试foreach中传递给函数的变量。 但这并不是我传入的第一个变量。它将只保存最新的变量

下面是我的功能代码:

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()
时,
$\u COOKIE
数组没有被更新,这就是为什么我们用它下面的行手动更新它

此外,我还将删除
var\u dump()
调用,同时回显
$new\u 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);
如果你正在实现一个购物车,我强烈建议使用,它允许你在服务器端存储敏感的东西,远离伤害,并且根据我的经验,它比cookies更容易使用


另一种选择是将用户的购物车存储在数据库中,如果用户未登录,则使用存储在cookie中的ID链接到该购物车。这将允许购物车在用户关闭浏览器但不让cookie访问安全内容的情况下停留。我希望这是有意义的

我希望结果是饼干中的125-5-636125-10-789。。因此,我没有将值存储在不同的变量中。如果存在COOKIE,则if(isset($\u COOKIE['cart\u item']){$last=$\u COOKIE['cart\u item'];$testing=$last.','.$new\u cart;}。。我将获取cookie值,并将其与最新值组合。但问题是它并没有保存数组的第一个值。但是,如果您使用不同的索引在数组中存储值,那么您也可以获得所需的结果。。您可以使用内爆函数获取o/PBO中所需的字符串,但我希望将我的$id、$multi_数量[$i]、$i逐一传递给该函数。因为我在做购物车。。通过一个接一个的传递,我能够识别哪些是重复的东西,这样我就可以增加数量。我给我的用户复选框和输入文本。他们选中该选项,并在输入文本中输入数量。。这就是为什么我需要对数组进行预处理。没问题:)你知道它为什么不工作吗?我不擅长解释!是的,我明白。首先,我想用session做购物车,但是在我的网站实现HTTPS后,所有的session都出错了。因此,我认为cookie比session更安全。在https中创建的会话无法在http中访问。尝试了从网络上解决这个问题的方法。。好的,干得好:)stackoverflow的困难在于我不能假设什么,也不想侮辱你的智慧!您是否尝试过查看PHP电子商务解决方案的源代码以获取一些提示?我对电子商务和HTTPS一窍不通,我担心你的金伯利项目会很顺利!让我们