Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Пользователь
Регистрация
30 Мар 2023
Сообщения
78
Категорически, всех приветствую! Только начал заниматься Web-Программированием, и хочешь , разобраться с Mysql , в PHP? Урок точно для тебя.



#1 - Hosting/Localhost с сервером PhpMyAdmin (MySQL\MariaDB)
Наилучший вариант, будет какой нибудь Хостинг, с панелью ISPManager 6-го поколения,
почему? - потому что нам не придется, морочиться с установкой MariaDB , мы получаем готовый хост, со всем готовым. (Хостинг с ISPManager)

Если же нету 25-ти рублей на Хост, от рассмотрим Локальный сервер, на помощь придет утилита Денвер (*тык*),
Денвер - это специальная утилита, которая помогает, развернуть свой сервер, прямо у вас на ПК, Денвер - предоставит нам систему бд MySQL 5.5, а PhpMyAdmin 3.5, не вкусно - но пойдет.




#2 - Настраиваем Базу Данных
Первым делом, нам необходимо создать Базу данных , показывать буду на примере Хостинга,
Переходим в панель, и жмем "Базы Данных";
1729641289158.png

Создаем базу данных;
Указываем все поля, (примечание: для обучения - можно использовать одно имя, во все столбцы)

1729641385895.png

После создания, заходим в саму Базу данных, и делаем SQL-Запрос;
SQL:
CREATE TABLE `users` (
    `id` INT(11) AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(50) NOT NULL,
    `password` VARCHAR(255) NOT NULL,
    `email` VARCHAR(100) NOT NULL,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

1729641608071.png

Данный код , создаст нам таблицу users, со следующими в ней значениями: ID - Айди аккаунта, Username - Логин, password - Пароль (будет хешироваться), email - электронная почта, created_at - Дата создания аккаунта.
Естественно, вы можете подкорректировать запрос под себя, но код который мы будем писать, будет адаптирован под этот запрос.




#3 - Пишем код
Бинго, мы почти у цели. Осталось написать код, который будет делать POST-Запрос, к нашей Базе Данных, и проверить работу,

Но сначала создадим , Конфигурационный файл бд, я назову его: db.php;
PHP:
<?php
$host = 'localhost';
$db = 'Название Таблицы';
$user = 'Логин администратора';
$pass = 'Пароль для входа';

try {
    $conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Ошибка подключения: " . $e->getMessage();
}
?>


Настроили? Отлично!
теперь же пишем форму регистрации, которая будет содержать и элементы HTML\CSS, и POST-Запрос к БД
PHP:
<?php
include 'db.php';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT);  // Хэшируем пароль

    $sql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)";
    $stmt = $conn->prepare($sql);
    if ($stmt->execute([$username, $email, $password])) {
        echo "Регистрация прошла успешно!";
    } else {
        echo "Ошибка регистрации!";
    }
}
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Регистрация</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container">
        <h2>Регистрация</h2>
        <form method="POST" action="register.php">
            <div class="mb-3">
                <label for="username" class="form-label">Имя пользователя</label>
                <input type="text" class="form-control" id="username" name="username" required>
            </div>
            <div class="mb-3">
                <label for="email" class="form-label">Email</label>
                <input type="email" class="form-control" id="email" name="email" required>
            </div>
            <div class="mb-3">
                <label for="password" class="form-label">Пароль</label>
                <input type="password" class="form-control" id="password" name="password" required>
            </div>
            <button type="submit" class="btn btn-primary">Зарегистрироваться</button>
        </form>
    </div>
</body>
</html>

1729642940847.png

1729642984699.png
((ПОСЛЕ РЕГИСТРАЦИИ - УБЕЖДАЕМСЯ, ЧТО ЮЗЕР СОЗДАН!))

Теперь же, давайте разберем основные части , PHP-кода, который работает с БД.

"if ($_SERVER['REQUEST_METHOD'] == 'POST') {" - этим куском кода, мы проверяем - был ли отправлен POST Запрос, юзаем для того, что бы данные с формы - успешно отправлены,и сервер мог начать обработку, следующим куском кода,


"$password = password_hash($_POST['password'], PASSWORD_BCRYPT);" - тут же, мы сохраняем пароль, в бд - но перед этим, Хешируем его методом BCRYPT, и только позже, передаем на сервер,

"$sql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)"; $stmt = $conn->prepare($sql);" - и наконец наш SQL-Запрос, с созданием Юзера, из всех полученных данных.

Спросите что за ? ? ? ?,
Это плейсхолдеры, какая никакая , но легкая защита от SQL-Инъекций.



Теперь же, напишем систему Авторизации ,и так же пройдемся по PHP-Куску,
PHP:
<?php
include 'db.php';
session_start();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $sql = "SELECT * FROM users WHERE username = ?";
    $stmt = $conn->prepare($sql);
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        header("Location: profile.php");
    } else {
        echo "Неверное имя пользователя или пароль!";
    }
}
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Вход</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container">
        <h2>Вход</h2>
        <form method="POST" action="login.php">
            <div class="mb-3">
                <label for="username" class="form-label">Имя пользователя</label>
                <input type="text" class="form-control" id="username" name="username" required>
            </div>
            <div class="mb-3">
                <label for="password" class="form-label">Пароль</label>
                <input type="password" class="form-control" id="password" name="password" required>
            </div>
            <button type="submit" class="btn btn-primary">Войти</button>
        </form>
    </div>
</body>
</html>

1729643102740.png
SQL:
$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $conn->prepare($sql);
$stmt->execute([$username]);

Функция prepare(), готовит запрос к выполнению, а затем execute([$username]) подставляет значение переменной $username и выполняет запрос,
простыми словами - производит поиск, указанного username.


"$user = $stmt->fetch();" - fetch() извлекает первую найденную строку из результата запроса (данные пользователя, если они найдены), В результате переменная $user будет содержать массив данных о пользователе,

"if ($user && password_verify($password, $user['password'])) {" - получаем пароль ,веденный с формы - хешируем, и сверяем с тем, что в базе данных,

"$_SESSION['user_id'] = $user['id']; header("Location: profile.php");" - если данные верные, то скрипт авторизирует пользователя, и редиректит его в profile.php.

PHP:
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}

echo "Добро пожаловать в личный кабинет!";
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Личный кабинет</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container">
        <h2>Личный кабинет</h2>
        <p>тут нихуя нельзя делать, он так, для красоты ебнут за две минуты лол</p>
        <a href="logout.php" class="btn btn-danger">Выйти</a>
    </div>
</body>
</html>

1729643121076.png

Это личный кабинет, по сути , тут нету исполняемых запросов, к бд,
что-же, можете играться.

Я надеюсь, мой туториал - хоть кому то помог,

хоть я тут нихуя дельного то и не рассказал, а тупо насрал кодом, и обьяснил че за код, но надеюсь, что мб кому то да и поможет :=)


бонусом еще logout.php, хоть он и не нужен, но пускай будет , лол.
PHP:
<?php
session_start();
session_destroy();
header("Location: login.php");
?>





Автор мануала: pikamonov
Ресурс мануала: pawno-help.ru
При пересливе, указывать автора,
Пример: автор: pikamonov, оригинальный ресурс: pawno-help.ru



 

Вложения

  • 1729643077702.png
    1729643077702.png
    19.2 KB · Просмотры: 16
  • 1729643118484.png
    1729643118484.png
    14.4 KB · Просмотры: 15
Пользователь
Регистрация
20 Фев 2023
Сообщения
91
OFFTOP

Сейчас бы юзать денвер когда есть openserver or XAMMP
Может Six?1729664398135.png

 
Сверху