Постраничная навигация php

Опубликовано 2012.02.06 в разделе Php

Постраничная навигация используется наверное на каждом сайте. Она позволяет разбить большой массив данных на порции-то есть, например, разбить 1000 статей на 10 страниц по 100 штук на каждой. Польза от этого большая. При использовании постраничной навигации снижается нагрузка на базу данных, повышается удобство восприятия информации посетителем сайта-а посещаемость-это один из важнейших показателей эффективности сайта. В данной статье мы будем делать навигацию на стороне сервера.О том какие ещё бывают навигации и как сделать клиентскую постраничную навигацию вы можете посмотреть тут. Также можете почитать о подсчете количества строк в таблице MySql Ну и сам код постраничной навигации. Будем выводить по 10 записей на страницу. Подразумевается что соединение с БД уже установлено.
  1. $sum = 10; // число записей на странице
  2. $result = mysql_query("SELECT COUNT(*) AS a FROM `table name`"); // узнаём количество строк в таблице
  3. $arr = mysql_fetch_row($result); // возвращает неассоциативный массив
  4. $rec = $arr[0]; // общее число записей в таблице
  5.  
  6. // если страница существует, выводим её,иначе первую
  7. if(isset($_GET['p'])){
  8. $str = (int) $_GET['p'];
  9. }
  10. else{
  11. $str = 0;
  12. }
  13.  
  14. // получем номер начальной записи страницы
  15. $start = $str * $sum;
  16.  
  17. // запрос на извлечение данных по конкретной странице
  18. $r = mysql_query("SELECT * FROM `data` LIMIT $start, $sum");
  19. $n = mysql_num_rows($r); // возвращаем число строк результата запроса
  20.  
  21. // если страница не первая, выводим ссылку НАЗАД
  22. if ($str > 0)
  23. {
  24. $p = $str - 1;
  25. echo '<a href=viewpost.php?p=' . $p . '>НАЗАД</a>';
  26. }
  27.  
  28. $str++; // увеличиваем переменную $str на единицу;
  29. // выводим ссылку на следующие пять записей, если она есть,
  30. // то есть число записей, которые нужно вывести,
  31. // и смещение не превышает общего числа записей
  32.  
  33. if($start + $n < $rec) {
  34. echo '<a href=viewpost.php?p=' . $str . '>ДАЛЕЕ';
  35. }
  36.  
  37. // выводим записи
  38. for ($i = 0; $i < $n; $i++)
  39. {
  40. $myrow = mysql_fetch_array($r);
  41. printf ("<h1>%s<p>%s</p>", $myrow['title'], $myrow['description']);
  42. }
  43. </></>
Вот и всё.Подгоняйте данный скрипт под свой сайт и данные.

14 Комментариев

Оставить комментарий

  1. Гость 2015/04/06

    Спасибо :)

    Ответить

  2. Гость 2014/03/20

    у меня выдает ошибку на
    if(isset($_GET['p'])){
    $str = (int)$_GET['p'];
    что нужно поставить вместо р?

    Ответить

    1. Админ 2014/03/24

      А какой переменной вы передаёте номер страницы?
      Если урл выглядит как index.php?page=3 - то нужно писать $_GET['page']
      Если index.php?p=4 - то $_GET['p']

      Ответить

      1. Гость 2014/03/26

        большое спасибо, немножко туплю.

        Ответить

  3. Гость 2013/11/10

    А у меня вот, не работает(
    Это я один, или все стесняются? Запрос не прокомментирован, и что куда заменять не ясно.

    Автор, вы бы лучше закомментировали то, что действительно требует объяснению, а не то что логично расставлено по полочкам, типа этого: echo "НАЗАД";

    Ответить

    1. Админ 2013/11/11

      Не работает у вас не из-за того, что вы написали SELECT count(*) вместо SELECT COUNT , а из-за чего-то другого.
      Отлаживайте скрипт, выводите на экран промежуточные данные(функцией print_r), и понятно будет где ошибка.
      Расставил в скрипте все правильные кавычки, пробелы и конкатенцию. Стало покрасивше))

      Ответить

  4. Гость 2013/10/10

    как разделить текст, допустим книга 5000 символов?

    Ответить

    1. Админ 2013/10/10

      Разбить текст на части, например по 1000 символов.Получится 5 элементов, и каждый такой элемент считать за страницу. и выводить на странице по одному элементу.

      Ответить

      1. Гость 2013/10/10

        спасибо, все понятно.
        а как в коде это реализовать?

        Ответить

        1. Админ 2013/10/10

          Ну как-то так.

          1. $sum = 1; // число записей на странице
          2. $text = '
          3. текст первая часть<!--break-->ещё
          4. текст<!--break--> ещё кусок
          5. произвольного текста';
          6. $arr = explode('<!--break-->', $text); // возвращает неассоциативный массив
          7. $rec = count($arr); // общее число кусков текста
          8.  
          9. if(isset($_GET['p'])){
          10. $str = (int)$_GET['p'];
          11. }
          12. else{
          13. $str = 0;
          14. }
          15.  
          16. //нужный кусок текста
          17. $txt = $arr[$str];
          18.  
          19. print $txt;
          20.  
          21. $i=0;
          22. while($i < $rec){
          23. echo "<a href=viewpost.php?p=$i>" . ($i+1) . "</a>";
          24. $i++;
          25. }

          Ответить

          1. Гость 2013/10/11

            спасибо за ответ.
            если можно еще один вопрос.
            текст находится в бд. а книга не одна с разными по количеству символов. как это можно осуществить?

            Ответить

            1. Админ 2013/10/12

              Ну дергать через mysql_query текст книги из БД. Если книг не много и есть желание - понатыкать в них

              1. <!--break-->
              и всё.

              Ответить

  5. Гость 2013/06/07

    спасибо !!! Всё супер

    Ответить

  6. Гость 2012/07/20

    Я думаю в $_GET['str'] str нужно заменить на 'p'

    Ответить

Ваш комментарий успешно создан

Ваш комментарий

  • Для выделения кода оберните его в тэги <code> и </code>
  • Отметьте стопку книг