Вы думаете это ошибка и непонятный алгоритм?
Нет тут ошибки и непонятно. Если к примеру добавить первого товара 2 шт., а второго 3 шт., то общее количество будет равно 5 на сумму 930. Посмотрим что у нас в массиве корзины:
<pre>
print_r($_SESSION['basket']);
</pre>
и получаем:
Код:
|
Array
(
[23] => Array
(
[count] => 2
[price] => 120
[prop] => Array
(
[name] => Товар 1
)
)
[245] => Array
(
[count] => 3
[price] => 230
[prop] => Array
(
[name] => Товар 2
)
)
) |
Вопрос - если теперь изменить количество второго товара на 2, и вновь отправить его на севере, то какое состояние после этого будет у корзины? Ну наверное же ключ 245 корзины будет перезаписан, и общее число товаров будет равно 4, или не так? Так. А что это означает?
Измените части кода на следующие (думаю понятно будет что и где):
//запрос на добавление товара
if($_POST) {
if($pid = (int)key(current($_POST)) AND $val = (int)$_POST['pid'][$pid]) { //что нам шлют?
sleep(1); //убрать комментарий для проверки корректности действий на клиенте под локальным сервером
//проверяем есть ли такой товар в базе и, если требуется, то и наличе его на складе
if(array_key_exists($pid, $products)) {
//добваляем товар в корзину
$_SESSION['basket'][$pid] = ['count'=>$val, 'price'=>$products[$pid]['price'], 'prop'=>['name'=>$products[$pid]['name']]];
//получаем и возвращаем всего в корзине
exit(json_encode(totalBasket()));
} else exit(json_encode(['msg'=>'Нет в наличии']));
} else exit;
}
function totalBasket() {
return $_SESSION['basket'] ? [array_sum(array_map('current', $_SESSION['basket'])), array_sum(array_map('array_product', $_SESSION['basket']))] : [0, 0];
}
$tot = totalBasket();
//....
<div id="short-basket">В корзине: товаров <b><?=$tot[0]?></b>, на сумму <b><?=$tot[1]?>.00</b> руб.</div>
//........
foreach($products as $k=>$v) $ul .= '<li><h4>'.$v['name'].'</h4><p>Цена: '.$v['price'].'.00 руб.</p>'.
($_SESSION['basket'] && array_key_exists($k, $_SESSION['basket'])
? '<p>В корзине '.$_SESSION['basket'][$k]['count'].' шт.</p>'
: '<input type="number" name="pid['.$k.']" value="1" min="1"> <button>В корзину</button></li>');
Добавьте в корзину каких либо два товара, после чего обновите странице по F5. О чем либо это говорит?