Вывод данных 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.