Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > постраничный вывод из БД


Автор: agarheim 20.2.2008, 14:28
Вопрос следующего толка. как организоввывается постраничный вывод я понимаю и он работает и все хорошо, но вот посетила меня такого толка идея:

Критерии для поиска задает форма (количество параметров передаваемых изменяется от 2 до 10). 
И както их все передавать $_GET"ом нехоцца. вот думаю может в сессии их запихнуть?!
у кого какие соображания на эту тему есть?!

Автор: bars80080 20.2.2008, 15:04
а $_POST'ом не получается?

Автор: agarheim 20.2.2008, 15:12
у меня присутствует много пробелов в знании программирования. но на сколько я понимаю то $_POST ом я передам данные из формы первый раз в скрипт который мне даст результатом страницу с данными лимит от 0 до 10. и перечнем страничек 1 ,2,3,4,5 ...ну или сколько их получится. Так вот я думаю если все данные переданные постом записать в сессию. и тогда ссылка выбора следующей странички от10 до 20. будет передавать просто одно значение с какого по какое выбирать а все остальные данные незаметно для пользователя будут браться из сессии

Автор: bars80080 20.2.2008, 15:19
ну, в принципе если так ставить вопрос, то возможно лучше решение в сессию

другое решение: использовать для хранения параметров БД или файлы, но это уже упражнения со штангой на батуте
формировать каждый раз форму с кнопочками 1 2 3 4 ... и скрытыми полями с передаваемыми параметрами то же самое только уже с клиентской стороны

Автор: agarheim 20.2.2008, 15:28
Вобщем посмотрел я как оно выглядит если гетом, слишком большая ссылка получается даже если учесть что преобразовано в ЧПУ. то громоздко выглядит. буду в сессию прятать и все дела. 

Вопрос всеравно оставляю открытым. может у кого уже есть опыт такого плана.

Автор: GeneralElectric 20.2.2008, 15:33
bars80080, прежде, чем отвечать на вопрос, надо задуматься - а какой в нем смысл?

Цитата(agarheim @  20.2.2008,  14:28 Найти цитируемый пост)
И както их все передавать $_GET"ом нехоцца

agarheim, задавая вопрос, надо внятно сформулировать проблему
А вопросы типа "хоцца - не хоцца" не имеют отношения к программированию.

С точки зрения юзабилити передавать надо только GET-ом.
Вред фреймов знают уже, кажется, все. Но упорно стремятся наступить на те же грабли в поиске. мне сто раз присылали ссылки "посмотри, стоит ли покупать такую железяку". ага. посмотрел. На форму поиска.

Автор: agarheim 20.2.2008, 15:37
угу. теперь понял. в чем я ошибался. 
вообще вылетело из головы то что потом никто другой не сможет этим воспользоваться.

Автор: GeneralElectric 20.2.2008, 15:42
Код

$qs="?";
foreach ($_GET as $key => $value) if ($key != "page") $qs.=urlencode($key)."=".urlencode($value)."&";

Вот и вся "передача GET-ом". Ничего сложного. 
А ЧПУ в поиске - как рыбке зонтик.

Автор: bars80080 20.2.2008, 16:17
GeneralElectric, а если тридцать параметров из формы в форму, наподобии визарда?

Автор: agarheim 20.2.2008, 16:46
вопрос возник из-за 10 параметров передаваемых.  просто когда в форме передается искать такоето слово одно. то нормально. а когда их 10?! на что похожа передаваемая строка. теперь понимаю что для удобства пользователей надо всерамно гетом передавати

Автор: Fortop 20.2.2008, 21:47
Цитата(agarheim @  20.2.2008,  16:46 Найти цитируемый пост)
вопрос возник из-за 10 параметров передаваемых.  просто когда в форме передается искать такоето слово одно. то нормально. а когда их 10?! на что похожа передаваемая строка. теперь понимаю что для удобства пользователей надо всерамно гетом передавати 

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

В принципе, если ничего военного в информации нет (в моей задаче есть), то можно создавать хеш параметров поиска. 
А сами их записывать в базу. 
Тогда механизм работы будет следующий.

1. Если пользователь обращается по ссылке с хешем, параметры берутся из базы.
2. Если как обычно заполнив форму, то попутно формируем хеш. И пишем в базу (если таковой отсутствует, если присутствует, то обновляем дату обращения).
3. Да, и я бы позаботился о сборщике мусора получающего в базе. т.е. записи к которым последнее обращение было старше Н-го срока стирал бы.

P.S. у меня те самые 20-30 параметров поиска и бывают. В урл все это толкать - самоубийство.

Автор: agarheim 21.2.2008, 16:39
Цитата(Fortop @ 20.2.2008,  21:47)
Схожую задачу, правда для ограниченного круга пользователей и с обязательной авторизацией решил через сессии.
Состояние сессии сохраняется в базе.

В принципе, если ничего военного в информации нет (в моей задаче есть), то можно создавать хеш параметров поиска. 
А сами их записывать в базу. 
Тогда механизм работы будет следующий.

1. Если пользователь обращается по ссылке с хешем, параметры берутся из базы.
2. Если как обычно заполнив форму, то попутно формируем хеш. И пишем в базу (если таковой отсутствует, если присутствует, то обновляем дату обращения).
3. Да, и я бы позаботился о сборщике мусора получающего в базе. т.е. записи к которым последнее обращение было старше Н-го срока стирал бы.

P.S. у меня те самые 20-30 параметров поиска и бывают. В урл все это толкать - самоубийство.

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

Автор: GeneralElectric 21.2.2008, 17:08
Видимо, в яндексе, гугле и прочих больших сайтах с поиском работают дураки. Которые занимаются самоубийством, пихая параметры в строку. И никто им, бедным, не скажет, как правильно.

Автор: bars80080 21.2.2008, 17:18
но всё же наверное есть какое-то ограничение на длину строки (url), а объёмы передаваемых данных бывают весьма большими, здесь ведь никто не говорил что поиск будет как в яндексе

Автор: Fortop 2.3.2008, 05:14
Цитата(GeneralElectric @ 21.2.2008,  17:08)
Видимо, в яндексе, гугле и прочих больших сайтах с поиском работают дураки. Которые занимаются самоубийством, пихая параметры в строку. И никто им, бедным, не скажет, как правильно.

Дураки не дураки, а пределы все таки есть http://paradigm.ru/2007/12/19/url-max-length/

Возможно со временем они исчезнут, но пока так.

Автор: skyboy 2.3.2008, 08:25
Цитата(Fortop @  2.3.2008,  04:14 Найти цитируемый пост)
а пределы все таки есть

ну, что же. если у тебя параметром поиска является 10Кб - строка, я могу только посочувствовать алгоритму поиска(сранивать фотографии, что ли?). в таком случае: можно и в сессии. все равно в закладки не положишь, и другу по аське не скинешь :-/
да, и не представляю я, чтоб двум разным людям понадобилось такое извращение при одинаковых параметрах поиска.

Автор: Fortop 2.3.2008, 11:59
Цитата(skyboy @  2.3.2008,  08:25 Найти цитируемый пост)
ну, что же. если у тебя параметром поиска является 10Кб - строка

На самом деле 2кб для ИЕ. Для меня как оказалось - это критично.
Впрочем, когда я столкнулся с этой ошибкой я не знал точных цифр, поэтому просто нашел обходной путь.

P.S. не забываем что urlencode() выдает 3 символа вместо 1го, для некоторых знаков и неанглоязычных символов. Так что в русскоязычных проектах все еще жестче чем у меня.

Автор: GeneralElectric 2.3.2008, 12:22
Я думаю, здесь не о чем спорить.
Ну захотелось нескольким людям напомнить о том, что размер квери стринг не бесконечен - это их право.
Насколько я понимаю, ни один из них не говорит, что по этой причине 10 небольших параметров тоже нельзя передавать гетом. 
Фактически они правы. Практически, к обсуждаемому вопросу, их ответ не имеет отношения. 
На том, я думаю, можно и согласиться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)