|
|
|
| Доброго времени суток всем, подскажите пожалуйста как можно сделать сортировку выведенных данных из БД. Т.е. есть запрос который вытягивает таблицу и рисует ее на странице + сверху над таблицей есть строчка "Сортировать по: Фамилия Имя Отчество" Как сделать что бы при нажатии на Фамилия - таблица обновилась и данные были сортированы по Фамилии, при нажатии на Имя - обновится и данные былит сортированы по Имени и т.д. Я начинающий в этом деле, и уже голова кругом подскажите хотя бы в каком направлении двигаться.
пробовал сделать так:
в отдельном файле создавал функцию
<?
function Imya()
{
$sql = "SELECT * FROM Baza";
mysql_query($sql);
}
?>
и делал ссылку:
Сортировать по: <a href="<?Imya();?>">Имени</a>
но не работает ... | |
|
|
|
|
|
|
|
для: P750
(19.09.2009 в 00:14)
| | вам нужно формировать ссылки со значениями сортировки
например
<a href='index.php?sort=fam'>Фамилия</a>
|
принимаете переменную sort и отталкиваясь от значения fam
выполняете запрос с сортировкой по фамилии
if($_GET[sort]=="fam"){
$query="SELECT * FOM Baza ORDER BY familiya";
....
}
|
и так далее | |
|
|
|
|
|
|
|
для: Valick
(19.09.2009 в 01:26)
| | Valick СПС, попробовал этот вариант но почему то он упорно отказывается работать у меня, страницу обновляет все как положено но сортировать не сортирует... | |
|
|
|
|
|
|
|
для: P750
(19.09.2009 в 13:15)
| | попробовал этот вариант
код покажите | |
|
|
|
|
|
|
|
для: Valick
(19.09.2009 в 13:21)
| |
... (начало страницы)
<table width="760" border=0>
<tr class=border><td><b>Фамилия</b></td><td><b>Имя</b></td><td><b>Отчество</b></td></tr>
Сортировать по: <a href="Stroika.php?sort=familiya">Фамилии</a> <a href="Stroika.php?sort=imya">Имени</a> <a href="Stroika.php?sort=otch">Отчеству</a>
<?php
if($_GET[sort]=="familiya"){
$query="SELECT * FOM stroi ORDER BY familiya";
}
if($_GET[sort]=="imya"){
$query="SELECT * FOM stroi ORDER BY imya";
}
if($_GET[sort]=="otch"){
$query="SELECT * FOM stroi ORDER BY otch";
}
require_once("enter.php"); // (подключение к БД)
// Переменная хранит число сообщений выводимых на станице
$num = 50;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT * FROM stroi") or die(mysql_error());
$posts = mysql_num_rows($result);
// Находим общее число страниц
$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;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT * FROM stroi LIMIT $start, $num") or die(mysql_error());
// В цикле переносим результаты запроса в массив $postrow
while ($postrow[] = mysql_fetch_array($result))
for($i = 0; $i < $num; $i++)
{
echo "<tr class=border>
<td>".$postrow[$i]['familiya']."</td>
<td>".$postrow[$i]['imya']."</td>
<td>".$postrow[$i]['otch']."</td>
</tr>";
}
echo "</table>";
?>
<br>
<?php
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href= Stroika.php?page=1><<</a>
<a href= Stroika.php?page='. ($page - 1) .'><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= Stroika.php?page='. ($page + 1) .'>></a>
<a href= Stroika.php?page=' .$total. '>>></a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href= Stroika.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= Stroika.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= Stroika.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= Stroika.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
?>
... (конец страницы)
|
вот код в котором выводится таблица + формируются страницы назад вперед (взято с форума)
необходимо ли ставить после запроса $query="SELECT * FOM stroi ORDER BY familiya"; такую строку mysql_query($query); ? хотя даже если ее и ставлю ничего не меняется... | |
|
|
|
|
|
|
|
для: P750
(19.09.2009 в 13:35)
| | а так?
<?php
// Сортировка по умолчанию
$sort = "familiya";
if($_GET[sort]=="familiya") $sort = "familiya";
if($_GET[sort]=="imya") $sort = "imya";
if($_GET[sort]=="otch") $sort = "otch";
require_once("enter.php"); // (подключение к БД)
// Переменная хранит число сообщений выводимых на станице
$num = 50;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT * FROM stroi") or die(mysql_error());
$posts = mysql_num_rows($result);
// Находим общее число страниц
$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;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT * FROM stroi ORDER BY $sort LIMIT $start, $num") or die(mysql_error());
// В цикле переносим результаты запроса в массив $postrow
while ($postrow[] = mysql_fetch_array($result))
for($i = 0; $i < $num; $i++)
{
echo "<tr class=border>
<td>".$postrow[$i]['familiya']."</td>
<td>".$postrow[$i]['imya']."</td>
<td>".$postrow[$i]['otch']."</td>
</tr>";
}
echo "</table>";
?>
<br>
<?php
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href= Stroika.php?page=1><<</a>
<a href= Stroika.php?page='. ($page - 1) .'><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= Stroika.php?page='. ($page + 1) .'>></a>
<a href= Stroika.php?page=' .$total. '>>></a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href= Stroika.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= Stroika.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= Stroika.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= Stroika.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
?>
|
| |
|
|
|
|
|
|
|
для: Valick
(19.09.2009 в 13:51)
| | Все отлично работает, правда при переходе на др страницу все сбивалось, решил проблему путем добавления ссылки (см выделенное):
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href=Stroika.php?sort='.$_GET['sort'].'&page=1><<</a>
<a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page - 1) .'><</a>';
// Проверяем нужны ли стрелки вперед
if ($page != $tpage) $nextpage = '<a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page + 1).'>></a>
<a href=Stroika.php?sort='.$_GET['sort'].'&page='.$total.'>>>></a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 1 > 0) $page1left = '<a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page - 1).'>'.($page - 1).'</a> | ';
if($page - 2 > 0) $page2left = '<a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page - 2).'>'.($page - 2).'</a> | ';
if($page + 1 <= $total) $page1right = ' | <a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page + 1).'>'.($page + 1).'</a>';
if($page + 2 <= $total) $page2right = ' | <a href=Stroika.php?sort='.$_GET['sort'].'&page='.($page + 2).'>'.($page + 2).'</a>';
|
Огромное СПАСИБО ЧЕЛОВЕКУ Valick | |
|
|
|
|
|
|
|
для: P750
(19.09.2009 в 14:19)
| | лучше всётаки вместо $_GET['sort'] использовать переменную $sort которую однозначно определяем в начале скрипта, иначе "напихают" вам чёнть непотребного, да и код будет выглядеть посимпатичнее | |
|
|
|
|
|
|
|
для: Valick
(19.09.2009 в 15:26)
| | Хорошо исправлю ) спасибо за дополнение! Прям рад что нашёл этот форум!!!! И люди хорошие и информации полезной достаточно!!! | |
|
|
|