|
|
|
| Собственно вопрос: как сделать постраничный вывод вида domain.com/page/?cid=1&page=2.
Пример: страница с категориями, в категориях элементы, их и надо разбить постранично (например в категории на странице будет по 10 элементов).
Функции:
function DisplayRows($tbl, $db, $page, $page, $p_records, $cid)
{
if(!empty($cid))
{
$db->query("SELECT * FROM $tbl WHERE published=1 AND cid = $cid");
}
else
{
$db->query("SELECT * FROM $tbl WHERE published=1");
}
$result = $db->FetchArray();
$all_lines = $db->numRows($result);
if (!isset($page) or empty($page) or $page<=0) $page=1;
else $page=(int)$page;
$page_for_query = $page-1;
$page_for_query2 = $page+1;
$p_start = $page_for_query * $p_records;
return array($all_lines, $page, $page_for_query, $page_for_query2, $p_start);
}
function DisplayNav($all_lines, $p_records, $page, $cid)
{
$count_pages = ceil($all_lines / $p_records);
if ($_GET['page'] > $count_pages)
{
echo '<div align="center"><h1>Ошибка 404. Нет такой страницы!</h1></div>';
echo '<br /><br />';
echo '<div align="center"><a href="javascript:history.go(-1)">Вернуться назад</a></div>';
}
else
{
if ($count_pages>1)
{
$cid = (int)$_GET['cid'];
echo ' <b>Страницы</b> ';
for ($i=1; $i<=$count_pages; $i++)
{
if($page==$i and $i!=1)
{
echo ' <span class="navtext"> [ '.$i.' ] </span> ';
}
elseif ($page==$i and $i==1)
{
echo ' <span class="navtext"> [ 1 ] </span> ';
}
elseif($i==1 and $page!=$i)
{
echo ' <a class="navlink" href="?cid='.$cid.'&page='.$i.'"> '.$i.' </a> ';
}
elseif($i!=1 and $page!=$i)
{
echo ' <a class="navlink" href="?cid='.$cid.'&page='.$i.'"> '.$i.' </a> ';
}
}
}
}
}
|
И сам запрос с выводом:
list($all_lines, $entry, $page_for_query, $page_for_query2, $p_start) = DisplayRows($tbl, $db, $entry, $page, $p_records, $cid);
if(isset($_GET['cid']) and !empty($_GET['cid']))
{
$cid = (int)$_GET['cid'];
CidError($tbl, $db);
include '../theme/header.inc.php';
echo '<p>';
$db->query("SELECT id, cid, name, url, description FROM $tbl2 WHERE cid=$cid ORDER by name ASC");
while ($row = $db->fetchAssoc())
{
echo '<img src="'.SITE_URL.'/images/point_o.gif"> <a href="http://'.$row['url'].'" target="blank">'.$row['name'].'</a><br />';
echo '<p align="justify">'.$row['description'].'</p>';
echo '<hr>';
}
echo '</p>';
DisplayNav($all_lines, $p_records, $entry, $page);
}
|
У меня в адресной строке все верно прописано, но переход не происходит на следующую страницу. Почему и в чем ошибка? | |
|
|
|
|
|
|
|
для: Clocker
(04.10.2006 в 01:14)
| | чего-то много всего написано... короче, вот рабочий код, смотри, что не учел (он без функций)
<?php
$db_location = "localhost";
$db_name = "bd_name";
$db_user = "bd_user";
$db_pass = "pass";
$db_connect = @mysql_connect($db_location, $db_user, $db_pass);
if(!$db_connect)
{
echo '<html><body><head><title>Недоступен сервер БД.</title></head>
<div align="center" style="color:#363636; font-family: Arial; font-size:12px">
Невозможно корректное отображение сайта. Недоступен сервер БД.</div></body></html>';
exit;
}
if(!@mysql_select_db($db_name, $db_connect))
{
echo '<html><body><head><title>Недоступна БД.</title></head>
<div align="center" style="color:#363636; font-family: Arial; font-size:12px">
Невозможно корректное отображение сайта. Недоступна БД.</div></body></html>';
exit;
}
// Подсчитуем общее количество данных в БД
$quer = "SELECT count(*) FROM hits";
$res = mysql_query($quer);
$total = mysql_fetch_array($res);
$count = $total['count(*)'];
// Устанавливаем количество сообщений, которое будем выводить
// и количество страниц которое получится в итоге
$end = 30;
if($_GET['start'] == "") $_GET['start'] = 0;
if($_GET['start'] < 0 ) $_GET['start'] = 0;
$start = $_GET['start'];
if($_GET['page'] == "") $_GET['page'] = 1;
$page = $_GET['page'];
$dln = $count / $end;
$col = (int)$dln + 1;
// Выводим данные из бд
$query = "SELECT * FROM hits ORDER BY id_hit LIMIT ".$start.", ".$end;
$result = mysql_query($query);
if(!$result) echo "Error - ".mysql_error();
while($num = mysql_fetch_array($result))
{
$i++;
if($num['txt'] == "") $txt = "";
else
$txt = " - ".$num['txt'];
echo "<b>".$i."</b> ".$num['hits'].$txt."<br>";
}
echo '<br>$count ='.$count;
echo '<br>'.$col.'<br>';
// Делаем навигацию
for ($i = 0; $i < $col; $i++)
{
if($page == ($i+1))
{
$href = $page;
}
else
$href = "<A href=\"index.php?start=".($end * $i)."&page=".($i+1)."\">".($i+1)."</A>";
echo $href." ";
}
?>
|
| |
|
|
|
|
|
|
|
для: Lelik
(04.10.2006 в 01:31)
| | Благодарю, Lelik, но немного не то. Мне интересно где ошибка: либо в функции, либо в ее выводе... | |
|
|
|
|
|
|
|
для: Clocker
(04.10.2006 в 01:38)
| | ошибка в SQL запросе
$query = "SELECT * FROM hits ORDER BY id_hit LIMIT ".$start.", ".$end;
// это мой запрос, делай и у себя такой же, то есть с применением LIMIT-а.
|
у тебя нету выборки конкретных элементов из БД с такого-то по такой-то | |
|
|
|
|
|
|
|
для: Lelik
(04.10.2006 в 03:52)
| | Спасибо. Всю ночь тупо смотрел в функцию, а в запрос не додумался посмотреть :lol:
Еще раз спасибо. | |
|
|
|