[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Постраничня + поиск + селекты
SunSet
Прощу помочь в следующей проблеме.
Есть страница поиска по выбранным селектам и текстовому полю. Поиск осуществляется по нажатию сабмита. Все работает, все гуд. Но хочу сделать постраничный вывод всего найденого.
Такую постраничную уже сделал но для статической инфы, где нет селектов.
Проблема в том, что на первую страницу выводится все как нужно, но при переходе на вторую страницу index.php?page=2 уже нету значения кнопки submit, от этого сбивается весь скрипт и нечего выводить, поскольку именно от номера страницы и кнопки поиска завсит что будет выводится. Приписывать к ссылке index.php?page=2&submit както несерьезно, да и наверняка будут с этим глюки потом.

Приведенный ниже пример - тестовый, возможно есть ошибки, так как без проверки набросал. В моей странице там все сложнее и по-индусски smile.gif

PHP
<?php 
// Переменная хранит число сообщений выводимых на станице  
$num 5;  
// Извлекаем из URL текущую страницу  
$page $_GET['page'];  
// Определяем общее число сообщений в базе данных  
if (submit)
{
$res mysql_query("SELECT * FROM comments WHERE text=$text");
$res33 mysql_num_rows($res);
$posts $res3;
}
if (!isset(
$posts) or empty($posts)) { $posts 1;}
// Находим общее число страниц  
$total intval(($posts 1) / $num) + 1;
$page intval($page);  
// Если значение $page меньше единицы или отрицательно  
// переходим на первую страницу  
// А если слишком большое, то переходим на последнюю  
if(empty($page) or $page 0) {$page 1;}  
  if(
$page $total) {$page $total;}  
// Вычисляем начиная к какого номера  
// следует выводить сообщения  
$start $page $num $num;  
?>



<form name="form1" method="post" action="">
  <label>
  <input type="text" name="text" id="textfield">
  </label>
  <label>
  <input type="submit" name="button" id="button" value="Submit">
  </label>
</form>

<?php 
if (submit)
{
$res mysql_query("SELECT * FROM comments WHERE text=$text ORDER BY id DESC LIMIT $start, $num");
while = (
$res2 mysql_fetch_assoc ($res))
echo 
$res2["text"];
}
?>



 <?php  
// Проверяем нужны ли стрелки назад  
if ($page != 1$pervpage '<a href= ./?page=1><<</a>  
                               <a href= ./?page='
. ($page 1) .'><</a> ';  
// Проверяем нужны ли стрелки вперед  
if ($page != $total$nextpage ' <a href= ./?page='. ($page 1) .'>></a>  
                                   <a href= ./?page=' 
.$total'>>></a>';  

// Находим две ближайшие станицы с обоих краев, если они есть  
if($page 0$page3left ' <a href= ./?page='. ($page 3) .'>'. ($page 3) .'</a> | ';  
if(
$page 0$page2left ' <a href= ./?page='. ($page 2) .'>'. ($page 2) .'</a> | ';  
if(
$page 0$page1left '<a href= ./?page='. ($page 1) .'>'. ($page 1) .'</a> | ';  
if(
$page <= $total$page3right ' | <a href= ./?page='. ($page 3) .'>'. ($page 3) .'</a>';  
if(
$page <= $total$page2right ' | <a href= ./?page='. ($page 2) .'>'. ($page 2) .'</a>';  
if(
$page <= $total$page1right ' | <a href= ./?page='. ($page 1) .'>'. ($page 1) .'</a>'


// Вывод меню  
echo $pervpage.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$nextpage;  

? >


Вобщем, может, есть какойто пример рабочий для поиска по базе и постраничного вывода. Или в этом чтото перебрать, но никак не могу доделать, по-всякому уже перекрутил. Сам скрипт взят с софттайма, причем в оригинале он нерабочий)) blink.gif



Спустя 50 минут, 7 секунд (1.10.2009 - 00:17) jetistyum написал(а):
есть очень даже не плохой пример wink.gif
google.com
отправляй форму поиска get запросом, ну и ссылки формируй соответственно

<a href="search.php?q=искомое%20слово&t=20&page=1>1</a>
<a href="search.php?q=искомое%20слово&t=20&page=2>2</a>
<a href="search.php?q=искомое%20слово&t=20&page=3>3</a>
Элементарно, Ватсон! smile.gif

Спустя 5 минут, 28 секунд (1.10.2009 - 00:22) SunSet написал(а):
jetistyum
Тоже не хорошо, если будут видны имена селектов. Неохота опять индусской манере учиться))
В гугле я облазил, пока нашел подходящий скрипт для постраничной навигации. А вот склепать их не получается.

Спустя 3 минуты, 58 секунд (1.10.2009 - 00:26) sergeiss написал(а):
Афигеть... Дайте два!!! biggrin.gif
Цитата (SunSet @ 1.10.2009 - 00:27)
Сам скрипт взят с софттайма, причем в оригинале он нерабочий))

А зачем брать за основу скрипт, про который известно, что он нерабочий? Посмотри поиском по форуму, тут было много насчет постраничного вывода. Это будет намного надежнее.

Находишь вверху слово "Поиск", жмякаешь его, вводишь "постраничная навигация" (и еще не забываешь выбрать нужный раздел в поиске "PHP для начинающих")... И да пребудет с тобой счастье! smile.gif (это я, типа того, благословил тебя wink.gif )

Спустя 9 минут, 30 секунд (1.10.2009 - 00:36) jetistyum написал(а):
гугл я дал для примера самой постраничной навигации с сохранением строки запроса прямо в get параметрах, может ты считаешь что гугл тоже пример индусского кода?
ну тогда можно сделать через ОПУ.. хранить все например в сессиях или в куках, но тогда не сложно запутаться в двух паралельных сессиях поиска одним юзером, хотя и это можно обойти.
посмотри результаты поиска гуглом по слову сиськи. понажимай 1,2,3 страницу.. слово сиськи передается от страницы к странице через обычнй get параметр, ктому же можно такую ссылку сохранить, или отправить кому-то, а не просить устно поставить там галочку, там выбрать то и то, там се и се..

Спустя 9 минут, 41 секунда (1.10.2009 - 00:45) SunSet написал(а):
sergeiss
Благодарю, тебя о всевышний отец, однако смею набраться наглости и опровергнуть твои наставлеяния, ибо выбранный мною скрипт не настолько иудейский, и имеет в сущности своей простоту и доходчивость для меня. И лишь благодаря молитвам, неуёмной вере и методу тыка я все же смог найти в себе познания и духовную силу найти ложную функцию от нечистого в том скрипте и заменить ее правильной. И о, чудо, он заработал!
Но нет.. все мои попытки воссоединить в одно целое во благо добра - постраничку и поиск, - не смог найти в себе знаний великого и непоколебимого PHP, не смог я распознать и отличить истину от лжи (true | false), и не смог найти в себе веры продолжить свои начинания и довести до работоспособности сия чуда математическо-програмного)) О, великий, наставь меня на путь истинный, и огради меня от ссылок на гугл и поиск по форуму. exit (Аминь); laugh.gif


jetistyum
Чтото в этом есть... Просто делал сам поиск изначально чтоб нигде не было передачи через Гет. Там не нужно просто сохранение найденого в виде ссылки, а тут видимо прийдется.

Спустя 10 минут, 43 секунды (1.10.2009 - 00:56) sergeiss написал(а):
И зря ты, "сын мой" wink.gif, отвергаешь поиск по форуму smile.gif
Ибо ты сразу мог бы узреть (или узрить - как грамотнее? blink.gif ), что для определения общего количества позиций надо не выбирать их все, а запустить более "правильный" запрос
PHP
$res mysql_query("SELECT count(*) FROM comments WHERE text=$text");

Мало того, что он выполнится быстрее, так еще достаточно будет просто прочитать одно единственное значение.

А также, осознав себя программером, ты бы сначала инициализировал переменные, ибо при невыполнении условия
PHP
if ($page != 1$pervpage '<a href= ./?page=1><<</a>  
                               <a href= ./?page='
. ($page 1) .'><</a> ';

переменная $pervpage будет неиницализирована. То есть, она просто не будет существовать. Что может привести к глюкам, даже если вывод ошибок выключен.

И набравшись терпения, минут эдак на 5, ты бы нашел ответ на вопрос, мучающий твою душу:
Цитата (SunSet @ 1.10.2009 - 00:27)
Вобщем, может, есть какойто пример рабочий для поиска по базе и постраничного вывода.

Потому как в том поиске по форуму, именно по этим словам, есть ну просто куча информации.

Спустя 4 минуты, 54 секунды (1.10.2009 - 01:01) SunSet написал(а):
sergeiss
В оригинале скрипта там действительно идет подсчет строк через COUNT (), но чтото оно со мной не захотело дружить, решил долго не заморачиваться и временно вывести через mysql_num_rows.
А про переменную $pervpage - это пинать автора софттайма.

Щас поищу все же, попробуй найти подходящее под мои запросы. rolleyes.gif

Спустя 15 минут, 52 секунды (1.10.2009 - 01:17) sergeiss написал(а):
Цитата (SunSet @ 1.10.2009 - 02:01)
В оригинале скрипта там действительно идет подсчет строк через COUNT (), но чтото оно со мной не захотело дружить, решил долго не заморачиваться и временно вывести через mysql_num_rows.

Неправильный подход. Представь, что там 400 полей и 100 тыс. записей. Нафига выбирать все эти данные? При этом же ведь они физически выбираются в новый временный файл, во временную таблицу.

И кстати. При большом количестве записей не только "простая" выборка, но и "простой" COUNT() могут работать достаточно долго. Поэтому для больших таблиц постоянно делать COUNT не стоит.
Цитата

А про переменную $pervpage - это пинать автора софттайма.

Ну уж нет smile.gif Ты взял - подумай, "причеши" самостоятельно. Иначе это выглядит так: "я тут какую-то хрень нашел, может быть это то, что мне надо; вы тут гляньте, то ли это, что мне нужно; а мне, мол, лень самому". Скорее всего, это не так, но выглядит-то так...

И уж когда действительно что-то непонятно будет (после того, как сам продумал), то тогда и спрашивай.

Спустя 14 минут, 33 секунды (1.10.2009 - 01:31) SunSet написал(а):
Цитата
sergeiss
Неправильный подход.


Правильный)) Я же сказал что временно заменил и записей там не сто тыщ, а еле с десяток наберется)) Зачем так сразу пугать))

И сперва хочу довести до работоспособного вида, а затем уже делать проверки. smile.gif А то, так сказать, машина без колес стоит, а я фары протирать буду)))

Спустя 23 минуты, 4 секунды (1.10.2009 - 01:55) sergeiss написал(а):
SunSet - оффтоп: если ты хочешь процитировать чьи-то слова, то сначала выделяешь их, а потом жмешь такую серую кнопку с белой стрелкой. Которая находится справа-внизу именно того сообщения, из которого берешь цитату. Правда, это работает только при использовании "Быстрого ответа".

И - о, чудо Маниту! smile.gif - цитата сразу же переходит в окно "Быстрого ответа", находящееся внизу страницы.

Спустя 6 минут, 10 секунд (1.10.2009 - 02:01) SunSet написал(а):
sergeiss
А зачем тогда в панельке кнопка цитаты?
Спасиб за совет, я даже не подозревал о существовании той кнопки) Хотя, изза своего склероза завтра уже могу про нее забыть))


А по теме - вот вроде сделал то что хотел, прикрутил передачу через гет параметров по типу
PHP
if($page + 1 <= $total) $page1right = ' | <a href= ./?page='. ($page + 1) .'&country_id='.$country_id.'&region_id='.$region_id.'&city_id='.$city_id.'&search='.$search.'&submit_s=1>'. ($page + 1) .'</a>';


jetistyum
респект, по твоему методу прийдется сделать.

Както меня пугает, что так быстро получилось.. не к добру это))) laugh.gif

Спустя 10 минут, 57 секунд (1.10.2009 - 02:12) sergeiss написал(а):
Цитата (SunSet @ 1.10.2009 - 03:01)
А зачем тогда в панельке кнопка цитаты?

Это атавизм smile.gif Переход на другую страницу, где будет процитировано всё сообщение.

Но можно всё то же самое сделать и в "Быстром ответе". Который мне лично нравится больше.

Спустя 6 минут, 3 секунды (1.10.2009 - 02:18) SunSet написал(а):
sergeiss
Я о другой кнопке сейчас) user posted image Вот эта.
Кстати, так как на этом форуме в большей части вопросов приводится код скрипта, можно было б чуть выше кнопочек форматирования текста (картинки, ссылки и пр) сделать надпись типа "Оформлять код кнопками user posted image user posted image". А то часто новички забывают об этом, а так напоминание будет.

Спустя 3 дня, 12 часов, 50 минут, 46 секунд (4.10.2009 - 15:08) mark1 написал(а):
извините что вклиниваюсь,но могли бы вы показать код этой страницы поиска по выбранным селектам и текстовому полю.Очень надо

Спасибо заранее

Спустя 23 минуты, 53 секунды (4.10.2009 - 15:32) SunSet написал(а):
mark1
Подсказывать код этой страницы нету смысла, потому как работающая система поиска работает на основе 4-х таблиц и 6-ти нужных файлов.

Спустя 25 дней, 4 часа, 26 минут, 21 секунда (29.10.2009 - 20:59) G3/SG1 написал(а):
Может так?

PHP
if(isset($_POST['submit'])){

$text mysql_real_escape_string($_POST['text']);
$_GET['mode'] = "search";
$page = isset($_GET['page'])&&ctype_digit($_GET['page'])&&$_GET['page']!=0?$_GET['page']:1;

$offset $page 10 10;
$onpage 10#сколько результатов показывать на странице

$query mysql_query("SELECT * FROM comments WHERE text LIKE '%$text%' LIMIT $offset, $onpage");
$all mysql_result(mysql_query("SELECT COUNT(*) FROM comments WHERE text LIKE '%$text%'"), 0);

$pages ceil($all/$onpage);

for(
$a=1$a<=$pages$a++){
    echo 
"<a href=\"?mode=search&page=$a\">".$a.'</a> ';
    }
#выводка результатов

}else{
?>
<form name="form1" method="post" action="">

  <input type="text" name="text" id="textfield">
  <input type="submit" name="submit" id="button" value="Submit">
  
</form>
<?}




_____________
... и помните! Каким бы ни был PHP, главное - чтобы он был защищенным! :) (PHP с Анфисой Чеховой)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.