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

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

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

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

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

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

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

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

(СПбГУТ)

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

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

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