За последние 24 часа нас посетили 56875 программистов и 1791 робот. Сейчас ищут 866 программистов ...

PHP и БД-Сессии - как реализовать конкретную задачу?

Тема в разделе "PHP для новичков", создана пользователем Alexnewaro, 24 мар 2015.

  1. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Есть такое понятие как корзина.
    Я под этим понимаю складирование информации о конкретном товаре, к которой потом можно вернуться и пакетно обработать.

    А вот если единица "товара" - это набор выбранных пользователем параметров?

    То есть человек навыбирал из формы те параметры, которые ему нужны. Оформил заявку, содержащую эти параметры.

    Если хочется дать ему возможность сформировать несколько наборов параметров, а потом единой заявкой все отправить - я так понимаю помогут сессии.
    Так и реализовал - в сессию записывается первый набор параметров. После повторного выбора параметров, на сводной странице выводятся сразу два набора параметров. Сводная заявка, занавес. Все работает.

    НО! Это справедливо на данном этапе моего понимания сессий только для формирования ДВУХ наборов.
    А если человеку нужно сделать 5 заявок? Понятно, что после отправки двух заявок я дестрою сессию, он зашел еще раз на страницу выбора параметров, забил еще две - отправил. Потом еще одну.
    А как реализовать механизм, чтобы человек мог создавать столько наборов параметров, сколько ему нужно, а потом все разом отправлять в заявке? То есть, по сути, как хранить в "корзине" неограниченное количество наборов?
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    хранить в массиве. каждый элемент массива, это отдельный массив с отдельным набором параметров
     
  3. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Спасибо за желание помочь!
    Задним умом понимаю принцип, но нельзя ли подкинуть более развернуто идею (не полную реализацию ни в коем случае) воплощения?

    Добавлено спустя 3 минуты 49 секунд:
    Идея, как я себе это вижу:

    в базу пишутся полученные данные, привязанные к идентификатору сессии.
    при открытии сводной страницы идет запрос по идентификатору сессии и выводятся все принадлежащие данные, то бишь сохраненные наборы.

    Но вот я с сессиями на Вы. Получение уникального идентификатора (через хэш?) и запись данных в базу с его привязкой... Сохранение сессии... Выборка по идентификатору... Как-то мозг плавает...
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    так где хотите хранить то эти наборы параметров? в БД или в сессии?
     
  5. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Стыдно признаться, понятия не имею, как организовать множественные сессии, либо сессию с различным содержанием одних переменных...
    В сети третий час гуглю - толком про это не понял, но БД-сессии сильно привлекают, там я хоть принцип понимаю (если правильно понимаю, смотрите выше)

     
  6. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    хранить наборы в бд, в сессии ключ для доступа к корзине если не было авторизации.
    С чем именно проблема?
    Хранить в корзине лучше не сами наборы или их идентификаторы, а использовать битовые маски. В данном случае они как нельзя кстати применимы.
     
  7. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Проверьте меня...
    Я же могу сделать так?

    Код (Text):
    1.  
    2. $sid = mt_rand();
    3. $_session['sid'] = $sid;
    В сессии у меня будет крутиться случайное число ['sid'].

    Юзер выбрал набор параметров. Нажал что-то типа "сформировать еще одну заявку".
    По клику все выбранные данные записались в базу под уникальным ID, одно из полей - `sid`. Ансет всех переменных, кроме ['sid'].

    Юзер снова подбирает набор параметров. Снова нажимает "сформировать еще одну заявку".
    По клику - еще одна запись в базу под уникальным ID и тем же `sid`. Ансет всех переменных, кроме ['sid'].

    Открытие "корзины" - выборка из базы
    Код (Text):
    1. WHERE `sid` = $sid
    и обработка полученных данных через foreach.
     
  8. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Помимо генерации ключа нужно проверять нет-ли его уже в таблице. Если есть, то генерировать повторно.