Лабораторные работы. Краева / Web-технологии. Отчет №8
.pdfМинистерство цифрового развития, связи и массовых коммуникаций Российской Федерации
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет Информационных технологий и программной инженерии
Кафедра программной инженерии и вычислительной техники
ЛАБОРАТОРНАЯ РАБОТА №8
по дисциплине: «Web-технологии»
на тему « Авторизация и Регистрация пользователей на PHP»
Выполнил:
Студент 3 курса группы ИКПИ – 32
Яковлев М. А.
___________________
(подпись)
Проверила:
Краева Е.В.
___________________
(подпись)
Санкт-Петербург
2025
|
Содержание |
Содержание ...................................................................................................... |
2 |
Цель работы ..................................................................................................... |
1 |
Анализ задачи .................................................................................................. |
1 |
Итог................................................................................................................... |
7 |
Приложение...................................................................................................... |
7 |
Цель работы
Освоение базовых принципов разработки веб-приложений с использованием PHP, изучение методов реализации регистрации и авторизации пользователей.
Анализ задачи
Упражнение 1. Создание базы данных и таблицы users.
Рисунок 1.
Упражнение 2. Подключение к базе данных.
<?php
// config.php - подключение к базе данных
$host = 'localhost'; $dbname = 'webauth'; $username = 'root'; $password = 'mysql';
try {
// безопасный способ работы с бд
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) {
// немедленно прерывает выполнение скрипта и выводит сообщение die("Ошибка подключения: " . $e->getMessage());
}
?>
Приложение 1.
1
Упражнение 3. Форма регистрации и обработка данных.
Рисунок 2.
p<!DOCTYPE html>
<html lang="ru"> <head>
<meta charset="UTF-8"> <title>Регистрация</title>
</head>
<body>
<h2>Форма регистрации</h2>
<form action="register.php" method="post">
<label for="username">Имя пользователя:</label><br> <input type="text" name="username" required><br>
<label for="email">Email:</label><br>
<input type="email" name="email" required><br>
<label for="password">Пароль:</label><br>
<input type="password" name="password" required><br>
<button type="submit">Зарегистрироваться</button> </form>
<p>Уже есть аккаунт? <a href="login.html">Войдите</a></p> </body>
</html>
Приложение 2.
?p<?php
// register.php - обработка регистрации require_once 'config.php';
2
if ($_SERVER['REQUEST_METHOD'] == 'POST') { $username = trim($_POST['username']); $email = trim($_POST['email']);
$password = $_POST['password'];
// Проверка на пустые поля
if (empty($username) || empty($email) || empty($password)) { die("Все поля обязательны для заполнения");
}
// Хэширование пароля
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
try {
// Проверка на уникальность username и email
$stmt = $pdo->prepare("SELECT id FROM users WHERE username = ? OR email = ?"); $stmt->execute([$username, $email]);
if ($stmt->rowCount() > 0) {
die("Пользователь с таким именем или email уже существует");
}
// Добавление пользователя в базу
$stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)"); $stmt->execute([$username, $email, $hashed_password]);
echo "Регистрация успешна! <a href='login.html'>Войдите</a>";
} catch(PDOException $e) {
die("Ошибка регистрации: " . $e->getMessage());
}
}
?>
Приложение 3.
3
Упражнение 4. Формы входа и обработки авторизации.
Рисунок 5.
<!DOCTYPE html>
<html lang="ru"> <head>
<meta charset="UTF-8"> <title>Вход</title>
</head>
<body>
<h2>Форма входа</h2>
<form action="login.php" method="post">
<label for="username">Имя пользователя:</label><br> <input type="text" name="username" required><br>
<label for="password">Пароль:</label><br>
<input type="password" name="password" required><br>
<button type="submit">Войти</button> </form>
<p>Нет аккаунта? <a href="index.html">Зарегистрируйтесь</a></p> </body>
</html>
Приложение 4.
<?php
// login.php - обработка авторизации session_start();
require_once 'config.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') { $username = trim($_POST['username']); $password = $_POST['password'];
4
if (empty($username) || empty($password)) { die("Все поля обязательны для заполнения");
}
try {
// Поиск пользователя в базе
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?"); $stmt->execute([$username]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user && password_verify($password, $user['password'])) { // Успешная авторизация
$_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; header("Location: dashboard.php");
exit(); } else {
die("Неверное имя пользователя или пароль");
}
} catch(PDOException $e) {
die("Ошибка авторизации: " . $e->getMessage());
}
}
?>
Приложение 5.
Упражнение 5. Страница профиля пользователя.
Рисунок 5.
<?php
// dashboard.php - страница профиля
5
session_start();
// Проверка авторизации
if (!isset($_SESSION['user_id'])) { header("Location: login.html"); exit();
}
require_once 'config.php';
// Получение данных пользователя try {
$stmt = $pdo->prepare("SELECT username, email FROM users WHERE id = ?"); $stmt->execute([$_SESSION['user_id']]);
$user = $stmt->fetch(PDO::FETCH_ASSOC); } catch(PDOException $e) {
die("Ошибка получения данных: " . $e->getMessage());
}
?>
<!DOCTYPE html> <html lang="ru"> <head>
<meta charset="UTF-8"> <title>Профиль</title>
</head>
<body>
<h2>Добро пожаловать, <?php echo htmlspecialchars($user['username']); ?>!</h2>
<h3>Ваши данные:</h3>
<p><strong>Имя пользователя:</strong> <?php echo htmlspecialchars($user['username']); ?></p>
<p><strong>Email:</strong> <?php echo htmlspecialchars($user['email']); ?></p>
<br>
<a href="logout.php">Выйти</a> </body>
</html>
<?php
//logout.php - выход из системы session_start();
//Удаление всех данных сессии $_SESSION = array();
//Уничтожение сессии
session_destroy();
// Перенаправление на страницу входа header("Location: login.html");
6
exit();
?>
Приложение 6.
Итог
По итогу выполнения данной работы рассмотрены регистрация и авторизация, создание форм ввода данных, обработка запросов на сервере с использованием PHP. По окончании работы ответьте на контрольные вопросы для закрепления знаний. Отчет по практическому заданию должен содержать описание ваших действий при выполнении практического задания с приложенным итоговым скриншотом экрана и фрагментов кода.
Приложение
Index.html
1.< <!DOCTYPE html>
2.<html lang="ru">
3.<head>
4.<meta charset="UTF-8">
5.<title>Регистрация</title>
6.</head>
7.<body>
8.<h2>Форма регистрации</h2>
9.<form action="register.php" method="post">
10.<label for="username">Имя пользователя:</label><br>
11.<input type="text" name="username" required><br>
13.<label for="email">Email:</label><br>
14.<input type="email" name="email" required><br>
16.<label for="password">Пароль:</label><br>
17.<input type="password" name="password" required><br>
19.<button type="submit">Зарегистрироваться</button>
20.</form>
21.<p>Уже есть аккаунт? <a href="login.html">Войдите</a></p>
22.</body>
23.</html>
24.
Login.html
1. <!DOCTYPE html>
7
2.<html lang="ru">
3.<head>
4.<meta charset="UTF-8">
5.<title>Вход</title>
6.</head>
7.<body>
8.<h2>Форма входа</h2>
9.<form action="login.php" method="post">
10.<label for="username">Имя пользователя:</label><br>
11.<input type="text" name="username" required><br>
12.
13.<label for="password">Пароль:</label><br>
14.<input type="password" name="password" required><br>
16.<button type="submit">Войти</button>
17.</form>
18.<p>Нет аккаунта? <a href="index.html">Зарегистрируйтесь</a></p>
19.</body>
20.</html>
21.
config.php
1.<? <?php
2.// config.php - подключение к базе данных
4.$host = 'localhost';
5.$dbname = 'webauth';
6.$username = 'root';
7.$password = 'mysql';
8.
9.try {
10.$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
11.$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
12.} catch(PDOException $e) {
13.die("Ошибка подключения: " . $e->getMessage());
14.}
15.?>
16.
8
