Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы. Краева / Web-технологии. Отчет №7

.pdf
Скачиваний:
0
Добавлен:
25.11.2025
Размер:
2.28 Mб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Факультет Информационных технологий и программной инженерии Кафедра программной инженерии и вычислительной техники

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