|
|
|
| Здравствуйте!
Расскажите пожалуйста, как организовать вывод содержимого БД MySQL постранично с помощью РНР. Выводится должны номера страниц (т.е. 1,2,...,n), а не ссылки на страницы типа "Предыдущая" и "Следующая". | |
|
|
|
|
|
|
|
для: vovan1984
(26.07.2006 в 15:31)
| | Смотри статью Постраничная Навигация по адресу: http://www.softtime.ru/info/articlephp.php?id_article=33 | |
|
|
|
|
|
|
|
для: Alex Kraft
(26.07.2006 в 15:37)
| | В примере ошибка.
В исходном примере так:
$result = mysql_query("SELECT COUNT(*) FROM post");
$posts = mysql_fetch_row($result);
// Находим общее число страниц
$total = intval(($posts - 1) / $num) + 1;
Но тогда возникает ошибка типа неизвестная функция.
Если переменной $total присвоить значение
$total=3;
то все работает.
Как передать в $total значение $posts? | |
|
|
|
|
|
|
|
для: vovan1984
(26.07.2006 в 19:11)
| | Какая неизвестная функция?
Встроенная функция intval возвращает integer(целочисленное) значение в данном случае выражения (($posts - 1) / $num).
Переменная total содержит общее число страниц, определяемое с помощью выражения intval(($posts - 1) / $num) + 1.
Статья та полностью рабочая. Я сам сделал не мало работ с помощью этой статьи. Напишите подробнее о ошибке и лучше приведите полностью ваш код. | |
|
|
|
|
|
|
|
для: Alex Kraft
(26.07.2006 в 19:51)
| | Мой скрипт мало чем отличается от приведенного в примере.
Просто когда я пытаюсь его выполнить, возникает ошибка Fatal error: Unsupported operand types на 14 строке.
<?php
// Устанавливаем соединение с базой данных
include "config.php";
// Переменная хранит число сообщений выводимых на станице
$num = 5;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM nal");
$posts = mysql_fetch_row($result);
//$posts = mysql_query($posts);
// Находим общее число страниц
//Здесь возникает ошибка
$total = intval(($posts - 1) / $num) + 1;
//Если просто присвоить переменной $total значение,
//все работает
//$total = 3;
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT * FROM nal LIMIT $start, $num");
// В цикле переносим результаты запроса в массив $postrow
while ( $postrow[] = mysql_fetch_array($result))
echo "<table>";
for($i = 0; $i < $num; $i++)
{
echo "<tr> <td>".$postrow[$i]['id_nal']."</td>
<td>".$postrow[$i]['date']."</td></tr>
<tr><td colspan=\"2\">".$postrow[$i]['steelkm1']."</td></tr>";
}
echo "</table>";
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href= ./nal_query?page=1><<</a>
<a href= ./nal_query?page='. ($page - 1) .'><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= ./nal_query?page='. ($page + 1) .'>></a>
<a href= ./nal_query?page=' .$total. '>>></a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href= ./nal_query?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= ./nal_query?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= ./nal_query?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= ./nal_query?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
?> | |
|
|
|
|
|
|
|
для: vovan1984
(26.07.2006 в 20:06)
| | Попробуйте переписать так:
$result = mysql_query("SELECT * FROM nal");
$posts = mysql_num_rows($result); | |
|
|
|
|