PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 2
Shoorman Отправлено: 22 Апреля, 2010 - 02:11:34 • Тема: постраничная навигация на php • Форум: Обсуждение статей

Ответов: 11
Просмотров: 10313
ALEN пишет:
В бщем вопрос такой, Вы умеете например методом GET получить номер текущей страницы? Потом сколько сообщений должно быть на странице определить? А следом посчитать количество страниц в базе?

Если все это можете то проблем не возникнет. Если не знаете, то конкретно разбирайте поставленые вопросы выше.

Не хочу давать вам готовый свой класс, вам стоит самому научится.

Сама картинка такая:
Когда у нас есть количество страниц в базе и мы хотим например выводить 10 сообщений на страницу, то мы просто количество сообщений делим на 10 и округляем в большую сторону. Получаем так число страниц в навигации.

И далее просто пользуемся оператором for и выводим необходимые ссылки.

Из базы MySQL выведем страницы с помощью команды SELECT , но чтоб нам вывести необходимые собщения для определенной страницы, то нам необходимо использовать LIMIT , а в его параметрах указывать первое число, как: (текущая страница умноженная на количество выводимых страниц и отнимаем количество выводимых страниц (например: текущая страница 2 а выводим по 10 новостей, то получается - ((2*10)-10))=10) - т.е. мы указываем что выводить нужно с 10 позиции, а второй параметр LIMIT - указываем сколько строк выводить т.е. в данном случае 10 .


Так я и использую все те приёмы, о которых вы пишете: get, for, select, limit. И формула для limit такая же. Проблема, видимо, где-то в использовании именно get. Попробовал покрутить так и эдак, перечитал её использование, но никак не получается...

Попробовал даже другие скрипты из инета использовать - большинство основано на таком же принципе. Но ничего не получается. Одинаковая ошибка...
Shoorman Отправлено: 21 Апреля, 2010 - 02:04:10 • Тема: постраничная навигация на php • Форум: Обсуждение статей

Ответов: 11
Просмотров: 10313
Воспользовался советами из статьи: http://www.php.su/articles/?cat=...les&page=062

Просто скопировал оттуда скрипты, подставил свои данные...
Пришлось исправить некоторые ошибки, которые там были - нашёл на этом же форуме.

Но всё равно не работает. Информацию из базы выводит и даже меню внизу создаёт, но когда нажимаю на вторую, третью... страницы, то вылезает ошибка 404.

Помогите разобраться, плз.

PHP:
скопировать код в буфер обмена
  1. // Переменная хранит число сообщений выводимых на станице
  2. $num = 25;
  3. // Извлекаем из URL текущую страницу
  4. $page = $_GET['page'];
  5. // Определяем общее число сообщений в базе данных
  6. $result = mysql_query("SELECT * FROM table WHERE confirm = ''");
  7. $posts = mysql_num_rows($result);
  8. // Находим общее число страниц
  9. $total = intval(($posts - 1) / $num) + 1;
  10. // Определяем начало сообщений для текущей страницы
  11. $page = intval($page);
  12. // Если значение $page меньше единицы или отрицательно
  13. // переходим на первую страницу
  14. // А если слишком большое, то переходим на последнюю
  15. if(empty($page) or $page < 0) $page = 1;
  16.   if($page > $total) $page = $total;
  17. // Вычисляем начиная к какого номера
  18. // следует выводить сообщения
  19. $start = $page * $num - $num;
  20. // Выбираем $num сообщений начиная с номера $start
  21. $result = mysql_query("SELECT * FROM table WHERE confirm = '' LIMIT $start, $num");
  22. // В цикле переносим результаты запроса в массив $postrow
  23. while ( $postrow[] = mysql_fetch_array($result))
  24. ?>
  25.  
  26. <?PHP
  27.  
  28. for($i = 0; $i < $num; $i++)
  29. {
  30.  echo "<tr>
  31.         <td>".$postrow[$i]['name']."</td>
  32.         <td>".$postrow[$i]['time']."</td></tr>
  33.       <tr>".$postrow[$i]['name']."</td></tr>";  
  34. }
  35. ?>
  36.  
  37. <?PHP
  38. // Проверяем нужны ли стрелки назад
  39. if ($page != 1) $pervpage = '<a href= ./page?page=1><<</a>
  40.                               <a href= ./page?page='. ($page - 1) .'><</a> ';
  41. // Проверяем нужны ли стрелки вперед
  42. if ($page != $total) $nextpage = ' <a href= ./page?page='. ($page + 1) .'>></a>
  43.                                   <a href= ./page?page=' .$total. '>>></a>';
  44.  
  45. // Находим две ближайшие станицы с обоих краев, если они есть
  46. if($page - 2 > 0) $page2left = ' <a href= ./page?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
  47. if($page - 1 > 0) $page1left = '<a href= ./page?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
  48. if($page + 2 <= $total) $page2right = ' | <a href= ./page?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
  49. if($page + 1 <= $total) $page1right = ' | <a href= ./page?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
  50.  
  51. // Вывод меню
  52. echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
  53.       ?>


Заранее спасибо за ответы и помощь.

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB