[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Постраничный вывод+сортировка
igor_gin
Всем доброго дня! Помогите, пожалуйста, решить такую проблему... Имеется БД из которой вытягиваются и постранично выводятся данные. Имеются три поля по которым можно сортировать данные: id, name, avtor. Проблема состоит в том, что при каждом переходе на следующую страницу меняется направление сортировки с ASC на DESC и наоборот. Пример, как это работает "в живую".
Это происходит из-за того, что все ссылки имеют вид
<a href='../page.php?page=1&key=$key&sort=$sort'>
и каждый раз при переходе изменяется переменная key, что в свою очередь изменяет значение переменной sort. (строки 31-49 кода).
Подскажите, как можно организовать нормальную работу программы.
Зараннее спасибо.

Ниже исходный код программы:

<?php
// запрещаем вывод предупреждений
Error_Reporting(E_ALL & ~E_NOTICE);
// Устанавливаем соединение с базой данных
include "connect.php";
// Переменная хранит число сообщений выводимых на станице
$num = 10;
// Извлекаем из URL текущую страницу
$page = mysql_real_escape_string($_GET['page']);
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM book")or die(mysql_error());
$posts = mysql_result($result, 0);
echo '<b class="zagolovok">Всего в библиотеке '.$posts.' кн.</b>';
// Находим общее число страниц
$total = intval(($posts - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю

if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения

$start = $page * $num - $num;
$finish = $posts - $start;
// Выбираем $num сообщений начиная с номера $start

$key_array = array('id','name','avtor');
$sort_array = array('ASC','DESC');
if (isset($_GET['key']))
{
$key=mysql_real_escape_string($_GET['key']);
$sort=mysql_real_escape_string($_GET['sort']);
}
else
{
$key='id';
$sort='DESC';
}

if($sort=='DESC')
{
$sort='ASC';
}
else
{
$sort='DESC';
}
function vid_sort($k){
global $key, $sort;
if($k==$key)
{
if($sort=='ASC')
{
$str = "<img src='sort-az.gif' border=0>";
}
else
{
$str = "<img src='sort-za.gif' border=0>";
}// вместо "up" и "doun" url картинки
}
else
{
$str="";
}
return $str;
}
$result = mysql_query("SELECT * FROM book ORDER BY $key $sort LIMIT $start, $num")or die(mysql_error());
// В цикле переносим результаты запроса в массив $postrow
while ( $postrow[] = mysql_fetch_array($result))
echo "<table>";
echo "<tr bgcolor=#CDAC7F>
<td width=5% valign=middle align='center'><b><a class='new22' href=
\"page.php?key=id&sort=$sort\"># ".vid_sort("id")."</b></td>
<td width=40% valign=middle align='center'><b><a class='new22' href=
\"page.php?key=name&sort=$sort\">Название публикации ".vid_sort("name")."</b></td>
<td width=27% valign=middle align='center'><b><a class='new22' href=
\"page.php?key=avtor&sort=$sort\">Автор ".vid_sort("avtor")."</b></td>
<td width=3% valign=middle align='center'><b>Год изд.</b></td>
<td width=15% valign=middle align='center'><b>Дата добавления</b></td>
</tr>"
;

if ($finish < $num)
{
for($i = 0; $i < $finish; $i++)
{
echo "<tr bgcolor=#FAFAD2>
<td width=7%>"
.$postrow[$i]['id']."</td>
<td width=47%><a href='info.php?id="
.$postrow[$i]['id']."'>".$postrow[$i]['name']."</a></td>
<td width=30%>"
.$postrow[$i]['avtor']."</td>
<td width=5% align='center'>"
.$postrow[$i]['god']."</td>
<td width=11%>"
.$postrow[$i]['data']."</td>
</tr>"
;
}
}

else
{
for($i = 0; $i < $num; $i++)
{
echo "<tr bgcolor=#FAFAD2>
<td width=7%>"
.$postrow[$i]['id']."</td>
<td width=47%><a href='info.php?id="
.$postrow[$i]['id']."'>".$postrow[$i]['name']."</a></td>
<td width=30%>"
.$postrow[$i]['avtor']."</td>
<td width=5% align='center'>"
.$postrow[$i]['god']."</td>
<td width=11%>"
.$postrow[$i]['data']."</td>
</tr>"
;
}
}

echo "</table>";
echo '<b class="zagolovok" >Страницы:</b> ';
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = " <a href='../page.php?page=1&key=$key&sort=$sort'><<</a> <a href='../page.php?page=" . ($page - 1) . "&key=$key&sort=$sort'><</a> ";
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = " <a href='../page.php?page=" . ($page + 1) . "&key=$key&sort=$sort'>></a> <a href='../page.php?page=" . $total . "&key=$key&sort=$sort'>>></a> ";

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = "<a href='../page.php?page=" . ($page - 2) . "&key=$key&sort=$sort'>" . ($page - 2) . "</a> | ";
if($page - 1 > 0) $page2left = "<a href='../page.php?page=" . ($page - 1) . "&key=$key&sort=$sort'>" . ($page - 1) . "</a> | ";
if($page + 2 <= $total) $page2right = " | <a href='../page.php?page=" . ($page + 2) . "&key=$key&sort=$sort'>" . ($page + 2) ."</a>";
if($page + 1 <= $total) $page1right = " | <a href='../page.php?page=" . ($page + 1) . "&key=$key&sort=$sort'>" . ($page + 1) ."</a>";

// Вывод меню
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;

?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.