Корзина

 
0
 
PHP
ava
f999t1 | 19.02.2013, 01:17
подскажите пожалуйста с построением корзины или точнее с алгоритмом построения корзины на сессиях.
уже кучу сайтов перерыл, везде по разному описано, короче сейчас каша в голове.

пока создалось такое представление, что надо на каждой странице открыть сессию session_start()

далее для каждого пользователя присвоится уникальный индификатор ( 32 знака.)
тут первый вопрос куда его записывать? и вообще надо ли его где-то хранить в какой либо переменной.

далее нажимаю на позицию товара и пересылаю id товара и какой либо его параметр в массив $_SESSION
а на странице самой корзины уже извлекаю данные из этого массива.

вот еще код нашел корзины
http://www.web-shpargalka.ru/scripti/corzina1.php


<?php

header('Content-Type: text/html; charset=utf-8');
setlocale(LC_ALL, 'ru_RU.65001', 'rus_RUS.65001', 'Russian_Russia. 65001', 'russian');

session_start();

if (isset($_SESSION['talon']) == "" )
   {
$conn = mysql_connect("localhost", "Имя пользователя", "Пароль пользователя") or die ("Could not connect: " . mysql_error()); 
mysql_select_db("cortini", $conn); 
$result = mysql_query("SELECT counter FROM posetiteli", $conn);
if (!$result) {echo "zapros na viborcu ne proshol."; mysql_error();}
$x = mysql_fetch_array($result);

   $_SESSION['talon'] = $x["counter"]+1;
mysql_close($conn);

$conn = mysql_connect("localhost", "Имя пользователя", "Пароль пользователя") or die ("Could not connect: " . mysql_error()); 
mysql_select_db("cortini", $conn);
$result = mysql_query("UPDATE posetiteli SET counter = counter + 1", $conn);
if (!$result) {echo "zapros na viborcu ne proshol."; mysql_error();}

mysql_close($conn);
}
   ?>


здесь первая часть кода. посетителям присваивают уникальные номера.
не пойму зачем два раза к базе коннектится?
зачем увеличивать число при каждом вхождении и вообще можно ли обойтись без записи в базу данных количества посетителей?
и откуда взялся $_SESSION['talon'] почему именно `talon`?

Полная неразбериха. Подскажите с этими сессиями

В остальном коде из примера все понятно.

Ответы (12)
ava
DioNiR | 19.02.2013, 09:51 #
Цитата


не пойму зачем два раза к базе коннектится?


Потому что кто писал эту статью идиот не знающий как программировать...

Цитата


зачем увеличивать число при каждом вхождении


Ответ выше.

Цитата


и вообще можно ли обойтись без записи в базу данных количества посетителей?


Можно записывать в файл...  smile
То что предлагают они полный бред!

Цитата


и откуда взялся $_SESSION['talon']


$_SESSION['talon'] берется от сюда:

$_SESSION['talon'] = $x["counter"]+1;


Цитата


почему именно `talon`?


А потому что автор статьи идиот по этому smile
ava
f999t1 | 19.02.2013, 10:06 #
резко вы об авторе.

может подскажите  какую-нибудь статью, где правильно описано?
ava
Aliance | 19.02.2013, 10:15 #
Неправильное использование функции:

if (isset($_SESSION['talon']) == "" )


Цитата (f999t1 @  19.2.2013,  11:06 findReferencedText)
может подскажите  какую-нибудь статью, где правильно описано? 

http://www.php.net/manual/ru/features.sessions.php
ava
f999t1 | 19.02.2013, 10:34 #
а чтонибудь применительно для корзины есть примеры?
про сессии теорию уже читал, но на практике никак не могу применить.
а те примеры
которые нахожу, все как-то совсем по  разному написаны, да еще как здесь говорят неправильны
ava
Aliance | 19.02.2013, 11:12 #
Подход "я не особо хочу разбираться и думать, хочу готовую корзину, чтоб все работало магическим образом с коробки" не правилен! Поэтому тут мало кто захочет идти по такому пути и помогать в нем. Правильным будет разобраться с работой сессий, продумать архитектуру (что такое корзина? для чего она нужна? каким требованиям отвечает?) и применить необходимые знания на разработанной схеме.
ava
f999t1 | 19.02.2013, 12:01 #
я не прошу готовую корзину.

дайте правильный пример с сессией.
По одной только теории не получается разобраться.

Еще раз повторю вопрос, что делать с индефикатором пользователя?
Его надо проверять или просто забить на него, заполняя в $_SESSION id для товаров?
ava
skyboy | 19.02.2013, 12:17 #
давай, сначала, разберемся с ожиданиями
как работает "корзина"?
ну, в терминах "выбираем, сохраняется, перезагрука страницы" и т.д.
а там уже перейдем к тому, как подцепить сессии для реализации
ava
Aliance | 19.02.2013, 12:19 #
Еще раз повторяю ответ: зависит от того, как вы спроектируете и что вам нужно.

Воспринимайте $_SESSION как обыкновенный массив, n-мерный. Хотите - пишите так:


$_SESSION[USER_ID][ITEM_ID] = quantity;


А вообще в сессии есть смысл хранить только для незарегистрированных пользователей данные. Для зарегистрированных - есть База (с табличкой, например, user_cart).
ava
f999t1 | 19.02.2013, 12:46 #
Цитата


давай, сначала, разберемся с ожиданиями

как работает "корзина"?



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

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


Цитата


Воспринимайте $_SESSION как обыкновенный массив, n-мерный. Хотите - пишите так:




если пользователь не зареган, то надо вместо USER_ID писать значение session_id() ?
ava
Aliance | 19.02.2013, 13:15 #
А зачем? Сессию другой никто не получит, зачем ее там персонифицировать? Когда куку ставишь с нулевым временем - она становится сессионной (то есть до закрытия вкладки), и по своему поведению аналогична сессии.
ava
f999t1 | 19.02.2013, 13:31 #
то есть для каждого вошедшего пользователя своя сессия.

и соответственно свой n мерный массив.

в которую записываю все данные, которые нужны: id товара,
количество еще что-то, а потом на другой странице вытаскиваю данные из него
без всяких GET и POST.

id сессии мне вообще никак не надо использовать.

после того как заказ сформирован, все эти данные записываю в таблицу заказов.

Предварительно присвоив новому пользователю ID.



 
ava
Aliance | 19.02.2013, 14:23 #
Не увидел вопроса в последнем посте, но да - все правильно написано. вообще существует два способа передачи идентификатора сессии, обычно это делается в куках сессионных.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
ava  Aliance   f999t1   skyboy   DioNiR
advanced
Отправить