В этой статье вы прочитает про то, как сделать восстановление пароля на PHP для вашего сайта, будет очень интересно.
Также перед тем как начать читать эту статью, посмотрите: Как сделать регистрацию на PHP через email, потому что мы будем делать на базе кода из этой статьи, поэтому это будет полезно.
Как будет работать восстановление пароля:
Для начала разберём как будет работать программа, при нажатие на ссылку «забыл пароль», вас перекинет на страницу, где надо будет ввести Email.
После того как вы впишете в поле Email и отправите его, в программе генерируется хеш и обновляется он в базе данных, это нужно, что бы не кто ни мог вам сам поменять пароль не зная ваш хеш. После этого вам на почту придёт письмо со ссылкой на страницу где будет генерироваться пароль, но ссылка будет с GET запросом, который и будет этот хеш.
Создание восстановление пароля на PHP:
Теперь перейдём к самому созданию этой программы, для этого, когда уже создали регистрацию и авторизацию, если нет, то посмотрите статью по этой ссылки, на странице авторизации добавьте ссылку на страницу отправки Email для восстановления пароля.
Но перед этим конечно нужно сделать PHP файл, куда ссылаться в ссылке.
Также нужно создать Базу данных, но повторятся я не хочу, поэтому выше уже есть ссылка на статью, где мы создаём нужную БД, сразу перейдём к созданию программы.
Создание отправки Email:
Для этого у себя я сделал файл «email.php», вот его HTML.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!DOCTYPE html> <html lang="en"> <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'] ?>" method="post"> <p>Введите ваш EMail: <input type="email" name="email"></p> <p><input type="submit" value="Отправить" name="doGo"></p> </form> </body> </html> |
Тут всё очень просто, если вы знаете 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 | // Подключаем к БД require_once 'db.php'; // Проверяем нажата ли кнопка отправки формы if (isset($_REQUEST['doGo'])) { // Проверка что email введён if ($_REQUEST['email']) { $email = $_REQUEST['email']; // хешируем хеш, который состоит из email и времени $hash = md5($email . 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>Что бы восстановить пароль перейдите по <a href="http://example.com/newpass.php?hash=' . $hash . '">ссылка</a></p> </body> </html> '; // Меняем хеш в БД mysqli_query($db, "UPDATE `user` SET hash='$hash' WHERE email='$email'"); // проверка отправилась ли почта if (mail($email, "Восстановление пароля через Email", $message, $headers)) { // Если да, то выводит сообщение echo 'Ссылка для восстановления пароля отправленная на вашу почту'; } else { echo 'Произошла какая то ошибка, письмо отправилось'; } } else { // Если ошибка есть, то выводить её echo "Вы не ввели Email"; } } |
Как видите, код достаточно большой, сейчас я его разберу, первым делом мы подключаем файл, для подключение БД.
Потом идёт проверка, нажата ли кнопка, после, опять проверка, что нибудь вписано в поле, если нет, то выводит сообщение об ошибке.
Дальше уже создаётся хеш и заголовок для Email, про хеш я уже говорил выше, а вот заголовок нужен для правленого определения почты, куда отправлять и как настроить, к примеру в моём случае настроено так, что бы отправлялся HTML, а не просто текст, благодаря это строчки
Content-type: text/html; charset=utf-8rn
.
Создаём переменную $message
, куда в качестве строки вписываем не большой HTML документ.
После всех манипуляцией, мы меняем хеш в базе данных, и отправляем электронное письмо на почту, если не отправилось то выводим ошибку.
Вот какое письмо придёт при отправление.
На этом первый скрипт закончился.
Генератор пароля на PHP:
Теперь сделаем что бы при заходе на эту страницу генерировался новый пароль, и менялся в базе данных на него, для этого я создал PHP файл «newpass.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 | // Подключаем коннект к БД require_once 'db.php'; // Проверка есть ли хеш if ($_REQUEST['hash']) { // Кладём этот хеш в отдельную переменную $hash = $_REQUEST['hash']; // Проверка на то, что есть пользователь с таки хешом if ($result = mysqli_query($db, "SELECT `id` FROM `user` WHERE `hash`='" . $hash . "'")) { // Цикл для получение пользователя с таким хешом while( $row = mysqli_fetch_assoc($result) ) { // Переменная для хранения символов $chars = 'abdefhiknrstyzABDEFGHKNQRSTYZ23456789'; // Получаем длину строки $numChars = strlen($chars); // Переменная для пароля $pass = ''; // Цикл для создания пароля for ($i = 0; $i < 8; $i ) { $pass .= substr($chars, rand(1, $numChars) - 1, 1); } // Обновление пароля mysqli_query($db, "UPDATE `user` SET `password`=" . password_hash($pass, PASSWORD_DEFAULT) . " WHERE `id`=". $row['id'] ); // Вывод нового пароля echo "Ваш новый пароль: " . $pass; } } else { echo "Что то пошло не так"; } } else { echo "Что то пошло не так хеш"; } |
Теперь разберём этот код, сперва мы проверяем, есть ли хеш, если да, то создаём отдельную переменную для него и отправляем запрос к базе данных, что бы нашла пользователя с таким же хешом.
Дальше берём пользователя через цикл while
, и там начинается самое интерьерное, сам PHP генератор пароля.
В начале мы создаём переменную для хранение всех символов виде строки, которые нужна для пароля, дальше тоже в отдельной переменной храним размер строки, это делается благодаря функции strlen()
. Создаём переменную $pass
, которая и будет хранить пароль.
Теперь цикл, в которой будет генерироваться пароль весь пароль, там самое интересное это функция substr() оно возвращает под строку, в нашем случае только символ, так как, параметр который отвечает за длину возвращаемой строки равен одному.
Также есть функция rand(), которая возвращает случайное число, нам она нужна для выбора буквы, возвращаемая буква добавляется к переменной $pass
.
Последнее, это обновление пароля и вывод этого пароля, вот результат.
Как видите сгенерирован совершенно случайный пароль.
Вывод:
В этой статье вы прочитали о том как сделать восстановление пароля на PHP, ещё стоит сказать на счёт генератора, его код я взял с другого сайта, который сможете посмотреть по этой ссылки.
Также если вы плохо знаете PHP, то посмотрите наш учебник по PHP.