Как сделать пагинацию в поиске

AkudJEE

Новичок
Всем привет. У меня есть код вывода результата поиска, при первом запросе выводится то количество страниц, которое соответствует запросу. Но при нажатии на следующую страницу выводятся уже все данные из БД. Я так понимаю запрос должен каждый раз повторяться при нажатии на номер страницы. Каким образом это можно сделать? Вот код:
PHP:
 <?php
 if (isset($_POST['submit_s']))
 {
 $submit_s = $_POST['submit_s'];
 }
 
 if (isset($_POST['search']))
 {
 $search = $_POST['search'];
 }
 
 if (isset($submit_s))
 {
 
 if (empty($search) or strlen($search) < 3)
 {
 exit ("<p>Поисковый запрос не введен, либо он менее 3-х символов.</p>");
 }
 
 $search = trim($search);
 $search = stripslashes($search);
 $search = htmlspecialchars($search);
 
 }
 
 /*else
 {
 exit("<p>Для того чтобы что то найти, необходимо что то ввести ;D.</p>");
 }*/
 
 ?>
 <?php
//соединение с базой данных при помощи функции mysql_connect()
  //в аргументах функции укажите имя сервера, логин и пароль. 
  $db = mysql_connect("127.0.0.1","root","");
  //функция mysql_select_db() выбирает текущую 
  //базу данных с именем "komtet_test"
  mysql_select_db("db_name" ,$db);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
  //функция mysql_query() выполняет запрос на выборку данных 
  //результирующий набор данных хранится в переменной $sql
 
	/*$result = mysql_query("SELECT COUNT(tags) AS count from table_name WHERE  `tags` LIKE '%".$search."%' ORDER BY tags DESC");
$row = mysql_fetch_assoc($result);
echo $row['count'];
$rows_max = $row['count'];*/

$query =  "SELECT * FROM `table_name` WHERE  `tags` LIKE '%".$search."%' ORDER BY tags DESC";
$result = mysql_query($query) or die("Invalid query: " . mysql_error());
 
$rows_max = mysql_num_rows($result); // Сколько всего новостей у нас в базе
$show_pages = 4; // Сколько новостей покажем пользователю
     
      $this_page = filter_var($_GET['page'], FILTER_SANITIZE_NUMBER_INT); // Номер текущей страницы
    // (По полезнейшей функции filter_var() - курим мануал)
      
    if ($this_page)
    {
            $offset = (($show_pages * $this_page) - $show_pages);
    }
    else
    {
            $this_page = 1; // Ставим в единицу (первая страница) если не передан параметр $_GET['page']
            $offset = 0;
    }
     
    // Запиливаем собственно, панельку со ссылками на страницы, если нужна пагинация
    if ($rows_max > $show_pages)
    {
           $r = 1;
           while ($r <= ceil($rows_max/$show_pages))
           {
               if ($r != $this_page)
               {          
                    echo '<a href="'.$search.'?page=' . $r . '" title="Перейти на страницу '.$r.'">'.$r.'</a>';
               }
               else
               {
                   echo '<b>' . $r . '</b>'; // Если это текущая страница - то ссылка на саму себя не нужна
                }
                $r++;      
           }
    }
	

  echo '<div class="body list"><div class="post"><h2>Результаты:'. $search.'</h2></div><div class="thumb_grid">'; 
   /*SELECT COUNT(id) AS count from table_name WHERE  `tags` LIKE '%".$search."%' ORDER BY tags DESC*/  
    $query_limited = "SELECT * from `table_name` WHERE  `tags` LIKE '%".$search."%' ORDER BY `tags` DESC LIMIT $offset, $show_pages";
    $final_result = mysql_query($query_limited);
  
    while ($row = mysql_fetch_assoc($final_result)) {  

		  $row["tags"]=str_replace(', ',',',$row["tags"]);  
	         $category = substr(strrchr($row["tags"], ','), 1);  
		echo '<div rel="'.$row["id"].'" class="thumb">
    <a href="/wallpaper/_w'.$row["id"].'.html" title="'.$row["name"].'" rel="permalink">
                <img src="/user-content/uploads/wall/thumb/'.$row["img"].'" alt="'.$row["tags"].'"/></a>
				<div class="size_wall">'.$row["size"].'</div><div class="tags"><a href="/category/'.$category.'/">'.$category.'</a></div>
        </div>  
        ';}
		 printf (' </div></div>');

 printf ('<div class="clear"></div>');
    
    ?>
 

Фанат

oncle terrible
Команда форума
1. Поиск должен делаться GET-ом, а не постом.
2. на остальные страницы надо отправлять все те же переменные, которые отправлялись на первую

Hint: http_build_query()
 

no_santa

Снегур
Даже если запрос на поиск уходит POST-ом...

Добавить таблицу с историей поиска. На поисковый запрос следующий алгоритм:
- поискать в таблице такой запрос
- если нет - добавить его
- получить идентификатор записи с запросом
- редирект на метод, который принимает ID запроса и возвращает результаты

И в последнем можно сделать:
- пагинацию
- статистику
- "контекстную рекламу" и другие плюшки
 

stmegabit

Новичок
Вы должны постоянно передавать GET-ом два параметра. Сам поисковый запрос и номер страницы с результатами, которую будете отдавать пользователю... В скрипте проверяете, если номер страницы не передан, то отображаете данные первой страницы, если передан проверяете существует ли номер этой страницы вообще и выводите её содержимое. Определите по сколько записей будет на одной странице. А вывод данных для нужной страницы практически сведётся к использованию оператора LIMIT в SQL.
 
Сверху