Тут я расскажу как сделать систему авторизации и регистрации на чистом PHP, не каких библиотек не надо будет использовать, но эта статья подойдёт только начинающим PHP разработчиком, также файлы программы я оставлю внизу.
Перед тем как читать эту статью, рекомендую прочитать наш учебник про основы программирования на PHP (Ссылка на учебник), также у нас есть статья которая показывает как сделать регистрацию через Email (Ссылка на учебник).
Настройка базы данных:
Для начала нам надо создать и настроить базу данных, для этого заходим в PhpMyAdmin.
Создание базы данных:
Создаём базу данных, называем её user-login и выбираем кодировку utf8_general_ci.
Создание и настройка таблицы в БД:
Называем таблицу users, и настраиваем её, я не буду объяснять что каждая настройка значит, так как эта статья не о том как работать с БД, а просто покажу на скриншоте, после нажимаем сохранить.
База данных у нас готова, теперь надо подключится к ней.
Подключение БД к PHP:
Для этого создаём файлы connect.php, index.php и checkin.php. Сначала мы в connect.php подключаемся к самой БД, для этого пишем код ниже.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $server = 'localhost'; // Имя или адрес сервера $user = 'root'; // Имя пользователя БД $password = ''; // Пароль пользователя $db = 'authorization-system'; // Название БД $db = mysqli_connect($server, $user, $password, $db); // Подключение // Проверка на подключение if (!$db) { // Если проверку не прошло, то выводится надпись ошибки и заканчивается работа скрипта echo "Не удается подключиться к серверу базы данных!"; exit; } |
Подключаем connect.php к index.php
1 2 | // Подключение БД require_once 'connect.php'; |
Проверяем скрипт, для этого запускаем программу.
После того как проверили на работа способность, можете убрать вывод надписи «подключение к базе данных прошло успешно».
Создаём регистрацию на PHP:
Для этого пишем скрипт который будет ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | // Проверяем нажата ли кнопка отправки формы if (isset($_REQUEST['doGo'])) { // Все последующие проверки, проверяют форму и выводят ошибку // Проверка на совпадение паролей if ($_REQUEST['pass'] !== $_REQUEST['pass_rep']) { $error = 'Пароль не совпадает'; } // Проверка есть ли вообще повторный пароль if (!$_REQUEST['pass_rep']) { $error = 'Введите повторный пароль'; } // Проверка есть ли пароль if (!$_REQUEST['pass']) { $error = 'Введите пароль'; } // Проверка есть ли email if (!$_REQUEST['email']) { $error = 'Введите email'; } // Проверка есть ли логин if (!$_REQUEST['login']) { $error = 'Введите login'; } // Если ошибок нет, то происходит регистрация if (!$error) { $login = $_REQUEST['login']; $email = $_REQUEST['email']; // Пароль хешируется $pass = password_hash($_REQUEST['pass'], PASSWORD_DEFAULT); // Если день рождения не был указан, то будет самый последний год из доступных $DOB = $_REQUEST['year_of_birth']; // Добавление пользователя mysqli_query($db, "INSERT INTO `users` (`login`, `email`, `password`, `DOB`) VALUES ('" . $login . "','" . $email . "','" . $pass . "', '" . $DOB . "')"); // Подтверждение что всё хорошо echo 'Регистрация прошла успешна'; } else { // Если ошибка есть, то выводить её echo $error; } } ?> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Зарегистрироваться</title> </head> <body> <form action="<?= $_SERVER['SCRIPT_NAME'] ?>"> <p>Логин: <input type="text" name="login" id=""> <samp style="color:red">*</samp></p> <p>EMail: <input type="email" name="email" id=""><samp style="color:red">*</samp></p> <p>Пароль: <input type="password" name="pass" id=""><samp style="color:red">*</samp></p> <p>Повторите пароль: <input type="password" name="pass_rep" id=""><samp style="color:red">*</samp></p> <?php $year = date('Y'); ?> Год рождения: <select name="year_of_birth" id=""> <option value="">----</option> <?php for ($i = $year - 14; $i > $year - 14 - 100; $i--) { ?> <option value="<?= $i ?>"><?= $i ?></option> <?php } ?> </select> <p><input type="submit" value="Зарегистрироваться" name="doGo"></p> </form> </body> </html> |
HTML я не стал рассказывать, так как, там всё понятно, да и вообще программист должен разберется в коде.
Создаём авторизацию на PHP:
Код будет очень сильно похож на файл регистрацию, но есть ряд не больших отличий.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | // Проверка нажата ли кнопка отправки формы if (isset($_REQUEST['doGo'])) { // Последующий код проверяет вообще есть формы // Проверяет логин if (!$_REQUEST['login']) { $error = 'Введите логин'; } // Проверяет пароль if (!$_REQUEST['pass']) { $error = 'Введите пароль'; } // Проверяет ошибки if (!$error) { $login = $_REQUEST['login']; $pass = $_REQUEST['pass']; // берёт из БД пароль и id пользователя if ($result = mysqli_query($db, "SELECT `password`, `id` FROM `users` WHERE `login`='" . $login . "'")) { while( $row = mysqli_fetch_assoc($result) ){ // Проверяет есть ли id if ($row['id']) { // если id есть, то он сравнивает пароли функцией password_verify if (password_verify($pass, $row['password'])) { // Если функция возвращает true, то вы входите echo "Вы вошли"; // скрипт больше не выполняется exit; } else { // Если функция возвращает false, то выводит ошибку echo "Пароль не совпадает"; } } else { // Выводит ошибку если не нашли такой логин echo "Ввели не верны логин"; } } } } else { // Выводит ошибки, если есть пустые поля формы echo $error; } } ?> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Войти</title> </head> <body> <form action="<?= $_SERVER['SCRIPT_NAME'] ?>"> <p>Логин: <input type="text" name="login" id=""></p> <p>Пароль: <input type="password" name="pass" id=""> <p><input type="submit" value="Войти" name="doGo"></p> </form> </body> </html> |
Информацию о функции password_verify найдёте здесь, как видите код очень простой, но это ещё не всё, дальше вы сами напишите.
Что ещё надо сделать:
Ну, во-первых, авторизацию нельзя считать полноценной, пока данные о пользователи не будут сохранятся в браузере, для этого можно использовать куки, во-вторых, надо улучить условия принятия данных из формы, например, пропускать только определёныt символы в паролях и логинах
Вывод:
Я не стал делать всё за вас, так как программист должен сам учится всё делать и уметь находить информацию, также надо сказать, что эта статья сделана для начинающим PHP разработчикам, поэтому, более опытным, эта статья вряд ли поможет.
В будущем я напишу более продвинутую статью, о том как сделать систему авторизации и регистрации на PHP, но используя уже более продвинутые технологии.