На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Вывод данных 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`)
) 
Все как обычно – идентификатор с автоинкрементом, название, описание.

Общая схема решения

  1. Сначала просто выведем названия категорий с помощью обычного запроса-цикла
  2. Затем в этот столбик добавим html-разметку
  3. Закончим тем, что добавим кнопку и обработку её по нажатию (вывод описания)
Вывод категорий

Тут все решается очень просто, не будем мудрствовать. Код с комментариями ниже

<?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`)
)
Две задачи:
  1. Попробуйте изменить так запрос, чтобы выдавал не только описание категории, а еще и новости, которые принадлежат к данной категории.
  2. После того, как мы получаем описание и новости, то текущей категорией выпадающего списка становится первая. Попробуйте сделать так, чтобы текущей становилась та, для которой мы получаем информацию.




Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, php, уроки





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Вычисление простых множителей в C#
Взаимодействие и синхронизация потоков


© upread.ru 2013-2022
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.