|
|
|
| Объясните мне как чайнику, как сделать постраничный вывод
Например результат поиска из базы, и если найдено слишком много результатов, то лучше не скроллингом мотать, а разбить на страницы, как это вообще делается, если можно с примером.
Спасибо!!!!!!!!! | |
|
|
|
|
|
|
|
|
для: lilu
(28.09.2006 в 09:38)
| | я с талкивался с этой проблемой, можно выводить в цикле , а можно указывать в самом запросе сколько нужно выводить записейю я делал под сибейс:
select top $pagesize start at $low from ...
где $low тот указатель с которого закончили выводить , а $pagesize - количество выводимых записей
в цикле можно выводить тоже указывая на последнюю запись
а вот для отображения ссылок на страницы нужно писать второй скрипт
пример можно посмотреть на staff-ua.com
ели очень нужно, могу помочь пиши на support@sigma.org.ua | |
|
|
|
|
|
|
|
|
для: cheops
(28.09.2006 в 13:11)
| | http://www.softtime.ru/info/articlephp.php?id_article=33
Это всё очень интересно, вот я взяла за основу этот пример, но у меня выводится первая страница с правильным кол-вом записей и ссылки на другие страницы есть но при их открытии ничего не открывается, почему-то......
перед выводом страниц выводит общее кол-во строк в таблице, кол-во строк на странице, тек. номер страницы, кол-во страниц - всё верно..... посмотрите код пожалуйста, что -то я упустила и что...
<?
$num = 5; //кол-во объявлений на странице
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM full");
$posts = mysql_fetch_row($result);
echo $posts[0];
// Находим общее число страниц
$total = intval(($posts[0] - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start = $page * $num - $num;
echo "page=".$page."<br>num=".$num."<br>total=".$total;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT * FROM full LIMIT $start, $num");
// В цикле переносим результаты запроса в массив $postrow
while ( $postrow[] = mysql_fetch_array($result))
//////////////////////
echo "<table>";
for($i = 0; $i < $num; $i++)
{
echo "<tr> <td>".$postrow[$i]['data']."</td></tr>
<tr><td>".$postrow[$i]['text']."</td></tr>
<tr><td colspan=\"2\">".$postrow[$i]['kontact']."</td></tr>
<tr><td>-------------------</td></tr>";
}
echo "</table>";
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href= ./page?page=1><<</a>
<a href= ./page?page='. ($page - 1) .'><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= ./page?page='. ($page + 1) .'>></a>
<a href= ./page?page=' .$total. '>>></a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href= ./page?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= ./page?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= ./page?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= ./page?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
?>
|
| |
|
|
|
|
|
|
|
для: lilu
(28.09.2006 в 16:57)
| | Приведите дамп таблицы full (структуру таблицы и пару записей), если не сложно, чтобы можно было воспроизвести ситуацию? | |
|
|
|
|
|
|
|
для: cheops
(28.09.2006 в 22:46)
| | Да конечно...
id_full (int 2)
text varchar(250)
kontact varchar(80)
data date
пример:
1 рпарпарпа 4575421 2006-29-09
2 оооооорпрпорп ропорп орпрпо 854128787 2006-28-09 и т.д.
всего таких записей аж 46
Перед выводом первых пяти сообщений на странице, выводится сколько строк в таблице =46, сколько на каждой странице должно выводится=5, и всего страниц=10 всё верно, вот только первая страгица открывается....внизу написано 1 2 3 > >> и нажимая на любую циферку или стрелочку - ничего..... | |
|
|
|
|
|
|
|
для: lilu
(29.09.2006 в 09:50)
| | и нажимая на любую циферку или стрелочку - ничего.....
==============================================
а что вы видите в строке состояния, когда подводите курсор к ссылке? | |
|
|
|
|
|
|
|
для: lilu
(29.09.2006 в 09:50)
| | Вам вот такой вариант не подойдёт?
<?php
// Элемент постраничной навигация
if(empty($_GET['page'])) $page = 1;
else $page = $_GET['page'];
// Число ссылок в постраничной навигации
$page_link = 3;
// Число позиций на странице
$pnumber = 2;
// Постраничная навигация
$first = ($page - 1)*$pnumber;
// Определяем общее число уже созданных почтовых ящиков
$query = "SELECT COUNT(*)
FROM full";
$num = mysql_query($query);
if(!$num) exit("Ошибка при подсчёте количества записей");
// Ввыводим ссылки на другие страницы
$total = mysql_result($num,0);
$query = "SELECT * FROM full
LIMIT $first, $pnumber";
$acb = mysql_query($query);
if(!$acb) exit("Ошибка при обращении к таблице full");
if(mysql_num_rows($acb) > 0)
{
echo "<table>";
while($postrow = mysql_fetch_array($acb))
{
echo "<tr> <td>".$postrow['data']."</td></tr>
<tr><td>".$postrow['text']."</td></tr>
<tr><td colspan=\"2\">".$postrow['kontact']."</td></tr>
<tr><td>-------------------</td></tr>";
}
echo "</table><br>";
// Постраничная навигация
pager($page, $total, $pnumber, $page_link, "");
}
function pager($page, $total, $pnumber, $page_link, $parameters)
{
// Вычисляем число страниц в системе
$number = (int)($total/$pnumber);
if((float)($total/$pnumber) - $number != 0) $number++;
// Проверяем есть ли ссылки слева
if($page - $page_link > 1)
{
echo "<a class=menu href=$_SERVER[PHP_SELF]?page=1{$parameters}>[1-$pnumber]</a> ... ";
// Есть
for($i = $page - $page_link; $i<$page; $i++)
{
echo " <a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
}
else
{
// Нет
for($i = 1; $i<$page; $i++)
{
echo " <a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
}
// Проверяем есть ли ссылки справа
if($page + $page_link < $number)
{
// Есть
for($i = $page; $i<=$page + $page_link; $i++)
{
if($page == $i)
echo " <em class=menu>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</em> ";
else
echo " <a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}> <nobr>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
echo " ... <a class=menu href=$_SERVER[PHP_SELF]?page=$number{$parameters}>[".(($number - 1)*$pnumber + 1)."-$total]</a> ";
}
else
{
// Нет
for($i = $page; $i<=$number; $i++)
{
if($number == $i)
{
if($page == $i)
echo " <em class=menu>[".(($i - 1)*$pnumber + 1)."-$total]</em> ";
else
echo " <a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i - 1)*$pnumber + 1)."-$total]</a> ";
}
else
{
if($page == $i)
echo " <em class=menu>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</em> ";
else
echo " <a class=menu href=$_SERVER[PHP_SELF]?page=$i{$parameters}>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
}
}
echo "<br><br>";
}
?>
|
| |
|
|
|