Как сделать пагинацию на php?

Подскажите, пожалуйста, как сделать на PHP постраничную навигацию (или как ее еще называют пагинацию)? Если можно, подскажите, алгоритм действий.

$limit = 10; // Количество записей на странице


Запрос на получение числа записей получаю запросом MySQL:

SELECT COUNT(id) FROM users


Количество всех страниц считаю по формуле:

Количество всех записей в таблице / На количество записей на странице
    $total = $result/$limit;


А какие мои дальнейшие действия? Заранее благодарен всем за подробные ответы!

1 ответов


Очень упрощенно и без необходимых проверок:
Дальше выводите пользователей постранично:
1. Определяете текущую страницу.

$page = $_GET['page']-1;2. Текущую страницу-1 умножаете на ваш limit
$start = $page*$limit;3. Так вы получите стартовую позицию
4. Дальше делаете выборку
SELECT * FROM users LIMIT $start, $limit*выбираем $limit записей начиная с позиции $start

Можете почитать еще тут: http://www.phpfaq.ru/paginator .

Почти получилось, но есть одна проблема:

Пагинация выводится, как положено, но у меня на каждой странице выводятся только первые пять записей(( и я не могу найти в чем ошибка, может Вы сможете мне помочь, очень буду Вам благодарен.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="uft-8">
    <title>Список зарегистрированных пользователей</title>
    <link href="css/admstyle.css" rel="stylesheet" type="text/css">
    <!--[if (gte IE 5.5)&(lte IE 8)]>
      <script type="text/javascript" src="js/DOMAssistantCompressed-2.8.1.js"></script>
      <script type="text/javascript" src="js/selectivizr-min.js"></script>
    <![endif]-->
  </head>
  <body>
    <?php
      //инициализирум механизм сесссий
      session_start();
      echo (session_id()); #отладка
      echo("<br>");
     
      //Присваиваем константы
      define(DB_NAME, "askdev");
      define(DB_USER, "root");
      define(DB_PASS, "root");
      define(DB_HOST, "localhost");
     
      $conn = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die(mysql_error());
      mysql_select_db(DB_NAME) or die(mysql_error());
//Вывод пагинации
     
      // количество записей, выводимых на странице
      $per_page=5;
     
      // получаем номер страницы
      if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
     
      // вычисляем первый оператор для LIMIT
      $start = abs($page*$per_page);
     
      // составляем запрос и выводим записи
      // переменную $start используем, как нумератор записей.
      echo("\t<h1 align=\"center\">Список зарегистрированных пользователей</h1>\n");
      echo("\t<table>\n");
      echo("\t\t<tr>\n\t\t<th>№</th><th>Логин</th><th>Email</th><th>Хэш Пароля</th>\n\t\t</tr>");
     
      $sql = "SELECT id, username, email, password FROM users LIMIT $start,$per_page";
      $result = mysql_unbuffered_query($sql) or die(mysql_error());
      while($row = mysql_fetch_array($result))
      {
        echo("\t\t<tr>\n");
        echo("\t\t<td>\n".$row['id']."</td><td>\n".$row['username']."</td><td>\n".$row['email']."</td><td>\n".$row['password']."</td>\n");
        echo("\t\t</tr>\n");
      }
     
      echo("\t</table>\n<br>\n");
     
      // дальше выводим ссылки на страницы:
      $query = "SELECT count(*) FROM users";
      $result = mysql_unbuffered_query($query) or die(mysql_error());
      $row = mysql_fetch_row($result);
      $total_rows = $row[0];
     
      $num_pages = ceil($total_rows/$per_page);
     
      for($i=1;$i<=$num_pages;$i++)
      {
        echo '<a href="'.$_SERVER['PHP_SELF'].'?num='.$i*$per_page.'">['.$i."]</a>\n";
      }
      //-------------------------------------------------------------------------------
      mysql_close($conn);


    ?>
  </body>
</html>