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

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

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

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

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

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

(СПбГУТ)

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

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

Лабораторная работа №7

по дисциплине: «Web-технологии»

на тему «Запросы SQL через PHP»

Выполнил:

Студент 3 курса группы ИКПИ – 32

Яковлев М. А.

___________________

(подпись)

Проверил:

Краева Е.В.

___________________

(подпись)

Цель работы

Получить представление о работе запросов. Написание запросов через PHP.

Анализ задачи

Упражнение 1. Знакомство с phpMyAdmin.

Рисунок 1.

Упражнение 2. Создание базы данных для сайта.

Рисунок 2.

Рисунок 3.

Упражнение 3. Написание запроса.

Рисунок 4.

Рисунок 5.

Упражнение 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.

У пражнение 5. Запись данных в БД.

Р исунок 7.

Рисунок 8.

<?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>

        <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.

У пражнение 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);

       

        // Запрос с хэшированным паролем

        $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"> Спорт

   

    <br><br>

    <input type="submit" value="Отправить в базу данных">

    <input type="reset" value="Очистить">

</form>

<?php

// Показываем пользователей с хэшированными паролями

$servername = "localhost";

$username = "root";

$password_db = "mysql";

$dbname = "users_1lab";

$conn = new mysqli($servername, $username, $password_db, $dbname);

if (!$conn->connect_error) {

    $result = $conn->query("SELECT * FROM users");

   

    if ($result->num_rows > 0) {

        echo "<h3>Пользователи с хэшированными паролями:</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()) {

            $short_hash = substr($row['password'], 0, 20) . '...';

            echo "<tr>";

            echo "<td>" . $row["id"] . "</td>";

            echo "<td>" . $row["login"] . "</td>";

            echo "<td title='" . $row['password'] . "'>" . $short_hash . "</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>

Приложение 3.

Итог

По итогу выполнения данной работы мы рассмотрели запросы SQL через PHP. По окончании работы ответьте на контрольные вопросы для закрепления знаний. Отчет по практическому заданию должен содержать описание ваших действий при выполнении практического задания с приложенным итоговым скриншотом экрана и фрагментов кода.