ФорумПрограммированиеPHP для идиотов → Корзина(интернет-магазина) на Cookie

Корзина(интернет-магазина) на Cookie

  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Авг. 14, 2007, 1:17 п.п., спустя 6 минут 52 секунды



    Или есть прямая необходимость запоминать заказ после того как юзер что-то добавил в корзину и ушел с сайта?

    Именно


    Если есть необходимо хранить историю заказов человека, то:
    1. Авторизуем пользователя по логину и паролю, при необходимости хранить в куке, чтобы он не вводил каждый раз при заходе на сайт
    2. Все заказы и инфо о них храним в базе, привязав их к ID пользователя

    я не пойму, в чем проблемы?

    По умолчанию "id cookie"…sid ?

    ни к какому SESSIONID привязываться не надо, храни все в базе и следуй двум пунктам вверху. Если вопросы по чему-то конкретно — обсудим.

    а как он пароль вспомнит - это уж его проблемы. :)

    password recoverer для таких случаев надо в кармане иметь
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz Авг. 14, 2007, 4:54 п.п., спустя 3 часа 36 минут 26 секунд


    Почему магия то???
    Вот пришел человек, залез на сайт, для него была создана кука.
    Он ушел с сайта, потом вернулся через какое-то время и увидел что у него в корзине лежат всё те же незаказанные товары.
    Всё чудесно.
    А теперь представим, что после того как он вышел, пришел другой человек, сел за его компьютер и полез туда же сделать заказ, и что он видет?!! Он видет что в корзине лежат чужие товары.
    Или у тебя сервер будет каким-то магическим образом проверять кто перед ним, первый заказчик или второй!?!

    Сорри…не заметил
    кто-то другой с этого компа зайдет
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz Авг. 14, 2007, 5:07 п.п., спустя 13 минут 33 секунды

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

    Я же говорю магазин будет без регистрации.

    Система такая.
    Заходит пользователь на сайт,хочет заказать товар.
    Если кука не определена - делаем запрос в базу,создаем новый ID,ID заносится в куки.
    else
    заносим в корзину товар
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Авг. 14, 2007, 5:16 п.п., спустя 8 минут 31 секунду

    смари система такая:

    — историю заказов мы сохраняем только для зарегиных пользователей (в БД);
    — для незарегиных пользователей мы ничего не сохраняем и храним его данные только на протяжении жизни сессии;
    — куки мы ставим соответственно только для зарегиных (пишем туда их логин с паролем).
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz Авг. 14, 2007, 5:18 п.п., спустя 2 минуты 19 секунд


    смари система такая:

    — историю заказов мы сохраняем только для зарегиных пользователей (в БД);
    — для незарегиных пользователей мы ничего не сохраняем и храним его данные только на протяжении жизни сессии;
    — куки мы ставим соответственно только для зарегиных (пишем туда их логин с паролем).


    md5,мне в бугага регистрацию писать.Хочу обойтись так.
    Тем более магазин не по продаже телевизоров,колготок и т.д - магазин по продаже контента

    Незнаю к чему я это сказал…ну да ладно
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Авг. 14, 2007, 5:19 п.п., спустя 1 минуту 19 секунд

    без регистрации — только на время сессии
    и я бы на твоём месте вобще бы все хранил в сессии
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz Авг. 14, 2007, 5:24 п.п., спустя 5 минут 6 секунд


    без регистрации — только на время сессии
    и я бы на твоём месте вобще бы все хранил в сессии

    Сессии…пользователь закрыл браузер?!Вроде сессия убита?А если скажем он положил в корзину товар и закрыл браузер?
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Авг. 14, 2007, 5:25 п.п., спустя 1 минуту

    вот нечего закрывать браузер, а сразу заказывай раз положил!

    а если те надо сохранять — делай регистрацию и то, что я описал выше…
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz Авг. 21, 2007, 6:33 п.п., спустя 7 дней 1 час 7 минут

    и я бы на твоём месте вобще бы все хранил в сессии


    Вообще не понял.
    Даже твой приведенный пример. =(
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Авг. 21, 2007, 11:39 п.п., спустя 5 часов 6 минут 17 секунд

    завтра напишу пример. хранение в сессии.
    тока учти, тут без регистрации пользователей и хранения заказов

    схема: зашол, выбрал, заказал, свободен.
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz Авг. 21, 2007, 11:43 п.п., спустя 3 минуты 35 секунд

    Алрайт.Спасибо
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Авг. 22, 2007, 10 д.п., спустя 10 часов 16 минут 29 секунд

    так.
    вобщем заказы мы будем хранить в $_SESSION['cart']
    это у нас будет массив, элементами которого будут являться отдельные товары + их атрибуты

    рассмотрим отдельный товар, это тоже массив, который включает в себя наименование, цену и кол-во

    $tovar1 = array ('id' => '24', 'name'=>'Вагины резиновые', 'price' => 1500, 'count' => 3);
    $tovar2 = array ('id' => '548', 'name'=>'Фалосы металические', 'price' => 3500, 'count' => 1);

    вот здесь пример 2 товаров, первого товара — 3 штуки по 1500 за 1 и соответственно 1 шт. металических по 3500.
    у каждого товара свой id (берется из базы)

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

    $_SESSION['cart'][] = $tovar1; //положили вагины
    $_SESSION['cart'][] = $tovar2; //положили фалосы


    сейчас у нас "корзина" выглядит так:

    $_SESSION['cart'] = array(
    0 => array ('id' => '24', 'name'=>'Вагины резиновые', 'price' => 1500, 'count' => 3),
    1 => array ('id' => '548', 'name'=>'Фалосы металические', 'price' => 3500, 'count' => 1)
    );


    так.
    для удаления товара из корзины, мы воспользуемся этой функцией:
    function delArrayElementByKey($array_with_elements, $key_name)
    {
    $key_index = array_keys(array_keys($array_with_elements), $key_name);

    if (count($key_index) != '')
    {
    array_splice($array_with_elements, $key_index[0], 1);
    }
    return $array_with_elements;
    }


    т.е. нам необходимо передавать индекс массива $_SESSION['cart']

    например, чтобы удалить вагины из корзины, мы будем передавать key=0, чтобы фалосы — key=1



    Все изменения, удаления и т.д. требуют прохождения по массиву корзины foreach'em, т.к. мы идентифицируем наши товары по id (ну это id auto_increment'ная запись в базе):

    удаление:

    foreach ($_SESSION['cart'] as $pkey => $pgoods)
    {
    // $del_id — id записи, который мы передаём, чтобы удалить её
    if ($pgoods['id'] == $del_id)
    {
    $_SESSION['cart'] = delArrayElementByKey($_SESSION['cart'], $pkey);
    break;
    }
    }


    изменение количества (кнопка пересчитать, когда мы оформляем заказ и изменяем кол-во товаров):

    допустим, нам новый величины кол-ва пришли в $_POST в формате $_POST['id_товара'] = 'новое кол-во';

    foreach($_POST as $id => $newq)
    {
    $newq = intval($newq);
    if ($newq < 1)
    $newq = 1;

    foreach($_SESSION['cart'] as $cid => $good)
    {
    if ($good['id'] == $id)
    $_SESSION['cart'][$cid]['count'] = $newq;
    }
    }




    очистка корзины:
    $_SESSION['cart'] = array();



    данные хранятся на сервере, поэтому их нет необходимости перепроверять и пересчитывать общее кол-во товаров и общую стоимость, рекомендуется, при добавлении/удалении прибавлять к общей сумме цену товара и кол-во и хранить где-нить в $_SESSION['cart_sum'] и $_SESSION['cart_count']
    все умрут, а я изумруд
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz Авг. 22, 2007, 11:50 д.п., спустя 1 час 50 минут 20 секунд

    афтар, тему - в faq… ну не обязательно целиком
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Авг. 22, 2007, 11:56 д.п., спустя 5 минут 51 секунду

    да какой там фак, давайте разберемся, штоли
    где Паша?
    все умрут, а я изумруд
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz Авг. 22, 2007, 5:26 п.п., спустя 5 часов 30 минут 9 секунд

    Тут я…а вот не пойму зачем тему в фак?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!