Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы. Краева / Web-технологии. Отчет №8.docx
Скачиваний:
1
Добавлен:
29.11.2025
Размер:
375.48 Кб
Скачать

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

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

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

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

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

(СПбГУТ)

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

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

Лабораторная работа №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. По окончании работы ответьте на контрольные вопросы для закрепления знаний. Отчет по практическому заданию должен содержать описание ваших действий при выполнении практического задания с приложенным итоговым скриншотом экрана и фрагментов кода.