В этой статье хочу рассказать как сделать регистрацию на сайте, конечно, уже есть подобная статья на сайте (Ссылка на статью), но в этой ещё покажу как сделать в PHP подтверждение регистрации по email, что очень полезно бывает.
Также в конце вы сможете скачать файлы этой программы, ещё перед тем как начать читать эту статью рекомендуется прочитать наш учебник (Ссылка на учебник).
Как работает регистрация:
Регистрация через Email работает очень просто, для этого мы будем отправлять ссылку, которая хранит в себе GET запрос с хешом пользователя, когда человек переходит по ссылки, хеш проверяется, находится пользователь с таким хешом и меняет значение столбца который отвечает за подтверждение Email на подтвержденный.
Подготовка базы данных:
Для начала создадим базу данных в которой будет хранится данные о пользователе.
Создание базы данных:
Создаём базу данных, называем её user-login, но я назову её просто test и выбираем кодировку utf8_general_ci.
После того как база данных была создано, создаём таблицу.
Создание таблицы в БД:
Теперь нужно создать таблицу для пользователей, вот как она выглядит.
Как можете заметить, это обычная таблица для пользователей, нам тут интересно только два столбца, первой это хеш, по нему мы будем определять Email, а последний столб отвечает за то, подтверждён ли email или нет, если значение один, то и ноль соответственно нет.
Подключение БД для регистрации:
Теперь пришло время подключить базу данных к сайту.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $server = 'localhost'; // Имя или адрес сервера $user = 'root'; // Имя пользователя БД $password = ''; // Пароль пользователя $db = 'test'; // Название БД $db = mysqli_connect($server, $user, $password, $db); // Подключение // Проверка на подключение if (!$db) { // Если проверку не прошло, то выводится надпись ошибки и заканчивается работа скрипта echo "Не удается подключиться к серверу базы данных!"; exit; } |
Если выводит, что подключение к базе данных прошло успешно, то значит всё хорошо.
Дальше подключаем этот файл в наш основной, для регистрации, для этого используем require_once
.
1 2 | // Подключаем коннект к БД require_once 'db.php'; |
Вот теперь всё должно хорошо работать, а если не заработает, то выведет ошибку.
Создание регистрации на PHP:
Пришло время написать регистрацию на PHP, но для начала сделаем форму.
1 2 3 4 5 6 7 | <form action="<?= $_SERVER['SCRIPT_NAME'] ?>" method="post"> <p>Логин: <input type="text" name="login"> <samp style="color:red">*</samp></p> <p>EMail: <input type="email" name="email"><samp style="color:red">*</samp></p> <p>Пароль: <input type="password" name="pass"><samp style="color:red">*</samp></p> <p>Повторите пароль: <input type="password" name="pass_rep"><samp style="color:red">*</samp></p> <p><input type="submit" value="Зарегистрироваться" name="doGo"></p> </form> |
Ну тут не чего интересного нет, простая HTML форма, Вот какая форма получилась.
Вот сейчас наконец можно посмотреть как делается регистрация с подтверждением email PHP 7.
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 | // Проверяем нажата ли кнопка отправки формы 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); // хешируем хеш, который состоит из логина и времени $hash = md5($login . time()); // Переменная $headers нужна для Email заголовка $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=utf-8\r\n"; $headers .= "To: <$email>\r\n"; $headers .= "From: <mail@example.com>\r\n"; // Сообщение для Email $message = ' <html> <head> <title>Подтвердите Email</title> </head> <body> <p>Что бы подтвердить Email, перейдите по <a href="http://example.com/confirmed.php?hash=' . $hash . '">ссылка</a></p> </body> </html> '; // Добавление пользователя в БД mysqli_query($db, "INSERT INTO `user` (`login`, `email`, `password`, `hash`, `email_confirmed`) VALUES ('" . $login . "','" . $email . "','" . $pass . "', '" . $hash . "', 1)"); // проверяет отправилась ли почта if (mail($email, "Подтвердите Email на сайте", $message, $headers)) { // Если да, то выводит сообщение echo 'Подтвердите на почте'; } } else { // Если ошибка есть, то выводить её echo $error; } } |
Как видите это обычное код для регистрации, сначала идёт проверка все ли поля забиты правильно, потом, если всё хорошо, то создаются данные для отправки почты, дальше отправляется Email и одна временно проверяется отправилось ли письмо, если всё хорошо, выводит на экран «Подтвердите на почте».
Информацию о функции password_verify найдёте здесь.
Вот какое письмо пришло ко мне на Email.
Подтверждение Email:
Теперь пришло время написать скрипт для подтверждения email, это будет отдельная страница.
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 | // Подключаем коннект к БД require_once 'db.php'; // Проверка есть ли хеш if ($_GET['hash']) { $hash = $_GET['hash']; // Получаем id и подтверждено ли Email if ($result = mysqli_query($db, "SELECT `id`, `email_confirmed` FROM `user` WHERE `hash`='" . $hash . "'")) { while( $row = mysqli_fetch_assoc($result) ) { echo $row['id'] . " " . $row['email_confirmed']; // Проверяет получаем ли id и Email подтверждён ли if ($row['email_confirmed'] == 1) { // Если всё верно, то делаем подтверждение mysqli_query($db, "UPDATE `user` SET `email_confirmed`=0 WHERE `id`=". $row['id'] ); echo "Email подтверждён"; } else { echo "Что то пошло не так"; } } } else { echo "Что то пошло не так"; } } else { echo "Что то пошло не так"; } |
Давайте разберём этот код, сначала идёт подключение БД, потом проверка, существует ли GET запрос, если да, то получаем ID и Email по хешу и проверяем, мы вообще получили эти данные, если да, то опять идёт проверка, если столбец который отвечает за подтверждённый Email, если равен одному, то Email не подтверждён, ноль соответственно значит подтверждён.
Если всё проверки прошли и не вывело не одной ошибки, то программа обновляет столбец email_confirmed
на ноль.
Нажимаем на ссылку из письма и вот какая страница у нас выходит.
Вот что будет в БД.
Как видите всё работает нормально, этот код полностью рабочий.
Вывод:
Надеюсь эта статья для вас была полезно, здесь я показал как сделать регистрацию, но не просто а на PHP подтверждение регистрации по email, поэтому она не много сложнее чем предыдущая часть про регистрацию (Ссылка на статью).
Вы можете скачать код этой программы, но там будет не только сама программа, но и файл для импорта таблицы которая была здесь сделана.
Рекомендации по коду:
Этот код был достаточно простой, поэтому дам пару советов по его улучшению.
Первое что можно сделать, это данные с хешом хранит в отдельной таблицы в базе данных, второе, нужно добавить зависимость от времени, что бы по истечению одно дня, если Email не подтверждён, приходилось заново регистрироваться.
Также, если вам надо сделать восстановление пароля по Email, то посмотрите статью: «Восстановление пароля на PHP».