Показать сообщение отдельно
  #13 (permalink)  
Старый 05.03.2015, 23:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Вы думаете это ошибка и непонятный алгоритм?

Нет тут ошибки и непонятно. Если к примеру добавить первого товара 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. О чем либо это говорит?

Последний раз редактировалось laimas, 05.03.2015 в 23:09.
Ответить с цитированием