Антон, Вы не поняли вопрос. Речь идет не об удалении всех товаров из корзины, а об удалении нескольких товаров одним запросом. Код Выше это часть кода, который выполняется через через ajax. На всякий случай выкладываю весь код, вызываемый через AJAX, для полноты картины:
Код
<?require_once($_SERVER['DOCUMENT_ROOT']. "/bitrix/modules/main/include/prolog_before.php");
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest')
{
CModule::IncludeModule("sale");
if(count($_POST['DELETE'])>0)
{
foreach($_POST['DELETE'] as $key=>$row)
if($key > 0)
{
CSaleBasket::Delete($key);
}
}
}
else
die();
?>
Разработка интернет магазина под ключ на 1С-Битрикс www.electroid.org, интеграция битрикс и 1С.
Дмитрий, я ж добра желаю, именно поэтому и написал - ваш код опасен. А его полный код только подтверждает мое замечание. Что запретит мне передать ВСЕ ID от 0 до 100 000? И убить тем самым все записи?
По вашему вопросу - нет, такого запроса нет, только выбираем, а потом удаляем.
Алексей Макеев пишет: Для проверки подлинности пользователя, думаю, также сгодится проверка сессии, если её передавать при запросе и проверять в файле.
А как? Вот злоумышленник, вот его сессия, вот он хочет удалить все корзины. Профит.
Проверка сессии требуется чтобы убедиться, что это данный пользователь совершает действие сам, а не злоумышленник (дав ему ссылку, к примеру). Например, при удалении элемента, который пользователь может удалить. Но еще мы должны проверять а может ли он его удалить.
Это два совершенно разных уровня проверки, от разных угроз.
Действительно, в случае если имеется возможность такого удаления, проверка одной сессии не поможет, не подумал об этом.
Однако, у меня вопрос к Дмитрий Ипатов, а действительно ли так страшно удаление товаров отдельными запросами, это же не носит массовый характер. Ну набрал какой-то поехавший покупатель себе корзину с 90% наименований товаров, потом вдруг решил половину из корзины убрать, но такие покупатели встречаются крайне редко. Стоит ли ради таких единичных случаев искать какое-то особенное решение?
Просто сам с такими ситуациями ранее не сталкивался.
Алексей, дело в том, что удаление товаров из корзины это запрос в базу данных и на мой взгляд, когда на удаление пяти товаров требуется пять отдельных запросов это безобразие. И такого безобразия в битриксе, много. Можно закрыть глаза, а можно создавать идеи и требовать оптимизации. Тут каждому своё!
Разработка интернет магазина под ключ на 1С-Битрикс www.electroid.org, интеграция битрикс и 1С.
Интересно, в чем безобразие, когда на 5 отдельных позиций идет 5 запросов? Тут ни какого безобразия нет, все совершенно правильно делается. У вас эти 5 запросов не могут качественно снизить быстродействие, чтобы заявлять "какое безобразие!". Или у вас по 10КК удалений корзин в день?
Да в чем проблема, на одно удаление три запроса, на 5 пятнадцать, на десять 30. Давайте в корзину тоже по одному товару добавлять.
Код
$DB->Query("DELETE FROM b_sale_basket_props WHERE BASKET_ID = ".$ID." ", true);
$DB->Query("DELETE FROM b_sale_store_barcode WHERE BASKET_ID = ".$ID." ", true);
$DB->Query("DELETE FROM b_sale_basket WHERE ID = ".$ID." ", true);
все совершенно правильно делается!
Разработка интернет магазина под ключ на 1С-Битрикс www.electroid.org, интеграция битрикс и 1С.
Угу, пришел чел на сайт и в корзину 30 товаров одним кликом добавил, так что ли? Думать то надо, что городишь. Видишь же сам - 3 базы используется - свойства, баркоды и сама корзина. И еще, реально упирается 3 запроса на удаление на фоне 100.000 запросов в день различными ботами/юзерами? Вы вообще битрикс используете для работы или для фэншуя? Так что делается все правильно, а дрочить можно на хабре с любителями а-ля "а мой запрос быстрее на 0.1%, правда не всегда работает и нужно, чтобы звезды были в особом положении и окружение настроено и прыгать нужно на левой ноге колотя правой в бубен".