Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Готовые отчеты / Базы данных. Лабораторная работа 8

.pdf
Скачиваний:
33
Добавлен:
29.01.2021
Размер:
667.77 Кб
Скачать

Федеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Факультет инфокоммуникационных сетей и систем Кафедра фотоники и линий связи

ЛАБОРАТОРНАЯ РАБОТА №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