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

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

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

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

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

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

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

mysqli_close

Рисунок 2 — Результат добавления записей Выводы

Функция mysqli_connect используется для установления соединения с MySQL и позволяет выбрать базу данных.

Функция используется для закрытия соединения с MySQL.

Функция mysqli_query позволяет выполнить SQL запрос.

Функция mysqli_fetch_assoc позволяет извлекать строку результата в ассоциативный массив. При этом внутренний указатель смещается на следующую строку (или NULL, если строки закончились).

Функция mysqli_fetch_row позволяет извлекать строку результата в индексируемый массив. При этом внутренний указатель смещается на следующую строку (или NULL, если строки закончились).

5