Автор Тема: Интернет магазин на PHP+MySQL. Подскажите алгорим работы корзины?!  (Прочитано 5173 раз)

0 Пользователей и 1 Гость просматривают эту тему.

  • Гость
Выводится список товаров, около каждого есть checkbox name=id value=[номер товара из MySQL], ну и внизу кнопка submit.

Как мне организовать, чтобы в сессию положились номера всех товаров. Получается надо чтобы у первого товара переменная была ID у второго уже ID1 и т.д. или это как-то по другому надо делать?

Ну и соответсвенно как опять же всё это дело достать из сессии, при обращении к корзине?

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
во-первых
checkbox name=id[] value=[номер товара из MySQL]
то есть id - должен быть массивом.
Цитировать
Как мне организовать, чтобы в сессию положились номера всех товаров.
session_register(\'id\');


Цитировать
Ну и соответсвенно как опять же всё это дело достать из сессии, при обращении к корзине?

unset($id);
session_start();
session_register(\'id\');
$id=$HTTP_SESSION_VARS[\'id\'];
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Я бы всё сделал не через сессии а через куки
тогда всё элементарно
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Britva

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1660
  • +0/-0
  • 0
    • Просмотр профиля
    • http://eugeny.com
Цитировать
Я бы всё сделал не через сессии а через куки
тогда всё элементарно

хм, чем элементарней?
сессии и так используют куки (если они включены у юзера)
Евгений aka Razor,

  • Гость
Макс
Спасибо всё заработало!

Britva
Цитировать
хм, чем элементарней?
сессии и так используют куки (если они включены у юзера)

Это точно, а что AlieN предложил я не совсем понял...


Дальше у меня ещё такой вопрос возник. Я вывожу содержание корзины, запрос к mysql типа WHERE id=$val.

Функция все-тажа, которая и просто список товаров выводит, только теперь checkbox должен играть роль удаления. Отмеченные пункты (id) надо убрать из массива в сессии. Как это можно осуществить?

Оффлайн DRon

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 31
  • +0/-0
  • 0
    • Просмотр профиля
Макс
А ещё фигня получается, что после первого внесения нескольких ID в сессию, больше внести не получается...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
По поводу удаления:
То же чекбоксы оформляешь как массив, только с именем другим dels[] например. тогда
$id=array_diff($id,$dels);

Цитировать
А ещё фигня получается, что после первого внесения нескольких ID в сессию, больше внести не получается...

Совсем ничего или только id товара не добавляется?
Скорее всего дело в том что после внесения нескольких id в сессию массив id уже существует и последующие добавления нужно делать уже либо c с помощью конструкций типа
$id[N]=$id_товара
или с помощью array_push()
(наверное при открытии сессии стоит сразу записать в нее пустой массив:
$id=array();
session_register(\'id\');
и потом добавлять в этот массив ID добавляемых в корзину товаров.


А если вообще ничего не вносится, то покажи код и содержимое сессионных файлов после первого добавления и после второй попытки добавить что-то в сессию
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Удаляешь элементарно:
Каждому элементу корзины присваиваешь имя tovar
Когда идёт запрос на удаление
while(list($key,$val) = each($temparray)) {
   list($tempname, $tempval) = explode("=", $val);
   if($tempname=="tovar"){$tovar[]=urldecode($tempval);}
}
for($i=0;$i
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн DRon

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 31
  • +0/-0
  • 0
    • Просмотр профиля
Макс
Наконец-то смог проверить все, и вот что получается:

Цитировать
покажи код и содержимое сессионных файлов после первого добавления и после второй попытки добавить что-то в сессию


эти строки стоят вверу index.php:
unset($id);
session_start();

далее когда я хочу добавить товар, вызывается:

$rrr = count($order_id);
for ($i=0; $i<$rrr; $i++)
{
$id=array();
array_push ($id,$order_id[$i]);
session_register(\'id\');
}

получается что в сессию записывается только последний элемент, и он всегда перезаписывается, т.е. щас 3ий, выберу 2ой он вместо 3го запишется:
id|a:1:{i:0;s:1:"3";}

======

Также у меня получилось сделать чтобы заносилось сразу несколько элементов, тогда $id=array(); , я выносил из цикла for и ставил его перед функций добавления, но остаётся всё таже проблема занес я 3 элемента, зашел заново на выбор товара выбрал ещё парочку, и они заносятся вместо тех трех.

сессия выглядит вот так:
id|a:2:{i:0;s:1:"2";i:1;s:1:"3";}

Оффлайн Britva

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1660
  • +0/-0
  • 0
    • Просмотр профиля
    • http://eugeny.com
Цитировать
$rrr = count($order_id);
for ($i=0; $i<$rrr; $i++)
{
$id=array();
array_push ($id,$order_id[$i]);
session_register(\'id\');
}

вынеси session_register за цикл, а $id = array() перед циклом.
« Последнее редактирование: 29 Января 2002, 12:38:13 от Britva »
Евгений aka Razor,

Оффлайн DRon

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 31
  • +0/-0
  • 0
    • Просмотр профиля
Britva
AlieN
Макс
Вот до чего я дошел:

HTML страницы заказов:

выделяем товары


вводим их кол-во


далее вызывается функция

function add_products() {

global $product_id,$product_count,$shop;

for ($i=0; $i{

echo "ID продукта:";
echo $product_id[$i];
echo " ";

reset($product_count);
while (list ($key, $val) = each ($product_count))
{
$iii = $val[$product_id[$i]];
if (isset($iii))
{echo "Количество: $iii
";}
}
}
session_register("shop");
}

Эта функция выводит данные типа:
ID продукта:2 Количество: 7457
ID продукта:3 Количество: 5745


Все вроде чики-пики ID соответсвует кол-ву, но как это загнать в массив вида
array(
"2" => "7457",
"3" => "5745"
);
а потом этот массив в сессию...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28