1 (28.12.2011 13:11:21 отредактировано metra)

Мне нужно сделать корзину интернет-магазина на cookie'ах, т.е. без регистрации.

Теория: в куки надо вставлять значение-массив с двумя значениями - id товара и кол-во. Т.е. по сути cookie должна представлять собой двумерный массив.

Практика: все что смог сделать

<?php
    $i = 0;
    
    // Ищем, есть ли уже такой товар в корзине.
    do {
        $key = array_search($_POST['id'], $_COOKIE['cart['.$i.']']);
        $i++;
    } while ($key == false);
    
    // Если есть, то добавляем к счетчику кол-ва +1.
    if($key <> false) {
        $f = $_COOKIE['cart['.$key.'][1]']
        setcookie('cart['.$key.']', 'array[]',time()+(604800));
    }
?>

Вот именно на вставке кук я и застопорился (последняя осмысленная строчка кода не закончена) и голова пошла кругом. Подскажите, кто в курсе.

2

metra, для начала, проверь, есть у твоего посетителя кука? может это новый?

     // может юзер имеет куку?
     if(isset($_COOKIE['xid']))
     {

потом с ней работай:

     ·   $xid = $_COOKIE['xid'];

ну а если куки нет, то её сделай.

·   $xid = $remember ? md5("рррррр" . $date . $user_id) : NULL;
|    ·   if($xid)
|    ·   {
|    ·   ·   $xed = $date + COOKIE_EXPIRE;
|    ·   ·   setcookie('xid', $xid, $xed);
|    ·   }
|  
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

3

metra, кука == паспорт, который выдаёт клиенту твой сервер.

Если клиент успешно залогинился, ему следует дать куку.
Перед логином следует эту куку потребовать
Если она есть, то следует не логинить по новой, а работать с ним как со старым, ибо это СВОЙ.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

4

drBatty,
Спасибо, но я спрашивал вообще не про это  smile
Я не могу понять, как работать с двумерным массивом кукисов в контексте корзины интернет-магазина.

5

metra, зачем? храните свой массив в своей базе. А в куке только идентификатор к базе.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

6

drBatty, т.е. вы предлагаете при заходе юзера на сайт давать ему уникальный ID в куки, а когда он добавляет товар в корзину - добавлять строчку в базу вида id | user_id | item_id ? Идея так-то...

7

metra пишет:

т.е. вы предлагаете при заходе юзера на сайт давать ему уникальный ID в куки, а когда он добавляет товар в корзину - добавлять строчку в базу вида id | user_id | item_id ? Идея так-то...

ну да. чем это вам не нравится?

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

8 (28.12.2011 16:20:12 отредактировано metra)

дядяБатя, спасибо, все работает как часы... Т.е. показывает время и тикает  wink  шучу)
Как мне эта идея в голову сразу не пришла - Х3 (хочу знать).

Кому интересно, вот код файла-обработчика запроса (клик по кнопке "Добавить в корзину"):

+ открыть спойлер

<?php

    // Тут все настройки.
    include("core.php");

    session_start();
   
    // Это моя функция, которая просто подключает скрипт к БД.
    db_connect();
   
    if(!isset($_COOKIE['id'])) {
        $res = mysql_query("SELECT num FROM m_users WHERE id = '1'");
        $obj = mysql_fetch_array($res, MYSQL_ASSOC);
       
        setcookie ('id', $obj['num']+1, time()+315360000);
        $e = $obj['num']+1;
       
        mysql_query("UPDATE m_users SET num = '".($obj['num']+1)."' WHERE id =1;");
    } else {
        $e = $_COOKIE['id'];
    }
   
    $item = mysql_real_escape_string($_POST['id']);
    $res1 = mysql_query("SELECT id, amount FROM m_orders WHERE item_id = '".$item."'");
    if(mysql_num_rows($res1) > 0) {
        $obj1 = mysql_fetch_array($res1, MYSQL_ASSOC);
        mysql_query("UPDATE m_orders SET amount = '".($obj1['amount']+1)."' WHERE id = '".$obj1['id']."';");
    } else {
        mysql_query("INSERT INTO m_orders(item_id, user_id) VALUES('".$item."', '".$e."')");
    }
   
    Header("Location: ".$_SERVER['HTTP_REFERER']);
?>

9

metra пишет:

дядяБатя

you make my day  ag

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

10

как вариант: почему бы не использовать в качестве идентификатора, ip пользователя?

11

tiron_alexey пишет:

как вариант: почему бы не использовать в качестве идентификатора, ip пользователя?

1. Топику уже полгода.
2. У меня статический IP. У меня дома потенциально в интернет могут зайти 6 устройств (плюс к файфай еще тыща друзей подключиться) Полезем разом, но каждый для себя заказывать на этот магазин.... И корзина будет общей.
3. Есть динамические ip. Есть шибко умные провайдеры имеющие дурную привычку делать периодический рекконект.......

И нафига все это?

То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me".
GNU/Linux Debian

12

voral пишет:
tiron_alexey пишет:

как вариант: почему бы не использовать в качестве идентификатора, ip пользователя?

1. Топику уже полгода.
2. У меня статический IP. У меня дома потенциально в интернет могут зайти 6 устройств (плюс к файфай еще тыща друзей подключиться) Полезем разом, но каждый для себя заказывать на этот магазин.... И корзина будет общей.
3. Есть динамические ip. Есть шибко умные провайдеры имеющие дурную привычку делать периодический рекконект.......

И нафига все это?

Да человек знает все это, просто сообщения набивает.

13

voral пишет:

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

А какова вероятность того, что вместе полезете?:)

metra пишет:

Да человек знает все это, просто сообщения набивает.

Не нужно мне сообщения набивать.
Прост столкнулся с похожим вопросом, подумал, что можно попробовать таким образом реализовать.

14

tiron_alexey пишет:

А какова вероятность того, что вместе полезете?:)

Вы знаете я по опыту разработки приложений знаю: если есть вероятность, что определенная ситуация "врятли сложится, но может".... Она точно сложится.
Ну а про ситуацию с одним IP вообще легко.  Возьмем не меня, а большую фирму с кучей компьютеризированных клерков ab Ну прикиньте, Вася в курилке показываете новый айфон и говорит, что купил его "прям через интернет, да в 10 раз дешевле". А все друзья тоже мечтают об этом гаджете. Ну и?  А плох тот магазин, который не мечтает о таких ситуациях. ab

В случае динамического IP ситуация еще интереснее. По большому счету эта идентификация только на один сеанс работы посетителя. Тогда вообще теряет смысл эта привязка по IP. Т.к. есть переменные сессии, идентификатор сессии.

То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me".
GNU/Linux Debian

15

я уже на сообщении:

voral пишет:

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

был согласен, что этот подход не совсем хорош, но эго заставило "холивариться" до конца ab
Спасибо за помощь