Глюк с неправильным подсчетом суммы заказа

Тема в разделе "Shop-script", создана пользователем gaugebar, 19 мар 2009.

Статус темы:
Закрыта.
  1. gaugebar

    gaugebar Создатель

    Регистр.:
    13 мар 2009
    Сообщения:
    16
    Симпатии:
    4
    Shop-Script 1.24

    Итак, этот глюк проявляется только при следующих обстоятельствах:
    1. Быстрый заказ(без регистрации)
    2. Товары с дополнительными характеристиками
    3. Удаление товаров из корзины

    Все три пункта обязательны. В этом случае происходит замена дополнительных характеристик товаров.
    Далее: если "чужая" характеристика является допустимой для товара (например, вес), то возможен некорректный подсчет суммы.

    Поясняю:
    корзина незарегистрированного покупателя сохранияется в сессии, в трех массивах. Пример:
    [gids] => Array // productsID
    (
    [0] => 410
    [1] => 413
    [2] => 139
    [3] => 877
    [4] => 410
    )

    [counts] => Array // количество
    (
    [0] => 1
    [1] => 1
    [2] => 1
    [3] => 1
    [4] => 1
    )

    [configurations] => Array // дополнительные характеристики
    (
    [0] => Array
    (
    [0] => 25
    [1] => 7
    )

    [1] => Array
    (
    [0] => 3
    [1] => 56
    )

    [2] => Array
    (
    )

    [3] => Array
    (
    )

    [4] => Array
    (
    [0] => 25
    [1] => 6
    )

    )

    При удалении товаров из корзины в этом случае происходит обнуление соответствующей позиции массива gids. Получается, следующее (удалены позиции 0, 2 и 3:(
    [gids] => Array
    (
    [0] => 0
    [1] => 413
    [2] => 0
    [3] => 0
    [4] => 410
    )

    [counts] => Array
    (
    [0] => 1
    [1] => 1
    [2] => 1
    [3] => 1
    [4] => 1
    )

    [configurations] => Array
    (
    [0] => Array
    (
    [0] => 25
    [1] => 7
    )

    [1] => Array
    (
    [0] => 3
    [1] => 56
    )

    [2] => Array
    (
    )

    [3] => Array
    (
    )

    [4] => Array
    (
    [0] => 25
    [1] => 6
    )

    )
    Массивы counts и configurations остались без изменений.
    При оформлении заказа осуществляется перенос позиций в базу данных.
    Если productID(gids) равен 0, то позиция не переносится.
    Все логично. Однако разработчики допустили маленькую ошибку.

    order_functions.php

    foreach( $_SESSION["gids"] as $productID )
    {
    if ( $productID == 0 )
    continue;

    //здесь выполняется перенос, если productID != 0

    $i++;
    }
    Как видно, переменная i увеличивается только если productID != 0.
    Значит 413 (1) позиции будут записаны характеристики от 0, а 410 - от 1.
    Исправлено:
    if ( $productID == 0 )
    {$i++; continue;}
     
    onenures, Panterka07, buratino и ещё 1-му нравится это.
Статус темы:
Закрыта.