Cookie не сохраняются в foreach - PullRequest
2 голосов
/ 13 февраля 2012

Люди. Я пытаюсь создать корзину для покупок, поэтому мне нужно передать идентификатор, количество и location_id функции.В функции я посмотрю на переданные id и location_id, если найдены похожие id и location_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.Зачем?Может ли кто-нибудь помочь мне в этом, пожалуйста?Спасибо!

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

попробуйте следующий код:

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);
}

У меня такое ощущение, что массив $_COOKIE не обновляется при использовании setcookie(), поэтому мы обновляем его вручную с помощью строки под ним.

Также я бы удалил вызов 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. Я надеюсь, что это имеет смысл!

0 голосов
/ 13 февраля 2012

потому что вы не используете массив или другую переменную.Каждый раз, когда вы вызываете функцию в цикле, она обновляет значение cart_item. Она не сохраняет значения в разных переменных.

...