MyTetra Share
Делитесь знаниями!
Вход/Регистрация на PHP + MySQL за 20 минут
Время создания: 18.12.2021 16:15
Автор: alensav
Текстовые метки: Вход/Регистрация на PHP + MySQL за 20 минут
Раздел: UCHEBA_PHP
Запись: alensav/MyTetra2/main/base/1639833329bugswppcp0/text.html на raw.githubusercontent.com

Вход/Регистрация на PHP + MySQL за 20 минут

Здравствуйте! Облазил множество ресурсов, но так и не нашел ни одной полезной, правильной, легкой и работающей статьи на тему “Как сделать Вход и Регистрацию на сайте”.

Что будет использоваться? Использоваться будет только HTML + Bootstrap, а также PHP + MySQL.

Какие возможности будут у данной формы? Пользователь сможет зарегистрироваться, войти, а также выйти из своего аккаунта, пароль будет шифроваться, будут обрабатываться некоторые ошибки, остальное пишите сами. Приступим!

Создание Базы Данных


Я буду работать на локальном хостинге, а именно на 
OpenServer. Для того чтобы создать базу данных, необходимо войти в phpmyadmin, затем нажать на кнопку «Создать Базу Данных».



Далее вводите название своей базы данных, у меня это будет — 
«register-bd».
Дальше создаем таблицу, называем таблицу users, в ней будет 4 столбца.



Заполнение таблицы


Дальше нам нужно ввести переменные в базу данных. Первая переменная — id. Это будет уникальный айди пользователя. В поле имя вводим «id»; тип — INT, так как это буду просто целые числа; Длина/Значения — 11, таким образом это будет 11-ти значное число, думаю нам его должно хватить; Атрибуты — «UNSIGNED» — числа только положительные; Индекс — «UNIQUE», во всплывающем окне пишем — «id», то есть каждый следующий айди будет больше на 1, чем предыдущий; A_I — ставим галочку.

Следующая строка — login, VARCHAR, 50, сравнение — utf_8_general_ci. Следующие поля это login и pass, применяем все тоже самое. Далее Тип таблиц выбираем: MyISAM и нажимаем сохранить. В итоге у Вас все должно выглядеть вот так:



Разработка дизайна формы


Теперь быстро верстаем форму для авторизации и регистрации на Bootstrap, называем файл 
index.php, думаю в этом ничего сложного нету, поэтому просто оставляю код здесь:

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="utf-8">


<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>


<title>Вход/Регистрация</title>

</head>

<body>


<div class="container mt-4">

<div class="row">

<div class="col">

<h1>Форма регистрации</h1>

<form action="check.php" method="post">

<input type="text" name="login" class="form-control" id="login" placeholder="Логин"><br>

<input type="text" name="name" class="form-control" id="name" placeholder="Имя"><br>

<input type="password" name="pass" class="form-control" id="pass" placeholder="Пароль"><br>

<button class="btn btn-success">Зарегистрироваться</button><br>

</form>

</div>

<div class="col">

<h1>Форма регистрации</h1>

<form action="auth.php" method="post">

<input type="text" name="login" class="form-control" id="login" placeholder="Логин"><br>

<input type="password" name="pass" class="form-control" id="pass" placeholder="Пароль"><br>

<button class="btn btn-success">Авторизоваться</button><br>

</form>

</div>


</div>

</div>

</body>

</html>



Регистрация


check.php


Создаем файл 
check.php.

Для начала Мы получаем все значения из полей регистрации и убираем все ненужные теги и пробелы, а то мало ли, что там пользователь может написать.

<?php


$login = filter_var(trim($_POST['login']), FILTER_SANITIZE_STRING); // Удаляет все лишнее и записываем значение в переменную //$login

$name = filter_var(trim($_POST['name']), FILTER_SANITIZE_STRING);

$pass = filter_var(trim($_POST['pass']), FILTER_SANITIZE_STRING); ?>



Дальше мы проверяем логин и имя на длину. Если длина меньше 5, мы выводим сообщение об ошибке.

if(mb_strlen($login) < 5 || mb_strlen($login) > 90){

echo "Недопустимая длина логина";

exit();

}

else if(mb_strlen($name) < 5){

echo "Недопустимая длина имени.";

exit();

} // Проверяем длину имени

?>



Теперь мы хешируем пароль, с помощью md5(), и добавляем свои какие-то рандомные символы, для усложнения пароля, у меня это будет: «thisiforhabr»

$pass = md5($pass."thisisforhabr"); // Создаем хэш из пароля


Далее мы подключаемся к Базе Данных, первый параметр это хост, второй — имя пользователя, третье — пароль и четвертое это название БД:

$mysql = new mysqli('localhost', 'root', '', 'register-bd');


Затем мы проверяем логин на совпадение, если в Базе Данных система находит такой же логин — сообщаем об ошибке.

$result1 = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login'");

$user1 = $result1->fetch_assoc(); // Конвертируем в массив

if(!empty($user1)){

echo "Данный логин уже используется!";

exit();

}


Что в этом коде происходит ?

В первой строке идет язык SQL, мы говорим базе данных отбирать из таблицы users, login, который совпадает с логином, который ввел пользователь, дальше создаем массив и если массив не пустой, значит система что-то нашла, из этого выходит что такой логин уже зарегистрирован — уведомляем пользователя об этом.


Если все в порядке — регистрируем в Базе Данных пользователя и закрываем соединение:

$mysql->query("INSERT INTO `users` (`login`, `pass`, `name`)

VALUES('$login', '$pass', '$name')");

$mysql->close();


Авторизация


auth.php


Теперь приступим к авторизации, все так же получаем данные из полей, только имя нам теперь не нужно:

$login = filter_var(trim($_POST['login']), FILTER_SANITIZE_STRING);

$pass = filter_var(trim($_POST['pass']), FILTER_SANITIZE_STRING);


Шифруем пароль, подключаемся к базе данных, создаем массив и проверяем в БД на совпадение пароля и логина — если совпадения находит, то одобряем пользователю вход, если нет — выводим сообщение об ошибке:

if(count($user) == 0){

echo "Такой пользователь не найден.";

exit();

}

else if(count($user) == 1){

echo "Логин или праоль введены неверно";

exit();

}


setcookie('user', $user['name'], time() + 3600, "/");


$mysql->close();

header('Location: page.html');



header… Означает что пользователя, если авторизация прошла успешно, будет перебрасывать на страницу page.html. Поэтому создаем страницу page.html и пишем просто ссылку:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Document</title>

</head>

<body>

<h1>Привет!</h1>

<a href="exit.php">Что бы выйти нажмите по ссылке.</a>


</body>

</html>


Выход


Для того чтобы пользователь вышел — нам всего лишь нужно очистить куки, создаем файл exit.php и в нем пишем:

<?php


setcookie('user', $user['name'], time() - 3600, "/");

header('Location: /');


?>


На этом у меня все, если у кого-то будет что-то не получаться или не работать — пишите в комментарии! Я постараюсь всем ответить и по возможности помочь.

Итоговый код всех файлов


index.php


<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="utf-8">


<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>


<title>Вход/Регистрация</title>

</head>

<body>


<div class="container mt-4">

<div class="row">

<div class="col">

<h1>Форма регистрации</h1>

<form action="check.php" method="post">

<input type="text" name="login" class="form-control" id="login" placeholder="Логин"><br>

<input type="text" name="name" class="form-control" id="name" placeholder="Имя"><br>

<input type="password" name="pass" class="form-control" id="pass" placeholder="Пароль"><br>

<button class="btn btn-success">Зарегистрироваться</button><br>

</form>

</div>

<div class="col">

<h1>Форма регистрации</h1>

<form action="auth.php" method="post">

<input type="text" name="login" class="form-control" id="login" placeholder="Логин"><br>

<input type="password" name="pass" class="form-control" id="pass" placeholder="Пароль"><br>

<button class="btn btn-success">Авторизоваться</button><br>

</form>

</div>


</div>

</div>

</body>

</html>



check.php


<?php


$login = filter_var(trim($_POST['login']), FILTER_SANITIZE_STRING); // Удаляет все лишнее и записываем значение в переменную //$login

$name = filter_var(trim($_POST['name']), FILTER_SANITIZE_STRING);

$pass = filter_var(trim($_POST['pass']), FILTER_SANITIZE_STRING);


if(mb_strlen($login) < 5 || mb_strlen($login) > 90){

echo "Недопустимая длина логина";

exit();

}

else if(mb_strlen($name) < 5){

echo "Недопустимая длина имени.";

exit();

} // Проверяем длину имени


$pass = md5($pass."thisisforhabr"); // Создаем хэш из пароля


$mysql = new mysqli('localhost', 'root', '', 'register-bd');


$result1 = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login'");

$user1 = $result1->fetch_assoc(); // Конвертируем в массив

if(!empty($user1)){

echo "Данный логин уже используется!";

exit();

}



header('Location: /');

exit();

?>


auth.php


<?php


$login = filter_var(trim($_POST['login']), FILTER_SANITIZE_STRING);

$pass = filter_var(trim($_POST['pass']), FILTER_SANITIZE_STRING);


$pass = md5($pass."forhktkntuhpi"); // Создаем хэш из пароля


$mysql = new mysqli('localhost', 'root', '', 'register-bd');



$result = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$pass'");

$user = $result->fetch_assoc(); // Конвертируем в массив

if(count($user) == 0){

echo "Такой пользователь не найден.";

exit();

}

else if(count($user) == 1){

echo "Логин или праоль введены неверно";

exit();

}


setcookie('user', $user['name'], time() + 3600, "/");


$mysql->close();


header('Location: page.html');


?>


page.html


<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Document</title>

</head>

<body>

<h1>Привет!</h1>

<a href="exit.php">Что бы выйти нажмите по ссылке.</a>


</body>

</html>


exit.php


<?php


setcookie('user', $user['name'], time() - 3600, "/");

header('Location: /');


?>

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования