- Автор темы
- #1
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;}
Итак, этот глюк проявляется только при следующих обстоятельствах:
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;}