Лабораторные работы. Краева / Web-технологии. Отчет №7
.pdfМинистерство цифрового развития, связи и массовых коммуникаций Российской Федерации
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет Информационных технологий и программной инженерии Кафедра программной инженерии и вычислительной техники
ЛАБОРАТОРНАЯ РАБОТА №7
по дисциплине: «Web-технологии»
на тему «Запросы SQL через PHP»
Выполнил:
Студент 3 курса группы ИКПИ – 32
Яковлев М. А.
___________________
(подпись)
Проверил:
Краева Е.В.
___________________
(подпись)
Санкт-Петербург
2025
Цель работы
Получить представление о работе запросов. Написание запросов через
PHP.
Анализ задачи
Упражнение 1. Знакомство с phpMyAdmin.
Рисунок 1.
1
Упражнение 2. Создание базы данных для сайта.
Рисунок 2.
Рисунок 3.
2
Упражнение 3. Написание запроса.
Рисунок 4.
Рисунок 5.
3
Упражнение 4. Подключение к БД. Вывод данных.
Рисунок 6.
<?php
// параметры подключения к базе данных $host = '127.0.0.1';
$port = 3306; $user = 'root'; $pass = 'mysql'; $db = 'SocialSite';
// устанавливаем соединение
$conn = mysqli_connect($host, $user, $pass, $db, $port); if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// выполнение SQL-запроса, выбирающего необходимые поля $sql = "SELECT id, nickname, login, email, status FROM Users"; $result = mysqli_query($conn, $sql);
if ($result && mysqli_num_rows($result) > 0) { // выводим таблицу с данными
echo "<table border='1' cellpadding='6'>"; echo
"<tr><th>ID</th><th>Nickname</th><th>Login</th><th>Email</th><th>Status</th></tr>"; while ($row = mysqli_fetch_assoc($result)) {
echo "<tr>"
. "<td>" . htmlspecialchars($row['id']) . "</td>"
. "<td>" . htmlspecialchars($row['nickname']) . "</td>"
. "<td>" . htmlspecialchars($row['login']) . "</td>"
. "<td>" . htmlspecialchars($row['email']) . "</td>"
. "<td>" . htmlspecialchars($row['status']) . "</td>"
. "</tr>";
}
echo "</table>"; } else {
echo "0 results";
}
// закрываем соединение mysqli_close($conn);
?>
Приложение 1.
4
Упражнение 5. Запись данных в БД.
Рисунок 7.
Рисунок 8.
5
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") { $servername = "localhost";
$username = "root"; $password = "mysql"; $dbname = "users_1lab";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Ошибка подключения: " . $conn->connect_error);
}
//Получаем данные из формы $login = $_POST['login'];
$password_value = $_POST['password']; $country = $_POST['country'];
$mail = $_POST['mail']; $age = $_POST['age'];
$hobby = isset($_POST['hobby']) ? implode(', ', (array)$_POST['hobby']) : '';
//Запрос для добавления данных
$sql = "INSERT INTO users (login, password, country, mail, age, hobby) VALUES ('$login', '$password_value', '$country', '$mail', '$age',
'$hobby')";
if ($conn->query($sql) === TRUE) {
echo "Данные успешно записаны в базу users_1lab!<br><br>"; } else {
echo "Ошибка: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
?>
<html>
<head>
<title>Упражнение 5</title> </head>
<body>
<h2>Упражнение 5: Запись данных в БД users_1lab</h2> <p>Форма из лабораторной работы №1</p>
<form method="post" action=""> <h3>Анкета пользователя</h3> <table>
<tr>
<td>Логин:</td>
<td><input type="text" name="login" size="30" required></td> <td>Пароль:</td>
<td><input type="password" name="password" size="10" required></td> </tr>
<tr>
<td>Город:</td> <td>
<select name="country">
<option value="Москва">Москва</option>
<option value="Санкт-Петербург" selected>Санкт-Петербург</option> <option value="Казань">Казань</option>
<option value="Мурманск">Мурманск</option> <option value="Другой">Другой...</option>
</select>
</td>
</tr>
6
<tr>
<td>Почта:</td>
<td><input type="email" name="mail" size="30" required></td> </tr>
</table>
<h4>Укажите свою возрастную группу</h4>
<input type="radio" name="age" value="child"> 7-12 лет
<input type="radio" name="age" value="junior" checked> 13-20 лет <input type="radio" name="age" value="adult"> от 20 лет
<h4>Укажите свои увлечения</h4>
<input type="checkbox" name="hobby[]" value="computers"> Компьютеры <input type="checkbox" name="hobby[]" value="art"> Литература <input type="checkbox" name="hobby[]" value="music"> Музыка
<input type="checkbox" name="hobby[]" value="avto"> Автомобили <input type="checkbox" name="hobby[]" value="sport"> Спорт
<br><br>
<input type="submit" value="Отправить в базу данных"> <input type="reset" value="Очистить">
</form>
<?php
// Показываем текущих пользователей из базы $servername = "localhost";
$username = "root"; $password = "mysql"; $dbname = "users_1lab";
$conn = new mysqli($servername, $username, $password, $dbname);
if (!$conn->connect_error) {
$result = $conn->query("SELECT * FROM users");
if ($result->num_rows > 0) {
echo "<h3>Текущие пользователи в базе users_1lab:</h3>"; echo "<table border='1'>";
echo "<tr><th>ID</th><th>Логин</th><th>Пароль</th><th>Город</th><th>Email</th><th>Возраст</ th><th>Хобби</th></tr>";
while($row = $result->fetch_assoc()) { echo "<tr>";
echo "<td>" . $row["id"] . "</td>"; echo "<td>" . $row["login"] . "</td>";
echo "<td>" . $row["password"] . "</td>"; echo "<td>" . $row["country"] . "</td>"; echo "<td>" . $row["mail"] . "</td>"; echo "<td>" . $row["age"] . "</td>"; echo "<td>" . $row["hobby"] . "</td>"; echo "</tr>";
}
echo "</table>"; } else {
echo "<p>В базе данных пока нет пользователей.</p>";
}
$conn->close();
}
?>
</body>
</html>
Приложение 2.
7
Упражнение 6. Хэширование паролей. Установка длины логина и пароля.
Рисунок 9.
<?php
function validateCredentials($login, $password) { $errors = [];
if (strlen($login) < 3 || strlen($login) > 15) {
$errors[] = "Логин должен содержать от 3 до 15 символов";
}
if (strlen($password) < 10 || strlen($password) > 15) { $errors[] = "Пароль должен содержать от 10 до 15 символов";
}
return $errors;
}
// Обработка формы
if ($_SERVER["REQUEST_METHOD"] == "POST") { $servername = "localhost";
$username = "root"; $password_db = "mysql"; $dbname = "users_1lab";
$conn = new mysqli($servername, $username, $password_db, $dbname);
if ($conn->connect_error) {
die("Ошибка подключения: " . $conn->connect_error);
}
//Получаем данные из формы $login = $_POST['login'];
$password_value = $_POST['password']; $country = $_POST['country'];
$mail = $_POST['mail']; // Исправлено здесь $age = $_POST['age'];
$hobby = isset($_POST['hobby']) ? implode(', ', (array)$_POST['hobby']) : '';
//Валидация данных
$validationErrors = validateCredentials($login, $password_value);
if (empty($validationErrors)) { // Хэширование пароля
$hashed_password = password_hash($password_value, PASSWORD_DEFAULT);
8
// Запрос с хэшированным паролем
$sql = "INSERT INTO users (login, password, country, mail, age, hobby) VALUES ('$login', '$hashed_password', '$country', '$mail', '$age',
'$hobby')";
if ($conn->query($sql) === TRUE) {
echo "Пользователь добавлен! Пароль хэширован.<br><br>"; } else {
echo "Ошибка: " . $conn->error;
}
}else {
//Показываем ошибки валидации
foreach ($validationErrors as $error) { echo $error . "<br>";
}
echo "<br>";
}
$conn->close();
}
?>
<html>
<head>
<title>Упражнение 6</title> </head>
<body>
<h2>Упражнение 6: Хэширование паролей</h2>
<p>Форма из лабораторной работы №1 с хэшированием паролей</p>
<form method="post" action=""> <h3>Анкета пользователя</h3> <table>
<tr>
<td>Логин (3-15 символов):</td>
<td><input type="text" name="login" size="30" required></td> <td>Пароль (10-15 символов):</td>
<td><input type="password" name="password" size="10" required></td> </tr>
<tr>
<td>Город:</td> <td>
<select name="country">
<option value="Москва">Москва</option>
<option value="Санкт-Петербург" selected>Санкт-Петербург</option> <option value="Казань">Казань</option>
<option value="Мурманск">Мурманск</option> <option value="Другой">Другой...</option>
</select>
</td>
</tr>
<tr>
<td>Почта:</td>
<td><input type="email" name="mail" size="30" required></td> </tr>
</table>
<h4>Укажите свою возрастную группу</h4>
<input type="radio" name="age" value="child"> 7-12 лет
<input type="radio" name="age" value="junior" checked> 13-20 лет <input type="radio" name="age" value="adult"> от 20 лет
<h4>Укажите свои увлечения</h4>
<input type="checkbox" name="hobby[]" value="computers"> Компьютеры <input type="checkbox" name="hobby[]" value="art"> Литература <input type="checkbox" name="hobby[]" value="music"> Музыка
<input type="checkbox" name="hobby[]" value="avto"> Автомобили <input type="checkbox" name="hobby[]" value="sport"> Спорт
9
