Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет Информационных технологий и программной инженерии
Кафедра программной инженерии и вычислительной техники
Лабораторная работа №8
по дисциплине: «Web-технологии»
на тему « Авторизация и Регистрация пользователей на PHP»
Выполнил:
Студент 3 курса группы ИКПИ – 32
Яковлев М. А.
___________________
(подпись)
Проверила:
Краева Е.В.
___________________
(подпись)
Содержание
Содержание 2
Цель работы 1
Анализ задачи 1
Итог 7
Приложение 8
Цель работы
Освоение базовых принципов разработки веб-приложений с использованием 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.
У
пражнение
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';
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.
Упражнение
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'];
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 - страница профиля 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"); exit(); ?>
|
Приложение 6.
Итог
По итогу выполнения данной работы рассмотрены регистрация и авторизация, создание форм ввода данных, обработка запросов на сервере с использованием PHP. По окончании работы ответьте на контрольные вопросы для закрепления знаний. Отчет по практическому заданию должен содержать описание ваших действий при выполнении практического задания с приложенным итоговым скриншотом экрана и фрагментов кода.
