Данные массива PHP не обновляются - PullRequest
0 голосов
/ 06 марта 2019

Назначение состоит в том, чтобы в таблице отображались некоторые продукты со ссылкой «добавить в корзину», которая отправляет пользователя на другую страницу, которая использует информацию, указанную в ссылке, для получения данных для отображения общей суммы покупки. Таблица добавляет новые позиции, по которым щелкают, но не обновляет фактическое количество, когда элемент нажимается более одного раза.

Я попытался поместить эхо в чеке для товара, уже находящегося в корзине, и он устанавливает количество 1 до обновления количества и 2 после обновления, но по какой-то причине это на самом деле не обновляется. То же самое касается цены.

<?php
  session_start();
  if(empty($_SESSION['cart'])) {
      $_SESSION['cart'] = array();
  }

  $cart = $_SESSION['cart'];

  $id = $_GET['productid'];
  $name = $_GET['productname'];
  $price = $_GET['productprice'];
  $qty = 1;
  $alreadyHas = 0;

  foreach($cart as $cartKey => $cartItem) {
      if(!empty($cartItem['pid'])) {
        if($cartItem['pid'] == $id) {
            $cartItem['qty'] = $cartItem['qty'] + 1;
            $cartItem['total'] = $cartItem['price'] * $cartItem['qty'];
            $alreadyHas = 1;
        }
      }
  }
  if($alreadyHas == 0) {
    $cartItem = array(
        'pid' => $id,
        'name' => $name,
        'price' => $price,
        'qty' => $qty,
        'total' => $price
      );
      array_push($cart, $cartItem);
  }

  $_SESSION['cart'] = $cart;
?>

1 Ответ

2 голосов
/ 06 марта 2019

Ваша проблема в цикле foreach. Однако вы обновляете $cartitem, поскольку вы не передаете его по ссылке в цикле, а сама переменная $cart не обновляется. Попробуйте изменить цикл foreach на это (обратите внимание на добавление & перед `$ cartItem):

foreach($cart as $cartKey => &$cartItem) {

Обратите внимание, что вы можете упростить свой код с помощью array_search и array_column:

if (($k = array_search($id, array_column($cart, 'pid'))) !== false) {
    $cart[$k]['qty'] = $cart[$k]['qty'] + 1;
    $cart[$k]['total'] = $cart[$k]['price'] * $cart[$k]['qty'];
}
else {
    $cartItem = array(
        'pid' => $id,
        'name' => $name,
        'price' => $price,
        'qty' => $qty,
        'total' => $price
      );
      array_push($cart, $cartItem);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...