Как обновить переменную сеанса определенного сеанса - PullRequest
0 голосов
/ 04 мая 2019

Итак, у меня есть система корзины, которая должна обновлять количество определенной переменной сеанса.Прямо сейчас, если у меня есть элемент с идентификатором = 1,

![enter image description here

и добавлен еще один элемент с идентификатором = 1, он обновляет количество до 2

enter image description here

, что нормально.Но затем, если я добавляю элемент с id = 2,

enter image description here

, и я снова добавляю другой элемент с id = 1, он обновляет количество id= От 2 до 2,

enter image description here

, когда следует обновить количество id = от 1 до 3

enter image description here

Вот мой код:

$exists = false;
foreach ($_SESSION['cart'] as $key => $item) {
    if ($item['product_id'] == $part_id) {
        $exists = true;
    }
}
if ($exists == true) {
    $_SESSION["cart"][$key]['quantity']++;
}
else{
$_SESSION['cart'][] = array(
    'product_id' => $part_id,
    'title' => $title,
    'price' => $price,
    'default_img' => $default_img,
    'quantity' => $quantity);
}

1 Ответ

1 голос
/ 04 мая 2019

В конце цикла при обновлении $_SESSION["cart"][$key]['quantity'], $key всегда будет указывать на последний элемент в $_SESSION["cart"], отсюда и поведение, которое вы видите.Вы должны либо выполнить обновление в цикле, например

foreach ($_SESSION['cart'] as $key => $item) {
    if ($item['product_id'] == $part_id) {
        $exists = true;
        $_SESSION["cart"][$key]['quantity']++;
    }
}

, либо прервать цикл, когда найдете совпадение, так что $key указывает на правильное значение:

foreach ($_SESSION['cart'] as $key => $item) {
    if ($item['product_id'] == $part_id) {
        $exists = true;
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...