Готовые отчеты / Базы данных. Лабораторная работа 8
.pdfФедеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Факультет инфокоммуникационных сетей и систем Кафедра фотоники и линий связи
ЛАБОРАТОРНАЯ РАБОТА №8 по дисциплине «Базы данных»
на тему «Динамический вывод данных из MySQL с помощью PHP скрипта»
Выполнили: студенты 3-го курса дневного отделения группы ИКПИ-85 Ежуров Антон Павлович
Коваленко Леонид Александрович Преподаватель:
ассистент кафедры ПИиВТ Овчинников Антон Олегович
Санкт-Петербург 2020
Цель работы
Получить практические навыки в создании PHP скриптов, позволяющих осуществлять динамический вывод данных из таблиц MySQL.
Ход работы
Создадим базу данных library в программе-дизайнере MySQL Workbench. В этой базе данных создадим таблицу books (кодировка
utf8_general_ci) с полями:
1.id типа INT, первичный ключ (PK), счетчик (AI);
2.name типа VARCHAR(255), ненулевое (NN), кодировка UTF-8;
3.author типа VARCHAR(100), ненулевое (NN), кодировка UTF-8;
4.description типа VARCHAR(255), кодировка UTF-8;
5.image типа VARCHAR(255), кодировка UTF-8;
6.section_id типа INT.
Вэтой базе данных создадим таблицу sections (кодировка
utf8_general_ci) с полями:
1.id типа INT, первичный ключ (PK), счетчик (AI);
2.name типа VARCHAR(255), ненулевое (NN), кодировка UTF-8.
Для таблицы books создадим внешний ключ (вкладка Foreign Keys) с
именем section_id на таблицу library.sections, с колонки section_id
(таблицы books) на колонку id (таблицы sections). В качестве событий ON
DELETE и ON UPDATE укажем CASCADE.
Заполним таблицу books произвольными восемью записями (табл. 1). Таблица 1 — Таблица books базы данных library
id |
name |
author |
|
description |
|
|
image |
section_id |
|
|
|
|
|
|
|
||||
1 |
Стив |
Уолтер |
В основу этой биографии легли |
NULL |
1 |
||||
|
Джобс. |
Айзексон |
беседы |
с |
самим |
Стивом |
|
|
|
|
Биография |
|
Джобсом, а также с его |
|
|
||||
|
|
|
родственниками, |
друзьями, |
|
|
|||
|
|
|
врагами, |
соперниками |
и |
|
|
||
|
|
|
коллегами. |
|
|
|
|
|
|
2 |
Сократ |
Игорь |
Один |
из |
величайших |
NULL |
1 |
||
|
|
Суриков |
философов в мировой истории, |
|
|
||||
|
|
|
при этом за всю жизнь не |
|
|
||||
|
|
|
написавший |
ни |
одного |
|
|
2
|
|
|
философского трактата. |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|||||
3 |
Леонардо |
Зубов В. |
Книга |
В.П. |
Зубова |
впервые |
NULL |
1 |
|||||
|
да Винчи |
П. |
была издана в 1961 г. большим |
|
|
||||||||
|
|
|
тиражом |
|
и |
|
|
получила |
|
|
|||
|
|
|
международное |
признание. Со |
|
|
|||||||
|
|
|
временем |
|
она |
|
|
стала |
|
|
|||
|
|
|
библиографической редкостью. |
|
|
||||||||
4 |
Ницше |
Жиль |
Классическая работа одного из |
NULL |
1 |
||||||||
|
|
Делез |
крупнейших |
|
французских |
|
|
||||||
|
|
|
философов |
|
|
XX |
|
|
века, |
|
|
||
|
|
|
включающая в себя компактное |
|
|
||||||||
|
|
|
и емкое изложение биографии |
|
|
||||||||
|
|
|
и философского |
творчества |
|
|
|||||||
|
|
|
Фридриха Ницше. |
|
|
|
|
|
|
||||
5 |
Метро |
Грант |
Герой |
романа |
«Метро |
2033. |
NULL |
2 |
|||||
|
2033. |
Макмасте |
Британия» путешествует между |
|
|
||||||||
|
Британия |
р |
Глазго |
и |
Лондоном |
через |
|
|
|||||
|
|
|
изменившиеся |
|
|
|
|
|
до |
|
|
||
|
|
|
неузнаваемости |
Шотландию |
и |
|
|
||||||
|
|
|
Англию. |
|
|
|
|
|
|
|
|
|
|
6 |
Дюна. |
Фрэнк |
Самый |
авторитетный |
журнал |
NULL |
2 |
||||||
|
Мессия |
Герберт |
научной фантастики |
«Локус» |
|
|
|||||||
|
Дюны. |
|
попросту |
признал |
|
«Дюну» |
|
|
|||||
|
Дети Дюны |
|
первым |
романом |
эпопеи |
о |
|
|
|||||
|
|
|
«песчаной |
планете», |
лучшим |
|
|
||||||
|
|
|
научно-фантастическим |
|
|
|
|
||||||
|
|
|
романом |
всех |
времен |
и |
|
|
|||||
|
|
|
народов. |
|
|
|
|
|
|
|
|
|
|
7 |
Java 2. |
Кей |
Книга |
ведущих |
специалистов |
NULL |
3 |
||||||
|
Библиотека |
Хорстман |
по программированию на языке |
|
|
||||||||
|
профессио |
н, Гари |
Java |
представляет |
|
собой |
|
|
|||||
|
нала. Том |
Корнелл |
обновленное |
|
|
|
издание |
|
|
||||
|
1. Основы |
|
фундаментального |
|
|
труда, |
|
|
|||||
|
|
|
учитывающее |
всю |
специфику |
|
|
||||||
|
|
|
новой версии платформы Java |
|
|
||||||||
|
|
|
SE 6. |
|
|
|
|
|
|
|
|
|
|
8 |
Linux. |
Скотт |
Данная |
книга |
представляет |
NULL |
3 |
||||||
|
Необходим |
Граннеман |
собой |
краткое |
пособие |
по |
|
|
|||||
|
ый код и |
|
основным |
|
|
|
командам |
|
|
||||
|
команды. |
|
операционной системы Linux. |
|
|
||||||||
|
Карманный |
|
|
|
|
|
|
|
|
|
|
|
|
|
справочник |
|
|
|
|
|
|
|
|
|
|
|
|
3
Заполним таблицу sections соответствующими книгам тремя разделами (табл. 2).
Таблица 2 — Таблица sections базы данных library
id |
name |
1Биографии и мемуары
2 Фантастика
3Информационные технологии
Сохраним созданную в программе-дизайнере схему базы данных на локальный компьютер.
Запустим генерацию базы данных на сервере MySQL (Пункт меню: Database → Forward Engineer). В опциях поставим галки напротив пунктов
Generate INSERT statements for tables и DROP objects before each CREATE object.
Подключимся к базе данных MySQL (команда mysql -u root -p) и активизируем базу данных university (команда use library).
Для книги «Стив Джобс. Биография» в поле image введем соответствующее значение jobs.jpg. Для книги «Java 2. Библиотека профессионала. Том 1. Основы» в поле image введем соответствующее значение: java.jpg. Порядок выполнения представлен на рис. 1 и 2.
Рисунок 1 — Добавление путей к обложкам двух книг
4
Рисунок 2 — Просмотр изменений Далее организуем работу с веб-сервером.
Воспользуемся бесплатным веб-хостингом InfinityFree (https://infinityfree.net/). По итогу получим веб-сайт: http://ikpi85.rf.gd/.
Веб-сервер готов к работе. Настроим СУБД и соединение по FTP. Через веб-интерфейс СУБД под названием phpMyAdmin (на сервере)
добавим таблицы и содержащиеся в них данные (из MySQL Workbench) в базу данных (на сервере) посредством SQL-запросов. В MySQL Workbench, при нажатии ПКМ по таблицам, можно открыть меню, в котором есть два пункта: Copy SQL to Clipboard (для копирования структуры таблицы в буфер обмена) и Copy Inserts to Clipboard (для копирования данных таблицы в буфер обмена). В phpMyAdmin последовательно выполняем скопированные запросы, немного откорректировав их, и получаем нужный результат.
Соединение по FTP будем осуществлять через FileZilla.
В директории htdocs на сервере создадим PHP файл с именем library.php со следующим содержанием (табл. 3).
Таблица 3 — Файл library.php
<?php
$hostname = "sql302.epizy.com"; $username = "epiz_26964800"; $password = "N8OU6cnJjo";
$db = "epiz_26964800_library"; ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Библиотека</title>
5
</head>
<body>
<?
$conn = mysqli_connect($hostname, $username, $password, $db) or die(mysqli_connect_error($conn));
mysqli_set_charset($conn, "utf8");
$query = "SELECT * FROM sections ORDER BY id"; $result = mysqli_query($conn, $query);
echo "<form action='library.php' method='post' name='sections_form'>Жанры:";
echo "<select name='section'>";
$select_section = ($_POST["section"] == "") ? 1 : $_POST["section"]; for ($i = 0, $size = mysqli_num_rows($result); $i < $size; ++$i) {
$assoc_array = mysqli_fetch_assoc($result);
echo "<option value='" . $assoc_array['id'] . ($i + 1 == $select_section ? "' selected>" : "'>") . $assoc_array['name'] . "</option>";
}
echo "<input type='submit' value='Поиск...'/></select></form>"; echo "Результаты поиска:";
echo "<table border='1' cols='4' cellpadding='0' cellspacing='0'>"; echo "<tr><td>Обложка</td><td>Название</td><td>Автор</td><td>Описание</
td></tr>";
$section_id = ($_POST["section"] != "") ? $_POST["section"] : 1; $query = "SELECT * FROM books WHERE section_id = $section_id ORDER BY
id";
$result = mysqli_query($conn, $query); while ($row = mysqli_fetch_assoc($result)) {
echo "<tr><td>" . ($row["image"] == "" ? "No image" : "<img width='80' src='" . $row["image"] . "'></img>") . "</td>";
echo "<td>" . $row["name"] . "</td>"; echo "<td>" . $row["author"] . "</td>";
echo "<td>" . $row["description"] . "</td>"; echo "</tr>";
}
echo "</table>"; mysqli_close($conn); ?>
</body>
</html>
Откроем веб-страницу в браузере (рис. 3): http://ikpi85.rf.gd/library.php
Рисунок 3 — Книги жанра «Биографии и мемуары» 6
Выберем жанр «Фантастика» и нажмем кнопку «Поиск...» (рис. 4).
Рисунок 4 — Книги жанра «Фантастика» Выберем жанр «Информационные технологии» и нажмем кнопку
«Поиск...» (рис. 5).
Рисунок 5 — Книги жанра «Информационные технологии» Выводы
PHP — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков, применяющихся для создания динамических вебсайтов. Язык и его интерпретатор (Zend Engine) разрабатываются группой энтузиастов в рамках проекта с открытым кодом.
Работа происходит следующим образом. Сервер получает от клиента запрос (request), выполняет PHP-скрипт (в соответствии с запросом) при помощи интерпретатора, а затем отсылает клиенту ответ (response).
7
Название переменной в PHP всегда начинается со знака доллара. Например, $count. Тип переменной явно не указывается и может меняться по ходу выполнения скрипта.
Конкатенация строк осуществляется при помощи знака точки. Например, "Hello, " . "world" даст в результате строку "Hello, world".
Однострочный комментарий начинается со знаков // Многострочный комментарий начинается со знаков /* и заканчивается
знаками */
8