Пользователь
- Регистрация
- 30 Мар 2023
- Сообщения
- 78
- Автор темы
- #1
Категорически, всех приветствую! Только начал заниматься Web-Программированием, и хочешь , разобраться с Mysql , в PHP? Урок точно для тебя.
#1 - Hosting/Localhost с сервером PhpMyAdmin (MySQL\MariaDB)
Наилучший вариант, будет какой нибудь Хостинг, с панелью ISPManager 6-го поколения,
почему? - потому что нам не придется, морочиться с установкой MariaDB , мы получаем готовый хост, со всем готовым. (Хостинг с ISPManager)
Если же нету 25-ти рублей на Хост, от рассмотрим Локальный сервер, на помощь придет утилита Денвер (*тык*),
Денвер - это специальная утилита, которая помогает, развернуть свой сервер, прямо у вас на ПК, Денвер - предоставит нам систему бд MySQL 5.5, а PhpMyAdmin 3.5, не вкусно - но пойдет.
Наилучший вариант, будет какой нибудь Хостинг, с панелью ISPManager 6-го поколения,
почему? - потому что нам не придется, морочиться с установкой MariaDB , мы получаем готовый хост, со всем готовым. (Хостинг с ISPManager)
Если же нету 25-ти рублей на Хост, от рассмотрим Локальный сервер, на помощь придет утилита Денвер (*тык*),
Денвер - это специальная утилита, которая помогает, развернуть свой сервер, прямо у вас на ПК, Денвер - предоставит нам систему бд MySQL 5.5, а PhpMyAdmin 3.5, не вкусно - но пойдет.
#2 - Настраиваем Базу Данных
Первым делом, нам необходимо создать Базу данных , показывать буду на примере Хостинга,
Переходим в панель, и жмем "Базы Данных";
Создаем базу данных;
Указываем все поля, (примечание: для обучения - можно использовать одно имя, во все столбцы)
После создания, заходим в саму Базу данных, и делаем SQL-Запрос;
Первым делом, нам необходимо создать Базу данных , показывать буду на примере Хостинга,
Переходим в панель, и жмем "Базы Данных";
Создаем базу данных;
Указываем все поля, (примечание: для обучения - можно использовать одно имя, во все столбцы)
После создания, заходим в саму Базу данных, и делаем 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
);
Данный код , создаст нам таблицу users, со следующими в ней значениями: ID - Айди аккаунта, Username - Логин, password - Пароль (будет хешироваться), email - электронная почта, created_at - Дата создания аккаунта.
Естественно, вы можете подкорректировать запрос под себя, но код который мы будем писать, будет адаптирован под этот запрос.
Естественно, вы можете подкорректировать запрос под себя, но код который мы будем писать, будет адаптирован под этот запрос.
#3 - Пишем код
Бинго, мы почти у цели. Осталось написать код, который будет делать POST-Запрос, к нашей Базе Данных, и проверить работу,
Но сначала создадим , Конфигурационный файл бд, я назову его: db.php;
Бинго, мы почти у цели. Осталось написать код, который будет делать 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>
((ПОСЛЕ РЕГИСТРАЦИИ - УБЕЖДАЕМСЯ, ЧТО ЮЗЕР СОЗДАН!))
Теперь же, давайте разберем основные части , 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>
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.
простыми словами - производит поиск, указанного 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>
Это личный кабинет, по сути , тут нету исполняемых запросов, к бд,
что-же, можете играться.
Я надеюсь, мой туториал - хоть кому то помог,
хоть я тут нихуя дельного то и не рассказал, а тупо насрал кодом, и обьяснил че за код, но надеюсь, что мб кому то да и поможет :=)
бонусом еще logout.php, хоть он и не нужен, но пускай будет , лол.
PHP:
<?php
session_start();
session_destroy();
header("Location: login.php");
?>
Автор мануала: pikamonov
Ресурс мануала: pawno-help.ru
При пересливе, указывать автора,
Пример: автор: pikamonov, оригинальный ресурс: pawno-help.ru