![]() |
пишем примитивный тырнет-магазин : помогите с сессиями в PHP
привет народ.
нужно следующее: имеется список товаров. задача - чтобы пользователь заходил, отмечал нужные ему товары и после того как наберет все нужное нажимал кнопку "заказать" после чего письмо с указанием выбранных товаров идет ко мне на почту. то есть примитивный тырнет-магазин без кнопок персчета товара и прочего. натыкал - заказал. первый вопрос - как назначить сессию не сразу при входе на страницу а только после того как пользователь ткнул хотя бы один товар? то есть имя сессии как бы назначать самому а как? в этом месте я теряюсь что делать. хелп :) |
session_name()
если без параметра - то выведет имя установленное до, если с параметром, то изменит имя на указанное, еще удобно использовать переменные $_SESSION а также куки, тоже неплохая весч, но не гарантированная, хотя сессии тоже иногда не дают гарантию "настоящей" аунтификации, если директория где они хранятся используется другими проектами ну и т.п.. |
E-mail а как я буду определять какое имя там задалось? я просто только начал php учить поэтому ничего не знаю :)
|
koresaram а вы его запишите сразу как задали, зачем вам его определять?
какой алгоритм Вы себе держите в говове для реализации через сессии, можно узнать? |
E-mail
алгоритм примерно такой: имеется страница index.php на которой выводятся изначально все мои товары (на эту страницу попадает каждый новый пользователь). под каждым товаром кнопка "заказать" с value=ID. ID берется из MySQL базы. на кнопке "заказать" action=zakaz.php на этой странице все то же самое что и в index.php но уже открывается сессия для пользователя (наверное метод деревянный, но со своим уровнем знаний я ничего другого придумать не смог :) ). и дальше пользователь гуляет по страницам zakaz.php уже с сессией и набирает товары (кстати они будут где-то сохраняться при таком подходе?) также на странице zakaz.php появляется подпункт меню "корзина" в которую записыватся выбранные им товары. и форма "Отправить заказ". по задумке пользователь наберет товары, заполняет форму ФИО, тел. и e-mail и посылает мне письмо в котором также содержатся ID заказанных им товаров. |
koresaram,
А почему сразу не открывать сессию для всех пользователей? А при клике на "заказать" только прилепливать товар к сессии. |
benya я прочитал пример в котором сперва вводилось имя в форму и на следующем файле открывалась сессия с введенным именем ну вот по аналогии и "изобрел".
то есть теперь мы сразу открываем сессию. а каким образом приклеивать товары в эту сессию? разъясните плиз как для полного идиота :) или ткните в руководство для полных идиотов, а то все что нашел в инете я как-то не осиливаю :( |
В самом деле, почему не стартовать сессию ВСЕГДА и как можно раньше? Это нормально. К примеру в таких сложных вещах как PEAR::LiveUser так и делается. Итак, сессию стартуем и дальше оперируем с массивом $_SESSION. Это автоглобальный ассоциативный массив. Присвоение его елементам какого-то значения означает запись значения в сессию. Т.о. досаточно при обработке каждого клика по кнопке "купить" выполнять примерно следующий код:
Код:
$_SESSION['tovarIDs'][] = $_REQUEST['ID']; P.S. Помните о безопасности, выражение $_REQUEST['ID'] без фильтрации и обработки потенциальная дыра в срипте. |
koresaram
Цитата:
на странице zakaz.php делаете sesion_start() а далее читаете переменные, те что передали скрипту и записываете в ассоциативный массив $_SESSION ну а после того как нажимаете "отправить заказ", уже на другой странице, например send.php делаете опять session_start() и читаете массив $_SESSION в тело письма |
PrisonerE-mail чего-то я недопонимаю блин 100%. дело еще в том, что
Код:
= $_REQUEST['ID']; Код:
<html> имеем. БД MySQL и собственно сам этот "скрипт" пользователь задает ограничения на поиск вариантов после чего ему выдается сводная таблица в которой он соответственно начинает выбирать нужное. выборка, коннект к базе и вывод результата все работает. собственно я поставил код как вы мне сказали но не работает. либо я не туда его поставил либо неправильно поставил вобщем что-то не так. а вот что именно? :) |
стоп стоп. чего-то я натупил...
name мне нужен 1 value разные это во-первых а во-вторых надо наверное запомнить еще и параметры выборки чтобы в списке оставался только выбранный товар а то сейчас после нажатия "в корзину" список полностью выводится. народ, вы мне советуйте и объяняйте плиз (а если вдруг кто видит, что тут делов на 10 минут при знании предмета и не влом будет может напишете готовое решение :)) |
koresaram
Цитата:
вы что сюда выложили подряд код из всех скриптов или это все один index.php ? вообще совет - использовать один срипт для всех шагов, заодно не придется показывать в html в теге form имя исполняемого скрипта (опятьже метод безопасности) далее, $HTTP_POST_VARS такие массивы уже устарели и их уже никто не использует, а если использует то это смотрится крайне "ламерски" бебе:) используйте массив $_POST или $_GET в зависимости от метода передачи (у вас post), иначе при переходе на следующую ожидаемую версию php ваш скрипт не будет работать, так как эти массивы более не будут поддерживаться и работать. далее, <option value=Север>Север</option> кто так пишет? у вас должна быть создана таблица в бд, где есть два элемента: 1) id 2) direction где id - уникальный ключ таблицы а значение элемента direction является одним из округов ну и соответственно форма должна выводить результат этой таблицы но в value (то что передается) надо писать id будет выглядеть вот так например: <option value=1>Север</option> <option value=2>Юг</option> и т.д. ----- после отправки этой формы пишите в следующем скрипте в самом начале: session_start(); $_SESSION['direction_id'] = $_POST['direction']; если вы не знаете что такое $_REQUEST и как правильно записывать. далее после нажатия на "отправить письмо" в следующем скрипте пишите session_start(); и работайте с массивом $_SESSION['direction_id'] ВСЕ! управился за 5 минут:) а не за Цитата:
|
кстати говоря использования print рекомендую изменить на echo, не говоря уже про форматирование..
|
E-mail
это все один index.php все в одном как шампунь :) $myrow[0] - это что? это по ламерски вывод значений ID объектов из БД. с ассоциативным массивом я не разобрался поэтому пришлось использовать определение по номеру столбца в базе 0-в этом столбце у меня ID объектов (стыдицца) $HTTP_POST_VARS по ламерски, согласен, но какгрится что осилил то и использовал :) <option value=Север>Север</option> кто так пишет? у вас должна быть создана таблица в бд, где есть два элемента: 1) id 2) direction видит Бог, я именно так и хотел сделать :), но поскольку в БД я перегоняю данные из екселя скачанным в инете скриптом (в котором я тоже нифига не рублю) то я сперва попробовал написать в екселе макрос чтоб он ставил там числа по округам но там оказалось недостаточно условий и в итоге я решил что особого ущерба от этого не будет и временно на это дело забил (стыдицца) но в свою защиту могу сказать, что после окончательного понимания всего процесса собирался это дело пофиксить :) вобщем будем осмысливать и пробовать. а насчет 10 минут у меня еще такая проблема что по отдельности я как бы все понимаю а вот в одно целое это все собрать не могу хз почему :) так что далеко не отходите вопросов будет еще множество :) |
Цитата:
в третьих (я не сбился со счету) почему объявление сессий ПОСЛЕ любого вывода? |
...заранее сорри, что не совсем в тему... :)
...написал скрипт (тоже что-то вроде корзины)... данные, выбранные из базы, передавал через форму с параметром hidden... пришло время, когда передаваемых данных стало "ну просто завались"... вычитал про сессии, понравилось... но!... стоит добавить строчку "session_start();" в скрипт, как он "превращается" в нерабочий (выдает пустую страницу)... маюсь уже второй день... :) P.S. (FreeBSD 6.1-p2, Apache 2.0.58, PHP 5.1.4, PostgreSQL 8.0.8) |
Попробуйте поглядеть логи ошибок php. Также попробуйте установить error_reporting(E_ALL); в самом начале скрипта, может чего покажет. Также убедитесь, что до выражения session_start() не делалось никакого вывода в броузер. Почему это необходимо соблюдать читайте здесь.
|
Prisoner
В логах пишет - PHP Fatal error: Call to undefined function session_start()... заглянул в /usr/local/etc/php.ini, есть вот такие строчки: session.use_cookies = 1 ;session.use_only_cookies = 1 в браузере куки отключены, хоть и поменял потом на 0, результат тот же... P.S. ...кругом говорят "отключайте куки, они не безопасны"... в то же время читая литературу, пишут что куки - это самое надежное из стандартных решений для сохранения состояния... .... истина где-то рядом... |
1) Опасность кук - фикция. Что-то из области "обжегшись на молоке на воду дуют". Ну не нравится кому-то, что кто-то (сайты) пишут через кого-то (броузеры) что-то (код кук) на винты их машин. Кому как. То, что это отголосок старых времен - волна недовольства после введения данной технологии, никому почему в голову не приходит. В общем юзайте их, юзайте, но... проверяйте, а вдруг вам повезло и к вам зашел наглухо запечатанный параноик с отрубленными куками, горячей водой, отоплением и светом %).
2) Неопределенная функция session_start() вероятнее всего вызвана компиляцией модуля с опцией --disable-session или --disabled-all. Если не вы администратор хостинга, то обратитесь к его администратору с просьбой пересобрать пакет с поддержкой сессий, это его обязанность. Если же вы, то придется поглядеть в сторону мануалов по сборке моделя php из исходных кодов. |
...вроде нашел... в портах при сборке lang/php5 выбор сборки с поддержкой сессий нет... она валяется в www/php5-session... сейчас скомпилирую и попробую...
|
ура, заработала... :)
|
Рад за Вас :).
|
Время: 10:35. |
Время: 10:35.
© OSzone.net 2001-