Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция №11
2.8. Сортировка данных
Результирующий набор записей, полученный в результате выполнения запроса на выборку, по умолчанию отображается в соответствии с расположением этих записей в таблице. Часто при отображении данных для пользователя или при печати отчетов требуется упорядочивать результирующие записи, то есть проводить сортировку. Например, каталог фильмов будет более наглядным, если названия будут находиться в алфавитном порядке.
Для сортировки данных в PHP-скриптах используется запрос на выборку, содержащий предложение ORDER BY.
Пример 7.8. Сортировка записей: покажем механизм сортировки данных. Для этого отредактируем файл catalog.php, созданный в предыдущих разделах, реализовав в нем возможность сортировки записей по одному из столбцов .
';
}
//Инициализация переменных
$order_by = "";
$where = "";
$sort = "";
$host = "localhost:".dirname(__FILE__)."\base.fdb";
$user = "SYSDBA";
$pass = "masterkey";
$dbh = ibase_connect($host, $user, $pass);
if (isset($_GET['sort']))
{
$sort = $_GET['sort'];
switch($sort)
{
case '1': $order_by = 'ORDER BY NAME'; break;
case '2': $order_by = 'ORDER BY GENRE'; break;
case '3': $order_by = 'ORDER BY RELEASE_YEAR'; break;
}
}
if (isset($_POST['delete']))
{
$cbs = $_POST['cbs'];
$count = count($_POST['cbs']);
for ($i = 0; $i < $count; $i++)
{
$del = $cbs[$i];
$query = "DELETE FROM FILMS WHERE ID='$del'";
ibase_query($dbh, $query) or die ("Сбой при доступе к БД: " . ibase_errmsg());
}
}
$num = 2;
if (!empty($_GET['n']))
$n = strip_tags(trim($_GET['n']));
if(empty($n) or $n < 0) $n = 1;
$start = $n * $num - $num;
$total_items = ibase_fetch_row(ibase_query("SELECT COUNT(*) FROM FILMS"));
getNavigationMenu($num,$total_items,$n,'sort='.$sort);
$query = "SELECT FIRST $num SKIP $start * FROM FILMS " . $order_by;
$result = ibase_query($dbh, $query) or die ("Сбой при доступе к БД: " . ibase_errmsg());
while ($row = ibase_fetch_row($result))
{
echo "
$row[0]
$row[1]
$row[2]
$row[3]
";
}
echo "
";
?>
Результат выполнения скрипта показан на рисунке 7.8.
Рис. 7.8. Постраничный вывод записей
Рассмотрим механизм работы этого скрипта:
• объявляется функция формирования навигационного меню getNavigationMenu, принимающая следующие аргументы:
◦ $num – количество записей на одной странице;
◦ $total_items – общее количество записей;
◦ $n – номер текущей страницы;
◦ $param – дополнительные параметры, передающиеся в GET-запросе;
• в переменную $total записывается общее количество страниц ($total = intval(($total_items[0] - 1) / $num) + 1);
• если номер страницы превышает общее число страниц (if($n > $total)), выводится последняя страница ($n = $total);
• в зависимости от значений переменной $n генерируется соответствующий HTML-код навигационного меню;
• непосредственно в самом теле скрипта задается количество записей на одной странице ($num = 2), номер текущей страницы ($n = strip_tags(trim($_GET['n']))), номер первой отображаемой записи ($start = $n * $num - $num) и определяется общее количество записей ($total_items = ibase_fetch_row(ibase_query("SELECT COUNT(*) FROM FILMS")));
• вызывается созданная функция getNavigationMenu с определенными ранее аргументами (getNavigationMenu ($num,$total_items,$n, 'sort='.$sort));
• выполняется запрос на выборку $num записей, начиная с записи $start ("SELECT FIRST $num SKIP $start * FROM FILMS " . $order_by).
2.10. Поиск в базе данных
Любой каталог, помимо хранения и редактирования записей, подразумевает возможность поиска необходимой пользователю информации. Поиск в PHP-скриптах, как правило, реализуется с помощью запросов на выборку, содержащих выражения CONTAINING или LIKE.
Пример 7.10. Поиск записей: реализуем возможность поиска записей в созданном ранее файле каталога catalog.php.
';
}
//Инициализация переменных
$order_by = "";
$where = "";
$sort = "";
$keyword = "";
$genre = "";
$host = "localhost:".dirname(__FILE__)."\base.fdb";
$user = "SYSDBA";
$pass = "masterkey";
$dbh = ibase_connect($host, $user, $pass);
if (isset($_GET['sort']))
{
$sort = $_GET['sort'];
switch($sort)
{
case '1': $order_by = 'ORDER BY NAME'; break;
case '2': $order_by = 'ORDER BY GENRE'; break;
case '3': $order_by = 'ORDER BY RELEASE_YEAR'; break;
}
}
if (isset($_POST['delete']))
{
$cbs = $_POST['cbs'];
$count = count($_POST['cbs']);
for ($i = 0; $i < $count; $i++)
{
$del = $cbs[$i];
$query = "DELETE FROM FILMS WHERE ID='$del'";
ibase_query($dbh, $query) or die ("Сбой при доступе к БД: " . ibase_errmsg());
}
}
if (!empty($_GET['keyword']) or !empty($_GET['genre']))
{
$where = "WHERE ";
if (!empty($_GET['keyword']))
{
$keyword = strip_tags(trim($_GET['keyword']));
if (!preg_match("/.{2,}/", $keyword))
{
echo '
Строка для поиска должна состоять из 2 или более символов
';
exit;
}
$conditions[] = "UPPER (NAME) LIKE UPPER ('%".$keyword."%')";
}
if (!empty($_GET['genre']))
{
$genre = strip_tags(trim($_GET['genre']));
$conditions[] = "UPPER (GENRE) LIKE UPPER ('%".$genre."%')";
}
}
else $conditions[]='';
$num = 2;
if (!empty($_GET['n']))
$n = strip_tags(trim($_GET['n']));
if(empty($n) or $n < 0) $n = 1;
$start = $n * $num - $num;
$total_items = ibase_fetch_row(ibase_query("SELECT COUNT(*) FROM FILMS ". $where . implode(' AND ', $conditions)));
if ($total_items[0] == 0)
{
echo '
Ничего не найдено
';
exit;
}
getNavigationMenu($num,$total_items,$n,'sort='.$sort.'&keyword='.$keyword.'&genre='.$genre);
$query = "SELECT FIRST $num SKIP $start * FROM FILMS ". $where . implode(' AND ', $conditions). " ". $order_by;
$result = ibase_query($dbh, $query) or die ("Сбой при доступе к БД: " . ibase_errmsg());
echo "
";
while ($row = ibase_fetch_row($result))
{
echo "
$row[0]
$row[1]
$row[2]
$row[3]
";
}
echo "
";
?>
Результат выполнения скрипта показан на рисунке 7.9.
Рис. 7.9. Поиск записей
Рассмотрим механизм работы этого скрипта:
• формируется форма поиска. Данные полученные с формы пересылаются в GET-запросе и обрабатываются в том же файле catalog.php (
Оставляя свои контактные данные и нажимая «Попробовать в Telegram», я соглашаюсь пройти процедуру
регистрации на Платформе, принимаю условия
Пользовательского соглашения
и
Политики конфиденциальности
в целях заключения соглашения.
Пишешь реферат?
Попробуй нейросеть, напиши уникальный реферат с реальными источниками за 5 минут