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

Статус
В этой теме нельзя размещать новые ответы.

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;}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху