Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: помогите с корзиной на сессиях

Сообщения:  [1-10]   [11-18] 

 
 автор: Красная_шляпа   (28.11.2010 в 12:42)   письмо автору
 
   для: sim5   (28.11.2010 в 03:22)
 

поправлю немного $_SESSION["cart"][$уникальный_идентификатор_товара] = $количество_в_корзине

  Ответить  
 
 автор: sim5   (28.11.2010 в 03:22)   письмо автору
 
   для: Lelius   (28.11.2010 в 02:37)
 

Корзина товаров, это целая философия, что будет делать корзина, и как ее написать, зависит как раз от этой философии. Корзина в минимальном плане содержит уникальный id товара, как ключ в массиве товаров выбранных покупателем, под которым как минимум есть значение количества товара, а может быть цена и прочие его характеристики. В этом случае легко получать из такого массива как одиночный товар, так и группу товаров, удалять, добавлять, сортировать и т.п.

У вас же нет корзины, кроме этого, вам уже сказали об операторе IN, тем не менее вы продолжаете третировать MySQL запросами в цикле. И что вам говорить после этого, вернее зачем?

  Ответить  
 
 автор: Lelius   (28.11.2010 в 02:37)   письмо автору
 
   для: Красная_шляпа   (28.11.2010 в 02:07)
 

У меня еще тут один вопрос появился такой. Я вывожу количество товара таким образом:
foreach($_SESSION["cart"] as $key=>$val) {
$sql = mysql_query("SELECT id_production, title, price, id_catalog FROM production WHERE id_production = $key", $dbcnx);
$foo = mysql_fetch_array($sql); ?>
<input name='number' type='text' size="2" value="<?=$val[$key];?>" />

Но вот если я хочу поменять 1 экземпляр товара на другое число, например, 2 или 3. То как мне его сохранить и как вывести. Если также <?=$val[$key];?> то число не изменится и останется 1.
А после нажатия на кнопку "Пересчитать" выполняется следующий сценарий:
if ($_POST["updbutton"]) {

$id = $_POST["id"];
unset ($_SESSION["cart"][$id]);
}
Это сделано для удаления и непонятно где в $_SESSION или еще можно сохранить количество экземпляров. Первоначально единица 1 появляется при появлении товара в сессии, так:
if (isset($_POST["new"])) {
$new=$_POST["new"];

if(!$_SESSION["cart"][$new])
{
$cart[$new]=1;
$_SESSION["cart"][$new] = $cart;

}
А вот что делать, чтобы поменять на другое число, не знаю. Если знаете, помогите пожалуйста.

  Ответить  
 
 автор: Красная_шляпа   (28.11.2010 в 02:07)   письмо автору
 
   для: Lelius   (27.11.2010 в 23:37)
 

$keys = array_keys($_SESSION["cart"]);
... where id in (".implode(' , ', $keys).");";

  Ответить  
 
 автор: Lelius   (27.11.2010 в 23:37)   письмо автору
 
   для: Николай2357   (27.11.2010 в 23:29)
 

Штука конечно замечательная, только он же сразу выдаст несколько записей до прохождения цикла. Чего то мне не сообразить как это будет выглядеть, потому что так как без IN заполняется каждая строка в таблице, а с IN даже не знаю как. Сейчас уже не могу понять.

  Ответить  
 
 автор: Николай2357   (27.11.2010 в 23:29)   письмо автору
 
   для: Lelius   (27.11.2010 в 23:25)
 

Не вникал в беседу, тут мэтры советуют. Но вот в этом случае
<?
foreach($_SESSION["cart"] as $key=>$val) {
$sql mysql_query("SELECT id_production, title, price, id_catalog FROM production WHERE id_production = $key"$dbcnx);
посоветовал бы обратить внимание на оператор IN
Замечательная, скажу Вам, штука.

  Ответить  
 
 автор: Lelius   (27.11.2010 в 23:25)   письмо автору
 
   для: Trianon   (27.11.2010 в 19:19)
 

Пришлось переделывать массив. Большое спасибо за помощь. Теперь работает. Сама корзина теперь такой массив:
if (isset($_POST["new"])) {
$new=$_POST["new"];

if(!$_SESSION["cart"][$new])
{
$cart[$new]=1;
$_SESSION["cart"][$new] = $cart;
}

Выборка такая:
foreach($_SESSION["cart"] as $key=>$val) {
$sql = mysql_query("SELECT id_production, title, price, id_catalog FROM production WHERE id_production = $key", $dbcnx);
$foo = mysql_fetch_array($sql);

А кнопка такая:
<input name='id' type='radio' value="<?=$key;?>" />
Спасибо.

  Ответить  
 
 автор: Trianon   (27.11.2010 в 22:20)   письмо автору
 
   для: Lelius   (27.11.2010 в 22:02)
 

Вы вообще представляете, сколько строк будет занимать таблица позиций заказов?
Сколько посетителей одновременно будут работать с корзиной?
Сколько товаров в среднем в корзину класть?

Блин, ну ведь чушь же пишете и не стесняетесь нисколько...

Если Вы такой поборник экономии ресурсов, то для работы непосредственно с корзиной сервер вообще можно не затрагивать. Всё сделать на клиентской стороне, а на сервер отправлять уже готовый набор выбранного товара.

Только, повторюсь, я не понимаю, как Вы при этом допустили SELECT в цикле?

А где у Вас живет истинная $i, я вам уже намекнул.
А Sim5 намекнул откытым текстом сказал, что ради приличия ею стоит сделать код товара из базы данных.
Одно другому не противоречит.

  Ответить  
 
 автор: Lelius   (27.11.2010 в 22:02)   письмо автору
 
   для: Trianon   (27.11.2010 в 20:30)
 

Но выборка и чтение через SELECT намного проще для мускула, потому что именно обновление через UPDATE наиболее нагружают БД. Поэтому апдейт лучше избегать при работе с пользовательской частью сайта.

  Ответить  
 
 автор: Lelius   (27.11.2010 в 21:59)   письмо автору
 
   для: sim5   (27.11.2010 в 20:38)
 

Там просто более сложные массивы, я думал через $i будет проще реализовать.

  Ответить  

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования