Лабораторная работа №6

Ознакомиться с главами 19-20 в Колисниченко Д. – Разработка веб-приложений в PHP 8. Ознакомиться с главой 11 в Никсон Р. – Создаем динамические сайты с помощью PHP, MySQL, JavaScript, CDD и HTML5, 6-е изд. Ознакомиться с главой 11 в Люк Веллинг, Лора Томсон – Разработка web-приложений с помощью PHP и MySQL (4 издание).

Краткая теория

Как работает архитектура баз данных для Интернет-доступа (Л. Веллинг, Л. Томсон)

  1. Веб-браузер пользователя отправляет HTTP-запрос на получение определённой веб-страницы. Например, может быть выдан запрос на поиск в магазине «Буквофил» всех книг, написанных Джоан Роулинг, с использованием HTML-формы. Страница с результатами поиска называется rasults.php.
  2. Веб-сервер принимает запрос на results.php, извлекает файл и передаёт его на обработку интерпретатору PHP.
  3. Интерпретатор PHP начинает анализ сценария. Сценарий содержит команду подключения к базе данных и выполнения запроса (на поиск книг). PHP открывает соединение с сервером MySQL и отправляет ему соответствующий запрос.
  4. Сервер MySQL принимает запрос к базе данных, обрабатывает его, а затем отправляет результаты – в данном случае, список книг – обратно интерпретатору PHP.
  5. Интерпретатор PHP завершает выполнение сценария – обычно это форматирование результатов запроса в виде HTML – после чего возвращает результаты в HTML-формате веб-серверу.
  6. Веб-сервер пересылает браузеру HTML-страницу, в которой пользователь может просмотреть список необходимых книг.

Файл регистрации

Обычно для хранения сведений, касающихся подключения к СУБД, создается отдельный файл.

<?php // config.php

$host = 'localhost';
$data = 'dm';
$user = 'root';
$pass = 'mysql';
$chrs = 'utf8mb4';
$attr = "mysql:host=$host;dbname=$data;charset=$chrs";
$opts =
    [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false,
    ];

Особую роль здесь играют охватывающие теги <?php и ?>, поскольку код между ними интерпретируется только как код PHP. Если обратиться к этому скрипту из браузера, то сгенерируется пустая страница, так что пользователи не получат доступ к секретным данным.

Подключение к базе данных MySQL

С помощью инструкции require_once можно включить config.php в любые другие PHP-файлы, которым нужен доступ к базе данных. В следующем примере создается объект PDO (PHP Data Objects – унифицированный интерфейс для работы с базами данных), представляющий соединение между PHP и сервером базы данных. Парная команда try…catch проверяет возникновение ошибки.

<?php // login.php

require_once 'config.php';

try {
    $pdo = new PDO($attr, $user, $pass, $opts);
} catch (PDOException $e) {
    throw new PDOException($e->getMessage(), (int)$e->getCode());
}
?>

Создание и выполнение запроса

Запрос в виде строки можно передать в метод query() объекта $pdo. Результат

<?php
$query = "SELECT * FROM `groups`";
$result = $pdo->query($query);
?>

Извлечение результата

После получения объекта $result его можно использовать для поэлементного извлечения нужных данных с помощью метода fetch().

<?php

require_once 'config.php';

try {
    $pdo = new PDO($attr, $user, $pass, $opts);
} catch (PDOException $e) {
    throw new PDOException($e->getMessage(), (int)$e->getCode());
}

$query = "SELECT * FROM `groups`";
$result = $pdo->query($query);

while ($row = $result->fetch()) {
    echo 'id:    ' . htmlspecialchars($row['id'])   . '<br>';
    echo 'name:  ' . htmlspecialchars($row['name']) . '<br><br>';
}

?>

Задание 1

Создать базу данных и таблицы, в которых будет храниться информация об объектах из предыдущих лабораторных работ. В рамках данной лабораторной работы можно обойтись без нормализации и ограничиться одной таблицей.

Заполнить таблицу данными.

Пример выполнения задания 1

Создать базу данных и таблицы, в которых будет храниться информация об объектах из предыдущих лабораторных работ. В рамках данной лабораторной работы можно обойтись без нормализации и ограничиться одной таблицей. Заполнить таблицу данными.

Шаг 1. Определение структуры БД и таблиц

Для начала оценим, какие данные нужно хранить в БД.

films_cards

<div class="container">
    <div>
        <h2>Фильмы</h2>

        <div class="cards_container" id="films_holder">

            <div class="card">
                <img src="./images/solntsei.jpg" alt="Постер фильма 'Белое солнце пустыни'" />
                <div class="card_container">
                    <h3>Белое солнце пустыни</h3>
                    <p>
                        Советский художественный фильм в жанре истерн                         
                        <!-- Сокращено -->

                    </p>
                    <p>
                        <a href="">Подробнее</a>
                    </p>
                </div>
            </div>

            <!-- Далее то же самое -->

Для каждого фильма здесь есть:

  • название;
  • описание;
  • ссылка на изображение с постером;
  • альтернативный текст к постеру;
  • ссылка на подробное описание фильма;

Название, описание и альтернативный текст к изображения будут вводиться как обычный текст. Изображение будет загружаться в виде файла в каталог images, так что хранить нужно только имя файла. Ссылка будет вести на страницу, где для каждого фильма будет находиться более подробное описание. Ссылка будет генерироваться автоматически, в неё попадет id фильма. А для подробного описания фильма нужно заготовить ещё одно поле.

В итоге в таблице о фильмах будет следующая информация:

  • id;
  • название;
  • краткое описание;
  • подробное описание;
  • имя файла с изображением;
  • альтернативный текст к изображению.

Создать БД, таблицы, а затем заполнить их можно через phpMyAdmin (в AMPPS попасть в него можно по адресу http://localhost/phpmyadmin/). Можно подключиться к СУБД с помощью специального клиентского приложения или из консоли.

Шаг 2. Подготовка базы данных

Создаём БД, нажатием на соответствующую ссылку. Далее достаточно только ввести название.

phpMyAdmin

Создаём таблицу для основных объектов. В phpMyAdmin можно посмотреть, какой для этого генерируется SQL-запрос.

CREATE TABLE `films_db`.`films` 
(
    `id` INT NOT NULL AUTO_INCREMENT ,
    `title` VARCHAR(500) NOT NULL ,
    `short_description` TEXT NOT NULL ,
    `description` TEXT NOT NULL ,
    `poster` TINYTEXT NOT NULL ,
    `poster_alt` TINYTEXT NOT NULL ,
    PRIMARY KEY (`id`)
) ENGINE = InnoDB;

В рамках лабораторной работы не требуется выполнять нормализацию и подбирать наиболее подходящие под задачу типы данных. Важно обратить внимание на то, чтобы поле id было первичным ключом (и, кроме того, с типом int и опциями: not null, auto increment). Остальные поля, скорее всего, либо числа, либо текст.

Шаг 3. Заполнение таблиц

Так же, через phpMyAdmin нужно предварительно внести несколько записей, чтобы можно было начать разрабатывать страницу, где эти записи будут отображаться.

Задание 2

Переделать страницы из предыдущих работ так, чтобы список с объектами и подробная информация об этих объектах брались из БД.

Задание 3

Доработать страницу создания нового объекта так, чтобы он сохранялся в БД.

Задание 4

Переделать страницу с табличным представлением списка объектов так, чтобы можно было удалять объекты.

Задание 5

Добавить на страницу с табличным представлением списка объектов возможность редактирования конкретного объекта.