Вывод данных PHP
Давайте создадим учебный скрипт PHP + верстка + выборка из базы данных. Эта связка будет демонстрировать взаимодействие страницы, вообще всех элементов. Также я постараюсь максимально подробно пояснить каждую часть системы, даже небольшую. Пример максимально упрощенный, чисто концепция, чтобы понять – после этого уже можно делать что-то другое – выводить другие элементы, делать другие запросы, усложнять – и так далее.
Итак, задача:
Есть список категорий новостей в базе данных с описаниями. Нам на странице необходимо вывести этот список в виде выпадающего списка (извините за тавтологию) с названиями категорий и при выборе одного элемента (названия) требуется вывести описание.
Таблица категорий
CREATE TABLE `cats` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `description` varchar(255) NOT NULL, PRIMARY KEY (`id`) )Все как обычно – идентификатор с автоинкрементом, название, описание.
Общая схема решения
- Сначала просто выведем названия категорий с помощью обычного запроса-цикла
- Затем в этот столбик добавим html-разметку
- Закончим тем, что добавим кнопку и обработку её по нажатию (вывод описания)
Тут все решается очень просто, не будем мудрствовать. Код с комментариями ниже
<?php
//Подключение к базе данных (мы используем драйвер mysqli)
$conn = new mysqli("localhost", "root", "", "demo");
if ($conn->connect_error) {die("Ошибка: невозможно подключиться: " . $conn->connect_error);}
$conn->set_charset("utf8mb4");//Установка кодировки
//формируем запрос sql
//в нем мы выбираем все категории (все столбцы и строки) из таблицы cats
//в алфавитном порядке по названию по возрастанию
$sql = "SELECT * FROM cats ORDER BY name ASC";
//выполняем этот запрос
//если что-то не так, то скрипт выдаст ошибку и прекратит работу
$cats = $conn->query($sql) or die("Fehler in der query ".$conn->error."<br>".$sql);
//теперь в цикле мы проходим по всей выборке (результатам запроса)
//цикл while выполняется до тех пор, пока выражение в скобках не закончится
//то есть пока cat не станет равным ничему
while($сat = $cats->fetch_object()){
//так как cat - это объект, то мы можем извлекать из него значения
//в данном случае мы извлекаем имя категории
//оператор echo сразу же печатает это значение
echo "$сat->name <br />";
}
Вот так мы просто вывели данные. Идем дальше.
HTML-разметка и дополнительные данные
Теперь давайте оформим наш код в полноценную html-страницу, а также добавим вывод дополнительных данных. Ниже код с комментариями
<?php
$conn = new mysqli("localhost", "root", "", "demo");
if ($conn->connect_error) {die("Ошибка: невозможно подключиться: " . $conn->connect_error);}
$conn->set_charset("utf8mb4");
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Категории</title>
</head>
<body>
<h1>Категории</h1>
<?php
$sql = "SELECT * FROM cats ORDER BY name ASC";
$cats = $conn->query($sql) or die("Fehler in der query ".$conn->error."<br>".$sql);
//добавляем форму для отправки данных на сервер
//метод отправки - POST
echo "<form method='post'>";
//а здесь у нас будет выпадающий список
//обратите внимение на имя списка - select_cat - оно нам пригодится, чтобы не спрашивали, откуда оно взялось
echo "<select name='select_cat'>";
while($сat = $cats->fetch_object()){
//здесь в списке название
//а в значение (value) кладем идентификатор категории
echo "<option value='$сat->id'>$сat->name</option>";
}
echo "</select></form>";
Вывод описаний
Ну а теперь перейдем к заключительной части сегодняшней заметки – добавим кнопку «Показать» и обработаем её нажатие. Ниже код с комментариями
<?php
$conn = new mysqli("localhost", "root", "", "demo");
if ($conn->connect_error) {die("Ошибка: невозможно подключиться: " . $conn->connect_error);}
$conn->set_charset("utf8mb4");
//если нажата кнопка show
if (isset($_POST["show"])){
//то находим в отправляемом массиве $_POST идентификатор выбранной категории
$cat_id = $_POST["select_cat"];
//и находим описание данной категории
$sql = "SELECT `description` FROM cats WHERE ID='$cat_id'";
$description_raw = $conn->query($sql) or die("Fehler in der query ".$conn->error."<br>".$sql);
//если оно конечно существует
if ($result = $description_raw->fetch_object()){
$desc = $result->description;
}
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>Категории</title>
</head>
<body>
<h1>Категории</h1>
<?php
$sql = "SELECT * FROM cats ORDER BY name ASC";
$cats = $conn->query($sql) or die("Fehler in der query ".$conn->error."<br>".$sql);
echo "<form method='post'>";
echo "<select name='select_cat'>";
while($сat = $cats->fetch_object()){
echo "<option value='$сat->id'>$сat->name</option>";
}
//добавляем кнопку
echo "<input type='submit' name='show'>";
echo "</select></form>";
//там выше в самом началале страницы мы находили описание
//если оно существует и чему-нибудь равно, то выводим его
if (isset($desc) && $desc){
echo "<div>$desc</div>";
}
В качестве домашнего задания вам. Таблица категорий она же не просто так сама по себе, а существует для таблицы «Новости» (news). Вот код её создания:
CREATE TABLE `news` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`cat_id` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
)
Две задачи:
- Попробуйте изменить так запрос, чтобы выдавал не только описание категории, а еще и новости, которые принадлежат к данной категории.
- После того, как мы получаем описание и новости, то текущей категорией выпадающего списка становится первая. Попробуйте сделать так, чтобы текущей становилась та, для которой мы получаем информацию.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты