Готовые отчеты / Базы данных. Лабораторная работа 9
.pdfФедеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Факультет инфокоммуникационных сетей и систем Кафедра фотоники и линий связи
ЛАБОРАТОРНАЯ РАБОТА №9 по дисциплине «Базы данных»
на тему «Изменение данных в MySQL с помощью PHP скрипта»
Выполнили: студенты 3-го курса дневного отделения группы ИКПИ-85 Ежуров Антон Павлович
Коваленко Леонид Александрович Преподаватель:
ассистент кафедры ПИиВТ Овчинников Антон Олегович
Санкт-Петербург 2020
Цель работы
Получить практические навыки в создании PHP скриптов, позволяющих вносить изменения и осуществлять динамический вывод данных из таблиц MySQL.
Ход работы
Создадим базу данных phonebook в программе-дизайнере MySQL Workbench. В этой базе данных создадим таблицу numbers (кодировка
utf8_general_ci) с полями:
1.id типа INT, первичный ключ (PK), счетчик (AI);
2.area_code типа INT(3), ненулевое (NN);
3.phone_number типа VARCHAR(7), ненулевое (NN), кодировка UTF-8;
4.name типа VARCHAR(255), ненулевое (NN), кодировка UTF-8;
5.group_id типа INT.
Вэтой базе данных создадим таблицу groups (кодировка
utf8_general_ci) с полями:
1.id типа INT, первичный ключ (PK), счетчик (AI);
2.name типа VARCHAR(255), ненулевое (NN), кодировка UTF-8.
Заполним таблицу groups названиями пяти разделов телефонной книги (табл. 1).
Таблица 1 — Таблица groups базы данных phonebook
id name
1Родственники
2 Друзья
3Универсанты
4 Коллеги
5Руководители
Сохраним созданную в программе-дизайнере схему базы данных на локальный компьютер.
Запустим генерацию базы данных на сервере MySQL (Пункт меню: Database → Forward Engineer). В опциях поставим галки напротив пунктов
Generate INSERT statements for tables и DROP objects before each CREATE object.
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 файл с именем phonebook.php со следующим содержанием (табл. 2).
Таблица 2 — Файл phonebook.php
<?php
$hostname = "sql302.epizy.com"; $username = "epiz_26964800"; $password = "N8OU6cnJjo";
$db = "epiz_26964800_phonebook"; ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Телефонная книга</title>
</head>
<body>
<?
$conn = mysqli_connect($hostname, $username, $password, $db) or die(mysqli_connect_error($conn));
mysqli_set_charset($conn, "utf8");
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = mysqli_real_escape_string($conn, $_POST["name"]); $area_code = mysqli_real_escape_string($conn, $_POST["area_code"]); $phone_number = mysqli_real_escape_string($conn,
$_POST["phone_number"]);
$group_id = mysqli_real_escape_string($conn, $_POST["group_id"]); if (!empty($name) && !empty($area_code) && !empty($phone_number)) { $query = "INSERT INTO numbers (name, area_code, phone_number,
group_id) VALUES ('$name', $area_code, '$phone_number', '$group_id')"; mysqli_query($conn, $query) or die(mysqli_error($conn));
}
}
$query = "SELECT numbers.name number_name, numbers.area_code, numbers.phone_number, groups.name group_name FROM numbers LEFT JOIN groups ON groups.id=numbers.group_id ORDER BY numbers.name";
3
$result = mysqli_query($conn, $query); if (mysqli_num_rows($result) != 0) {
echo "<table border='1' cols='4' cellpadding='10' cellspacing='0'><tr><td>Имя</td><td>Код зоны</td><td>Номер</td><td>Группа</td></tr>";
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr><td>" . $row["number_name"] . "</td>"; echo "<td>" . $row["area_code"] . "</td>";
echo "<td>" . $row["phone_number"] . "</td>"; echo "<td>" . $row["group_name"] . "</td></tr>";
}
echo "</table>";
}
else echo "<p>Пустая телефонная книга.</p>";
echo "<form action='phonebook.php' method='post' name='phonebook_form'>"; echo "<table border='0' cols='4' cellpadding='0' cellspacing='0'
width='400'><tr>";
echo "<td>Имя: <input type='text' name='name' maxlength='255'></td>"; echo "<td>Код зоны: <input type='text' name='area_code'
maxlength='3'></td>";
echo "<td>Номер: <input type='text' name='phone_number' maxlength='7'></td>";
echo "<td>Группа: <select name='group_id'>"; $query = "SELECT * FROM groups ORDER BY name"; $result = mysqli_query($conn, $query);
while ($row = mysqli_fetch_assoc($result)) {
echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>";
}
echo "</select></td></tr></table>";
echo "<table border='0' cols='3' cellpadding='0' cellspacing='0'><tr><td><input type='submit' name='insert' value='Вставить'></td></tr></table></form>";
mysqli_close($conn); ?>
</body>
</html>
Откроем веб-страницу в браузере (рис. 1): http://ikpi85.rf.gd/phonebook.php
Рисунок 1 — Первоначальное отображение Добавим семь записей в таблицу с разными группами (рис. 2).
4
Рисунок 2 — Результат добавления записей Выводы
Функция mysqli_connect используется для установления соединения с MySQL и позволяет выбрать базу данных.
Функция используется для закрытия соединения с MySQL.
Функция mysqli_query позволяет выполнить SQL запрос.
Функция mysqli_fetch_assoc позволяет извлекать строку результата в ассоциативный массив. При этом внутренний указатель смещается на следующую строку (или NULL, если строки закончились).
Функция mysqli_fetch_row позволяет извлекать строку результата в индексируемый массив. При этом внутренний указатель смещается на следующую строку (или NULL, если строки закончились).
5