1

Тема: Постраничная навигация

Необходимо осуществить постраничную навигацию, понять не могу как. Помагите пожалуйста, вот код-


<?php
include ("blocks/bd.php");/*Соединяемся с базой данных*/
$result = mysql_query ("SELECT title, meta_d, meta_k, text FROM settigs WHERE page='poz_mat_audio'",$db);
$myrow = mysql_fetch_array ($result);
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="description" content="<?php echo $myrow ['meta_d']; ?> ">
<meta name="keywords" content="<?php echo $myrow ['meta_k']; ?> ">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title><?php echo $myrow ['title']; ?></title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body onLoad="MM_preloadImages('img/knopa1-2.png','img/knopa2-2.png','img/knopa3-2.png','img/knopa4-2.png','img/knopa5-2.png','img/knopa6-2.png','img/knopa_video1-2.png','img/knopa_knigi1-2.png','img/knopa_audio1-2.png')">

<div id="apDiv1">
<?php include ("blocks/meny.php");?> 
</div>
<div class="layer"  id="apDiv12">
<div id="apDiv19">

<p class="stil_8"><?php echo $myrow ['title'];?></p>
<p class="ctil_7"><?php echo $myrow ['text']; ?></p>
</div>
<p> </p>
<p> </p>

<p> </p>
<p>
  <?php
$result1 = mysql_query ("SELECT * FROM `fil` ORDER BY `id` DESC",$db);
$myrow1 = mysql_fetch_array ($result1);
do
{

printf ("</p>
         <table border='0'>
         <tr>
         <td ><img align='left' src='%s'></td>
         <td ><strong class ='stil_11'>%s</strong>      %s</td>
         </tr>
         <tr>
         <td> </td>
         <td><div align='right' class='text_2'><a href='view_audi.php?id=%s'>Скачать</a></div></td>
         </tr>
         </table>", $myrow1["img"],$myrow1["title"],$myrow1["description"],$myrow1["id"]);   //необходимо вывести по пять сообщений на страницу //
}
while ($myrow1 = mysql_fetch_array ($result1));
?>
</div>
<?php include ("blocks/pozn_mat_niz.php");?>
</body>
</html>

2

Re: Постраничная навигация

Для страниц используется GET параметр page в URL-е.

<?php

$items_per_page = 5; // Количество элементов на странице

$result_count = mysql_query('SELECT COUNT(*) AS `count` FROM `fil`', $db);
$aCount = mysql_fetch_assoc($result_count);

$iPages = ceil($aCount['count'] / $items_per_page);
$page = (isset($_GET['page']) && $_GET['page'] <= $aCount['count']) ? $_GET['page'] : 1;
$iOffsetLimit = ($page - 1) * $items_per_page;
$iStart = ($page > 5) ? $page - 4 : 1;
if ($iPages > 1) {
    echo '<div>Страницы: ';
    for ($i = $iStart; $i <= $iPages; $i++) {
        if ($page > 4 && $i == $page - 4) {
            echo '<a href="?page=' . $i . '">...</a>' . "\n";
            continue;
        }
        if ($i > $page + 3) {
            echo '<a href="?page=' . $i . '">...</a>' . "\n";
            break;
        }
        if ($i == $page) {
            echo ' <span style="font-weight: bold;"> ' . $i . ' </span> ' . "\n";
        } else {
            echo '<a href="?page=' . $i . '">' . $i . '</a>' . "\n";
        }
       }
    echo '</div>' . "\n";
}

$result1 = mysql_query('SELECT * FROM `fil` ORDER BY `id` DESC
                        LIMIT ' . $iOffsetLimit . ',' . $items_per_page, $db);

while ($myrow1 = mysql_fetch_array ($result1)) {

    printf ("</p>
         <table border='0'>
         <tr>
         <td ><img align='left' src='%s'></td>
         <td ><strong class ='stil_11'>%s</strong>      %s</td>
         </tr>
         <tr>
         <td> </td>
         <td><div align='right' class='text_2'><a href='view_audi.php?id=%s'>Скачать</a></div></td>
         </tr>
         </table>", $myrow1["img"],$myrow1["title"],$myrow1["description"],$myrow1["id"]);   //необходимо вывести по пять сообщений на страницу //
}

?>

3

Re: Постраничная навигация

Огромное спасибо, Вы как всегда меня выручили.

4 (изменено: Hanut, 2009-09-02 17:29:57)

Re: Постраничная навигация

Hanut  - пожалуйста, помогите! Пытался по вашему совету сделать постраничную навигацию - умом что - то не пойму, а тупо скопировать не выходит. Если не трудно - подправьте код:

<? include  ("blocks/bd.php");
if (isset($_GET['cat'])) {$cat = $_GET['cat']; }
if (!isset($cat)) {$cat = 1;}

$result = mysql_query ("SELECT * FROM categories WHERE id='$cat'",$db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору pervoserv@mail.ru<br> <strong>Код ошибки:</strong></p>"
;
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)

{
$myrow = mysql_fetch_array ($result);
}

else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title><? echo "Заметки категории - {$myrow['title']}"; ?></title>
<link href="style.css" rel="stylesheet" type="text/css" />
<meta name="description" content="<? echo $myrow["meta_d"]; ?>" />
<meta name="keywords" content="<? echo $myrow["meta_k"]; ?>" />

<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
</head>

<body>
<table width="930" border="0" align="center" bgcolor="#ffffff">
<? include  ("blocks/header.php");?>
<? $n=0; include  ("blocks/nav.php");?>
  <tr>
    <td><table width="100%" border="0">
      <tr>
<? include  ("blocks/left_td.php");?>
        <td valign="top" >
<?
    echo $myrow["text"];

$items_per_page = 5; // Количество элементов на странице

$result_count = mysql_query('SELECT COUNT(*) AS `count` FROM `data` WHERE `cat` = "' . addslashes($cat) . '"', $db);
$aCount = mysql_fetch_assoc($result_count);

$iPages = ceil($aCount['count'] / $items_per_page);
$page = (isset($_GET['page']) && $_GET['page'] <= $aCount['count']) ? $_GET['page'] : 1;
$iOffsetLimit = ($page - 1) * $items_per_page;
$iStart = ($page > 5) ? $page - 4 : 1;
if ($iPages > 1) {
    echo '<div>Страницы: ';
    for ($i = $iStart; $i <= $iPages; $i++) {
        if ($page > 4 && $i == $page - 4) {
            echo '<a href="?cat=' . urlencode($cat) . '&page=' . $i . '">...</a>' . "\n";
            continue;
        }
        if ($i > $page + 3) {
            echo '<a href="?cat=' . urlencode($cat) . '&page=' . $i . '">...</a>' . "\n";
            break;
        }
        if ($i == $page) {
            echo ' <span style="font-weight: bold;"> ' . $i . ' </span> ' . "\n";
        } else {
            echo '<a href="?cat=' . urlencode($cat) . '&page=' . $i . '">' . $i . '</a>' . "\n";
        }
       }
    echo '</div>' . "\n";
}

$result = mysql_query('SELECT * FROM `data` WHERE `cat` = "' . addslashes($cat) . '" ORDER BY `date` DESC
                        LIMIT ' . $iOffsetLimit . ',' . $items_per_page, $db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору pervoserv@mail.ru<br> <strong>Код ошибки:</strong></p>"
;
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)

{

$myrow = mysql_fetch_array ($result);

do
{
printf ("<table align='center' class='post'>
<tr>
<td colspan=2 class='post_title'>
<p class='post_name'><img class='mini' align='left' src='%s'>%s</p>
<p class='post_adds'>Дата добавления: %s</p>
<p class='post_adds'>Автор: %s</p></td>
</tr>
<tr>
<td colspan=2>%s </td></tr><tr><td ><p class='post_view'> Просмотров: %s</p></td><td align='center' ><a href='view_post.php?id=%s'>Читать полностью</a></td>
</tr>
</table><br><br>",$myrow["mini_img"], $myrow["title"],$myrow["date"],$myrow["author"],$myrow["description"],$myrow["view"], $myrow["id"]);
}
while ($myrow = mysql_fetch_array($result));


}

else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}

       
       
        ?></td>
<? include  ("blocks/right_td.php");?>
      </tr>
    </table></td>
  </tr>
<? include  ("blocks/footer.php");?>
</table>
</body>
</html>

Поправил код. Пробуйте.

5

Re: Постраничная навигация

Hanut  Я конечно извиняюсь но после правки кода он ругается
---Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource---- 
и ссылается на строку с: 
---$aCount = mysql_fetch_assoc($result_count); ---
Может он в базе не видит count  исходя из предыдущей строки
--$result_count = mysql_query('SELECT COUNT(*) AS `count` FROM `data WHERE `cat` = "' . addslashes($cat) . '"', $db);----
Это я так предполагаю со своего уровня "незнания PHP".  Помогите до конца уж.

6

Re: Постраничная навигация

Покопался в теории Моё предположение глупое (писал сгоряча), но проблема осталась -  код не для начинающих sad

7

Re: Постраничная навигация

Подправил одинарную кавычку в  data:
--$result_count = mysql_query('SELECT COUNT(*) AS `count` FROM `data WHERE `cat` = "' . addslashes($cat) . '"', $db);----
Теперь не ругается но на вторую страницу не переключается  ??

8

Re: Постраничная навигация

posergey
Ошибку с кавычкой вы правильно нашли, извиняюсь, не заметил. Еще один мой недосмотр в GET параметрах - они не разделены амперсандом.

Поправил код.

9

Re: Постраничная навигация

Hanut!  Огромное Вам спасибо!  Теперь у меня только хватило ума поставить вывод  -Страница 1 2 -  по центру  и  добавить это же  после новостей.  Все функционирует  Напишите краткий пример  с комментариями об этом чтобы Вас не доставали такие как я  -  многие скажут спасибо.
  Извиняюсь, а вообще есть эта же функция, но покрасивее, типа с CSS.  Киньте ссылку

10

Re: Постраничная навигация

posergey
CSS вы можете сами добавить, в листалке только теги div, a и span.

Комментировать каждую строку я не буду, но если есть какие-то конкретные вопросы по коду, то задавайте.

11

Re: Постраничная навигация

Я имел в виду, чтобы например не цифры были подчеркнутые, а изображения  (может gif?)

12

Re: Постраничная навигация

posergey
Изображения можно использовать, если известно максимальное количество страниц, иначе сложно нарисовать большое количество цифр, если это делать статически, а не скриптом, к примеру. Разумеется сделать можно как угодно, главное понимать что именно должно получиться в конечном итоге. Здесь лучше всего смотреть на примеры других сайтов и отталкиваться от них.

13

Re: Постраничная навигация

Спасибо не буду пока заморачиваться, а то как говорят - аппетит приходит во время еды. А знаний нет. Ещё раз спасибо за поддержку отечественного сайтостроительства.

14

Re: Постраничная навигация

у меня вопрос

как спустить мне Страницы:  1  2  3 это на самый низ страницы?

15

Re: Постраничная навигация

alan
Вместо вывода (echo) запишите генерируемые строки листалки в переменную и затем просто выведите ее в том месте, где надо.

16

Re: Постраничная навигация

alan сказал:

у меня вопрос

как спустить мне Страницы:  1  2  3 это на самый низ страницы?

Скопируйте код туда где нужно вывести результат

if ($iPages > 1) {
    echo '<div>Страницы: ';
    for ($i = $iStart; $i <= $iPages; $i++) {
        if ($page > 4 && $i == $page - 4) {
            echo '<a href="?page=' . $i . '">...</a>' . "\n";
            continue;
        }
        if ($i > $page + 3) {
            echo '<a href="?page=' . $i . '">...</a>' . "\n";
            break;
        }
        if ($i == $page) {
            echo ' <span style="font-weight: bold;"> ' . $i . ' </span> ' . "\n";
        } else {
            echo '<a href="?page=' . $i . '">' . $i . '</a>' . "\n";
        }
       }
    echo '</div>' . "\n";
}

17 (изменено: ramil31, 2010-08-16 15:16:32)

Re: Постраничная навигация

Здравствуйте нужна ваша помощь в реализации постраничной навигации

Вот код

<?php 
include ("blocks/bd.php"); /*Соединяемся с базой*/
$result = mysql_query("SELECT title,meta_d,meta_k,text FROM settings WHERE page='main'",$db);

if (!$result)
{
echo "<p>Ошибка при получения информации из базы данных. Напишите об этом администратору и код ошибки <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)

{
$myrow = mysql_fetch_array($result); 
}

else
{
echo "<p>База пуста информация еще не внесена.</p>";
exit();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="description" content="<?php echo $myrow['meta_d']; ?>">
<meta name="keywords" content="<?php echo $myrow['meta_k']; ?>">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title><?php echo $myrow['title']; ?></title>
<link href="style.css" rel="stylesheet" type="text/css">
<link rel="alternate" type="application/rss+xml" title="Lessons RSS" href="rss.php" />

</head>


<body>


<table width="900" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border">


<? include("blocks/header.php");   ?> 

  <tr>
    <td><table width="100%">
      <tr>
        <? include ("blocks/lefttd.php");  ?>    
        <td valign="top"> <p><?php         
        
// Постраничная навигация        
    $result77 = mysql_query("SELECT str FROM options", $db);
$myrow77 = mysql_fetch_array($result77);
$num = $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM main WHERE id='$id'");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
// Определяем начало сообщений для текущей страницы
$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 id,title,description,date,author,view, FROM main WHERE id='$id' ORDER BY id LIMIT $start, $num",$db);

$myrow = mysql_fetch_array ($result); ?>
<?

do {
        
printf ("<table align='center' class='lesson'>
         
         <tr>
         <td class='lesson_title'>
         <p><h3><a href='makal.php?id=%s'>%s</a></h3></p>
         <p class='lesson_adds'>?ст?? вакыты: %s</p>
         <p class='lesson_adds'>Авторы: %s</p></td>
         </tr>
         
         <tr>
         <td>%s<p class='post_view'>Укылган: %s</p> </td>
         </tr>
         
         </table><br>", $myrow["id"], $myrow["title"],$myrow["date"],$myrow["author"],$myrow["description"],$myrow["view"]);}

while ($myrow = mysql_fetch_array ($result));    
?>      
                   
          <p> </p>
        </td>
        <? include ("blocks/righttd.php");  ?>    
      </tr>
    </table></td>
  </tr>
 
<?  include ("blocks/footer.php");        ?>  
</table>
</body>
</html>

Проблема в том что

// Постраничная навигация        
    $result77 = mysql_query("SELECT str FROM options", $db);
$myrow77 = mysql_fetch_array($result77);
$num = $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM main WHERE id='$id'");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
// Определяем начало сообщений для текущей страницы
$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 id,title,description,date,author,view, FROM main  options  WHERE id='$id' ORDER BY id LIMIT $start, $num",$db);

$myrow = mysql_fetch_array ($result);

Вот пишет что в линии ошибка не вытаскивает инфу

$myrow = mysql_fetch_array ($result);

В таблице  options задано число 3.

По идеи должно вывести 3 новости и пока все, помогите найти ошибку  в коде что где не верно. Может здесь  WHERE id='$id' не верно подскажите.

18

Re: Постраничная навигация

ramil31
Попробуйте сформировать запрос и выполнить его в phpMyAdmin. Надо быть уверенным, что запрос работает.
[mono]SELECT id,title,description,date,author,view, FROM main  options  WHERE id='$id' ORDER BY id LIMIT $start, $num[/mono]

Если запрос работает, то проверьте все переменные: $id, $start, $num.

19

Re: Постраничная навигация

Здесь я еще не правильно написал
правильный это но все равно не работает.

$result = mysql_query("SELECT id,title,description,date,author,view, FROM main  WHERE id='$id' ORDER BY id LIMIT $start, $num",$db);




Без кода

// Постраничная навигация        
    $result77 = mysql_query("SELECT str FROM options", $db);
$myrow77 = mysql_fetch_array($result77);
$num = $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM main WHERE id='$id'");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
// Определяем начало сообщений для текущей страницы
$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 id,title,description,author,date,view FROM main ORDER BY id DESC LIMIT 0,4",$db);

так работает все правильно.

вставил код навигации изменил на

$result = mysql_query("SELECT id,title,description,date,author,view, FROM main  WHERE id='$id' ORDER BY id LIMIT $start, $num",$db);

вот здесь уже ошибка,

В коде постраничной навигации это соединения

// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM main WHERE id='$id'");
$temp = mysql_fetch_array($result00);

работает правильно

20

Re: Постраничная навигация

ramil31
Смотрите переменную $id. Прервите скрипт добавив строку:
[mono]exit($id);[/mono]

21

Re: Постраничная навигация

Не знаю что с ним делать но он есть может правильный, пожалуйста подправьте  код

22

Re: Постраничная навигация

ramil31
Если так выводит.
$result = mysql_query ("SELECT id,title,description,author,date,view FROM main ORDER BY id DESC LIMIT 0,4",$db);

Попробуйте так (укажите id в коде, без переменной):
$result = mysql_query ("SELECT id,title,description,author,date,view FROM main WHERE `id` = 1 ORDER BY id DESC LIMIT 0,4",$db);

Если работать будет нормально, то проверяйте переменные $id, $start, $num.

23 (изменено: ramil31, 2010-08-17 15:07:56)

Re: Постраничная навигация

так не сработало...

попробовал так

$result = mysql_query ("SELECT id,title,description,author,date,view FROM main WHERE id='$id' ORDER BY id DESC LIMIT 0,4",$db);

так тоже не сработал похоже что то не то в  WHERE id='$id'

24

Re: Постраничная навигация

ramil31
Пробуйте составить запрос, который вернет необходимые данные, иначе скрипт не заработает. Поэтому перейдите в phpMyAdmin и пробуйте модифицировать его с WHERE таким образом, как надо.
SELECT id,title,description,author,date,view FROM main WHERE id=1 ORDER BY id DESC LIMIT 0,4

Если не сможете разобраться, то покажите структуру таблицы main и пример данных. Укажите по какому принципу должна осуществляться выборка.

25 (изменено: ramil31, 2010-08-17 16:09:29)

Re: Постраничная навигация

dвот таблица main

CREATE TABLE IF NOT EXISTS `main` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE cp1251_bin NOT NULL,
  `meta_d` varchar(255) COLLATE cp1251_bin NOT NULL,
  `meta_k` varchar(255) COLLATE cp1251_bin NOT NULL,
  `date` date NOT NULL DEFAULT '0000-00-00',
  `description` text COLLATE cp1251_bin NOT NULL,
  `text` text COLLATE cp1251_bin NOT NULL,
  `author` varchar(255) COLLATE cp1251_bin NOT NULL,
  `view` int(7) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin AUTO_INCREMENT=54 ;

объясню как должно быть

по идеи когда

// Постраничная навигация       
    $result77 = mysql_query("SELECT str FROM options", $db);
$myrow77 = mysql_fetch_array($result77);
$num = $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM main WHERE id='$id'");
$temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
// Определяем начало сообщений для текущей страницы
$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 id,title,description,date,author,view, FROM main  WHERE id='$id' ORDER BY id LIMIT $start, $num",$db);


должно просто  вывести 3 новость

в таблице options содержится значеня 3

CREATE TABLE IF NOT EXISTS `options` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `str` int(5) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin AUTO_INCREMENT=2 ;

--
-- Dumping data for table `options`
--

INSERT INTO `options` (`id`, `str`) VALUES
(1, 3);

после того выведется 3 новость

потом

// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href=index.php?id='.$id.'&page=1>Первая</a> | <a href=index.php?id='.$id.'&page='. ($page - 1) .'>Предыдущая</a> | ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' | <a href=index.php?id='.$id.'&page='. ($page + 1) .'>Следующая</a> | <a href=index.php?id='.$id.'&page=' .$total. '>Последняя</a>';

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) $page5left = ' <a href=index.php?id='.$id.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
if($page - 4 > 0) $page4left = ' <a href=index.php?id='.$id.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
if($page - 3 > 0) $page3left = ' <a href=index.php?id='.$id.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
if($page - 2 > 0) $page2left = ' <a href=index.php?id='.$id.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = ' <a href=index.php?id='.$id.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';

if($page + 5 <= $total) $page5right = ' | <a href=index.php?id='.$id.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
if($page + 4 <= $total) $page4right = ' | <a href=index.php?id='.$id.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';
if($page + 3 <= $total) $page3right = ' | <a href=index.php?id='.$id.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=index.php?id='.$id.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href=index.php?id='.$id.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';

// Вывод меню если страниц больше одной

if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pstrnav\">";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";
}

все должно сработать