Проблемы с сессиями

invis

Guest
Проблемы с сессиями

Здравствуйте!
Понимаю, что вопрос несколько избитый, но осмелюсь высказать свою проблему. Логика такова:
Через ПОСТ приходит инфа из полей, и одного скрытого. Скрипт куда пришла инфа, должен по ней отобрать данные из МайСКЬЮЭЛ и вывести их по страницам. Все написано, но! Если нажать на вторую страницу, данные теряются, следовательно, нужно использовать Кукис или Сессии. Остановился не последнем. И так, каков мой алгоритм действий? Таков :)
1) Сначала проверяем откуда пришел чел, из страницы поиска или он нажал на ссылку перехода на следующую страницу?
2) Если со страницы поиска, то мы регистрируем Сессию, проверяем, зарегистрированы ли наши переменные были до этого, если да то убиваем их, и собственно регистрируем новые :)
3) если нажал на ссылку новой страницы, ничего не делаем.
И так, план готов. Воплощаем его в жизнь. Ошибку не выдает.. но.. При повторном поиске, глючит все.. То есть выводятся произвольные результаты, или старые страницы. Вообщем дело не идет. (Сразу оговорка: без сессий поиск идет на отлично, только постраничный вывод не работает, данные теряются) Может быть, что то не правильно в моей логике отношения к этому вопросу? Если нужен листинг кода, то приведу.
Заранее благодарен!
С Уважением Сергей!
 

mahoro

Guest
Может быть удобнее передавать параметры через метод GET? Тогда можно будет обойтись без сессий..
 

_RVK_

Новичок
invis ты скажи, ты что на каждой странице ищешь все заново?
 

zahhar

двинутый новичок
Если я правильно понимаю, у тебя на основе полученных из формы параметров формируется sql-запрос вида:

SELECT [поля] FROM [таблицы] WHERE [сформированное условие] LIMIT n*p,n
где n - кол-во записей на страницу, p - номер страницы от 0.

тогда ссылка для перехода ко второй странице результатов этого запроса должна из себя представлять что-то вроде:

?[параметры запроса]&[p++]

то есть, пройдя по ней, ты запустишь на выполнение тот же самый скрипт с теми же самыми параметрами, что и в первый раз, но на этот раз он будет показывать следующие n записей. При переходе от странице к странице браузер должен постоянно напоминать серверу, какую именно информацию он хочет получить ([параметры запроса]) и начиная с какого места ([p++]).

Недостаток - лишняя нагрузка, т.к. скрипту придется снова на основе [параметров запроса] проверить их на валидность и сформировать [условие]. Если параметров немного, проверки простые и механизм сессий незадействован - то можно так и оставить. А если сессии всё равно использются и передается множество параметров, каждый из которых должен быть определенным образом обработан - то может иметь смысл хранение в сессии или [сформированного условия] или же всего sql-запоса без модификатора LIMIT.

Ещё немного информации к размышлению: если знаком с ООП и слыхал о PEAR, то там есть пакет Pager для разбиения наборов данных на страницы и манипулирования ими.
 

Фанат

oncle terrible
Команда форума
invis, я бы на твоем месте серьезно прислушался к словам mahoro

а сессии надо осваивать сначала на простых примерах
 

invis

Guest
Здравствуйте!
mahoro
Зачем? Переменные то ловяться и так, когда идут со страницы поиска, на страницу вывода. Метот ГЕТ думаю не имеет смысла. Или вы имеете ввиду, прописывать переменные в урл ссылки перехода на страницы?
Diesel
Да. На какждой, заного. Первую показывает нормально, вторую, когда нужно Через ЛИМИТ отобрать произходит новый поиск, с новыми параметрами. Ну а переменные теряються, вот и надо их сохранить ;)
zahhar
Немного у меня по другому:
Сложный запрос ВЕА условие ЛИМИТ а, б
А ссылки вида: ПХПСЕЛФ?а=0&б=20
При такое запросе, теряеться то самое ВЕА условие..
Фанат
С Сессиями знаком, только не очень хорошо :)
ЛИСТИНГ МОЕГО КОДА СЕССИЙ:


(session_name("poisk")) or die ("Не могу зарегистрировать Сессию, фатальная ошибка! /WTB/");
(session_start()) or die ("Не могу начать Сессию, фатальная ошибка! /WTB/");
if(@$seskaput !== "") {
//if(session_is_registered("fio") || session_is_registered("name") || session_is_registered("patronymic") || session_is_registered("organiz") || session_is_registered("spec") ) {(session_unregister('fio')) or die ("Ошибка!"); (session_unregister('name')) or die ("Ошибка!"); (session_unregister('patronymic')) or die ("Ошибка!"); (session_unregister('organiz')) or die ("Ошибка!"); (session_unregister('spec')) or die ("Ошибка!"); }
if(session_is_registered("fio")) {(session_unregister('fio')) or die ("Ошибка!"); }
if(session_is_registered("name")) {(session_unregister('name')) or die ("Ошибка!"); }
if(session_is_registered("patronymic")) {(session_unregister('$patronymic')) or die ("Ошибка!"); }
if(session_is_registered("organiz")) {(session_unregister('organiz')) or die ("Ошибка!"); }
if(session_is_registered("spec")) {(session_unregister('$spec')) or die ("Ошибка!"); }

if(@$fio !=="") session_register("fio");
if(@$name !=="") session_register("name");
if(@$patronymic !=="") session_register("patronymic");
if(@$organiz !=="") session_register("organiz");
if(@$spec !=="") session_register("spec");

}
 

neko

tеam neko
предлагаю в первые два die тоже вставить просто "ошибка"
в целях упрощения
 

DoctorD

Guest
У меня вопрос по сессиям - другого плана: можно ли (или это так и есть) сделать так, чтобы переменные сессии не удалялись при закрытии браузера а хранились на сервере еще какое-то время, чтобы при повторном запуске браузера они бы внось могли быть использованы =)

Лирическое отступление:
Сразу 2Фанат Не надо острить, не надо плиз никаких призывов или рекомендаций к действию, просто нужно ответить да или нет =) А за твои высказывания в мой адрес по поводу тупости и прочего - прощаю =) Ведь люди бывают разные... Всем нам нужна помощь в той или иной степени ... Вот =)
 

Фанат

oncle terrible
Команда форума
DoctorD
нельзя.
нельзя, чтобы масло было не из масла.
сессияч - это и есть - пока не закрыт браузер.
и запомни.
я тебя в последний раз предупреждаю.
Свои вопросы надо задавать в своем топике. И не лазить в чужие.
Или ты совершенно необучаемый дебил, и слова до тебя не доходят?
Ты скажи - будем помогать административными мерами.
 

DoctorD

Guest
2Фанат еще раз говорю - не груби...
по поводу твоего замечания:

Топик называется "Проблемы с сессиями "
мне показалось необоснованным создавать новый топик, так как мой вопрос (как мне кажется) относится к этой же теме...

Для чего плодить топики с одинаковыми проблемами?
 

neko

tеam neko
наверное надо просто создать топик "проблемы с головой" и там задавать все подобные вопросы

для чего плодить топики с одинаковыми проблемами?
 

Фанат

oncle terrible
Команда форума
Для чего плодить топики с одинаковыми проблемами?
для того, что проблемы НЕ одинаковые, и для того, чтобы НЕ МЕШАТЬ автору топика со своими дурацкими проблемами - у него и своих хватает.
мне показалось
тебе неправльно показалось.
вопрос закрыт.
 

invis

Guest
neko
Можно %) А почему сессии то не нужны? Каким образом можно обойтись без них? Давайте будем говорить точно, а не вскользь :)
Diesel
В чем заключаеться кривость? В структуре, или просто внешнем оформлении? Пожалуйста, доказывайте ваши слова, аргументируйте!
Фанат DoctorD
Не стоит сориться. Думаю форум создан не для выяснения отношения, а для того что бы помочь, найти обьяснения проблемам. Для ДоктораД: Не хочу показаться грубым, но не стоит писать в чужом топике.. Наверное лучше создать свой..
ДЛЯ ВСЕХ:
Может быть стоит писать факты и доказательства, примеры и рассуждения, вместо кидания коротких фраз, не на чем не обоснованных?
 

neko

tеam neko
Может быть стоит писать факты и доказательства, примеры и рассуждения, вместо кидания коротких фраз, не на чем не обоснованных?
а может вообще не стоит разговаривать с человеком, который решение своей банальной задаче не хочет найти поиском, тем самым нарушая правила форума?
 

Фанат

oncle terrible
Команда форума
Может быть стоит писать факты и доказательства, примеры и рассуждения, вместо кидания коротких фраз, не на чем не обоснованных?
отличная идея!
обоснуй, чем тебя не устраивает ОБЩЕПРИНЯТЫЙ способ - передавать параметры поиска гетом? (за примером ходить далеко не надо - сайт www.yandex.ru тебе знаком?)

-~{}~ 16.07.04 13:26:

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

invis

Guest
neko
На решение свой банальной задачи трачу уже вторую неделю.. Я сюда пришел, не ругаться, а просить помощи.. Если Вы можете\хотите помочь - помогите, если нет, так не стоит разводить оффтопик.

-~{}~ 16.07.04 13:30:

Фанат
Немного не понял Вас в использовании ГЕТ.. Я думал вы имеете ввиду передовать данные из поиска на генератор. Да наверное приплюсовать информацию о переменных к ссылкам методом ГЕТ оптимальное решение. Спасибо за помощь!
С Уважением Сергей!
 

zahhar

двинутый новичок
Автор оригинала: invis
zahhar
Сложный запрос ВЕА условие ЛИМИТ а, б
А ссылки вида: ПХПСЕЛФ?а=0&б=20
?а=0&б=20 тут лишние. Это конечно дело вкуса - работать будет и так, и эдак, но вариант:

LIMIT [perpage*pageno],[perpage]
и потом в ссылке [ПХПСЕЛФ?pageno=n] более универсален.

Почему?
1) проверять на валидность нужно не 2 параметра, а один;
2) при формировании ссылки вычислить одно значение (номер следующей страницы) проще, чем 2 значения (твой интервал)
3) адрес получится короче на пару символов и яснее
4) в будущем при необходимости его проще будет превратить в ЧПУ с помощью mod_rewrite
5) в случае если нужно изменить кол-во записей в выдачи, достаточно один раз изменить глобальный параметр perpageи не надо будет делать изменения в интервалах в коде

думаю, pros достаточно.
 

_RVK_

Новичок
invis почитай фак и все поймеш. кратко перечислю следующее.
1. нужно использовать $_SESSION[]
2. не нужно использовать @.
3. проверяем данные isset() или empty()

Но это на будующее. сесии здесь ненужны...
 
Сверху