Создание Постраничной Навигации

TYMON

Member
19.06.2010
11
0
#1
Вот кое-что написал, но чтото не работает, выводит каждую новость по 4 раза, а создает вторую страницу а там каждую новость по 2 раза. Всего новостей 6. Делаю чтобы было по 4 новости на странице (для демонстрации достаточно)

Исходный код
Код:
<?php
include ("parts/connect.php");
$base_data=mysql_query("SELECT * FROM statii", $base_connect);
$page_data=mysql_fetch_array($base_data); //массив данных
?>
<!doctype html>
<html>
<head>
<meta charset="windows_1251">
<title>Футбольные новости</title>
<link href="css/mainstylecss.css" rel="stylesheet" type="text/css">
</head>

<body>
<div id="outer_wrapper">
<!--Header!-->
<?php
include ("parts/header.php")
?>

<!--Menu-->
<?php
include ("parts/menu.php")
?>

<div id="container" >

<div id="main" align="center">
<?php
do
// Выводим новости
{

// Считаем общее количество новостей
$resultrows = mysql_query("SELECT `id` FROM `statii`");
$rows = mysql_num_rows($resultrows);

// Пишем количество выводимый новостей на страницу, в нашем случае - 10
$messages_per_page = 4;

// Условие: если запрос GET не существует или он не является числом, то присваеваем ему значение 0
if (!isset($_GET['rowstart']) || !preg_match("/^[0-9]+$/", $_GET['rowstart'])) 
{
$_GET['rowstart'] = 0;
}

// Выводим по 4 новости на страницу, где начальной точкой отсчета будет считаться запрос GET
$result = mysql_query("SELECT * FROM `statii` ORDER BY `id` DESC LIMIT ".$_GET['rowstart'].",".$messages_per_page);
while ($data = mysql_fetch_assoc($result))
{
//связываем с id материала
printf("<div id='blog'>
<table>
<tr >
<td colspan=5><a href='podrobnee.php?id=%s'>%s</a><br></td>
</tr>
<tr>
<td colspan=5> %s<br></td>
</tr>
<tr>
<td align=center>%s  &nbsp %s  &nbspПросмотров%s </td>
<td> <a href='podrobnee.php?id=%s'>Подробнее</a></td>
</tr>
</table>
<hr />
</div>", $page_data["id"], $page_data["title"], $page_data["introtext"],
$page_data["author"], $page_data["date_sozd"], $page_data["views"], $page_data["id"]);

}

// Условие: если общее количество страниц больше, чем нам надо вывести (т.е. больше 10), то выводим список страниц
if ($rows > $messages_per_page)
{
echo makepagenav($_GET['rowstart'], $messages_per_page, $rows, 3, $PHP_SELF."?&");
}

}
while ($page_data=mysql_fetch_array($base_data));  
?>

</div> <!--Main close!-->

<!--Lastnews-->
<?php
include ("parts/lastnews.php")
?>


<!--Aside-->
<?php
include ("parts/aside.php")
?>



</div>
<!--Container close!-->

<!--Footer-->
<?php
include ("parts/footer.php")
?>

</div> <!--Out_Wrapper close!-->
</body>
</html>

А вот файл PHP

PHP:
 <?
// Функция постраничной навигации
function makepagenav($start, $count, $total, $range = 0, $link) 
{
if ($link == "") { $link = $PHP_SELF."?"; }
$pg_cnt = ceil($total / $count);
if ($pg_cnt <= 1) { return ""; }
$idx_back = $start - $count;
$idx_next = $start + $count;
$cur_page = ceil(($start + 1) / $count);
$res = "Страница ".$cur_page." из ".$pg_cnt.": ";
if($idx_back >= 0) {
if($cur_page > ($range + 1)) {
$res .= "<a href='".$link."rowstart=0'>1</a>...";
}
}
$idx_fst = max($cur_page - $range, 1);
$idx_lst = min($cur_page + $range, $pg_cnt);
if ($range == 0) {
$idx_fst = 1;
$idx_lst = $pg_cnt;
}
for ($i = $idx_fst; $i <= $idx_lst; $i++) {
$offset_page = ($i - 1) * $count;
if ($i == $cur_page) {
$res .= "<span><strong>".$i."</strong></span>";
} else {
$res .= "<a href='".$link."rowstart=".$offset_page."'>".$i."</a>";
}
}
if ($idx_next < $total) {
if ($cur_page < ($pg_cnt - $range)) {
$res .= "...<a href='".$link."rowstart=".($pg_cnt - 1) * $count."'>".$pg_cnt."</a>";
}
}	
return "<div>".$res."</div>";
}


//соеденение с БД
$base_location="localhost";
$base_name="football";
$base_user="root";
$base_password="";

$base_connect = mysql_connect ($base_location, $base_user, $base_password);
mysql_select_db ($base_name, $base_connect);
mysql_query ("set character_set_client='cp1251'"); //кодировка, в которой данные будут поступать от клиента
mysql_query ("set character_set_results='cp1251'"); //кодировка, в которой будет выбран результат
mysql_query ("set collation_connection='cp1251_general_ci'");
if (!$base_connect)
{
echo("<p>Ошибка!!! Невозможно подключиться к базе данных!!!</p>");
exit();
}
?>
 

sinkopa

Well-known member
17.06.2009
344
4
#2
Вот кое-что написал, но чтото не работает, выводит каждую новость по 4 раза, а создает вторую страницу а там каждую новость по 2 раза. Всего новостей 6. Делаю чтобы было по 4 новости на странице (для демонстрации достаточно)
Исходный код
...
Вот это что за бред у Вас? (помечено //?????????????)
Код:
$base_data=mysql_query("SELECT * FROM statii", $base_connect); //??????????????
$page_data=mysql_fetch_array($base_data); //массив данных //??????????????????
//...........
do
// Выводим новости
{
//........... тут вроде (на первый взгляд), нормальный себе такой код
//........... подозреваю правда, что в printf Вы $page_data на $data забыли заменить...

}
while ($page_data=mysql_fetch_array($base_data)); //??????????????
Сколько раз у Вас цикл do ... while крутится? :)
Какое вообще назначение у данного кода?