Восстановление забытого пароля
Добрый день уважаемые пользователи. Многие из нас зарегистрированы на различных сайтах. И наверняка вам знакома ситуация, когда вы забывали пароль для авторизации на этом сайте. Если восстановить пароль было невозможно, то, скорее всего вы не захотите регистрироваться заново и просто забудете про этот сайт. Так же могут поступить пользователи и на вашем сайте. Поэтому если на вашем сайте создана регистрация пользователей, то очень желательно чтобы была функция восстановления пароля. В данном уроке мы и будем говорить о восстановления забытого пароля. Новый пароль будет случайно генерироваться из набора цифр и букв латинского алфавита, а затем высылаться на E-mail. Этот урок является дополнением к уроку Создание регистрации пользователей на сайте.
Для этого мы создадим файл password.php, в котором будет содержаться форма для ввода логина и E-mail-а:
<table>
<form method="POST">
<tr>
<td>Логин:</td>
<td><input type="text" size="20" name="login"></td>
</tr>
<tr>
<td>E-mail:</td>
<td><input type="text" size="20" name="email"></td>
</tr>
<tr>
<td></td>
<td colspan="2">
<input type="submit" value="Восстановить пароль" name="submit"></td>
</tr>
<br>
</form>
</table>
Когда пользователь введет эти данные и нажмет кнопку "Восстановить пароль", мы попадем на эту же страницу, на которой будет проверяться существование такого пользователя в базе. В самом начале документа мы соединяемся с базой данных:
<?php include_once('bd.php'); ?>
Затем идет код, который будет генерировать наш новый пароль:
<?php
if (isset($_POST['submit'])){
$login = $_POST['login'];
$email = $_POST['email'];
if (empty($login)){
echo "Введите логин!";
}
elseif (empty($email)){
echo "Введите e-mail!";
}
else{
$resultat = mysql_query("SELECT * FROM users WHERE login = '$login' AND email = '$email'");
$array = mysql_fetch_array($resultat);
if (empty($array)){
echo 'Ошибка! Такого пользователя не существует';
}
elseif (mysql_num_rows($resultat) > 0){
$chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
$max=10;
$size=StrLen($chars)-1;
$password=null;
while($max--) {
$password.=$chars[rand(0,$size)];
}
$newmdPassword = md5($password);
$title = 'Востановления пароля пользователю '.$login.' для сайта Site.ru!';
$letter = 'Вы запросили восстановление пароля для аккаунта '.$login.' на сайте Site.ru \r\nВаш новый пароль: '.$password.'\r\nС уважением админестрация сайта Site.ru';
// Отправляем письмо
if (mail($email, $title, $letter, "Content-type:text/plain; Charset=windows-1251\r\n")) {
mysql_query("UPDATE users SET password = '$newmdPassword' WHERE login = '$login' AND email = '$email'");
echo 'Новый пароль отправлен на ваш e-mail!<br><a ref="index.php">Главная страница</a>';
}
}
}
}
mysql_close();
?>
Рассмотрим данный код более подробно. В самом начале мы проверяем, нажата ли кнопка "Восстановить пароль" и введен ли логин и E-mail. Если все данные существуют, то мы проверяем, есть ли такой пользователь, если нет, то выдаем ошибку «Такого пользователя не существует». Если пользователь есть в базе, то мы из набора символов содержащихся в переменной $chars составляем новый пароль из 10 символов. Для этого мы используем цикл, в котором при помощи функции rand случайно выбираются символы из переменной $chars и заносятся в переменную $password. Теперь нужно отправить новый пароль пользователю на E-mail и добавить его в базу. Но в базе пароли у нас хранятся в зашифрованном виде, поэтому мы так же шифруем пароль $newmdPassword = md5($password); . Теперь высылаем новый пароль пользователю. Если отправка письма была удачной, то мы обновляем данные в базе и сообщаем об успешном восстановлении пароля.
Ну, вот теперь пользователи вашего сайта с легкостью могут восстановить свой пароль.
Автор: Евгений Бочкарев и Кушнир Александр Урок добавлен: 15 Ноября 2010 в 20:41 Просмотров: 29835
Условия копирования материалов сайтаПосмотреть предыдущие комментарии (28)






Ну, а если я знаю emal под логином Sidorov?
Например, он сам разместил свой ящик sidorov@mail.ru на сайте бесплатных объявлений, для контактов.
Ну, а я решил ему подгадить: в восстановлении пароля ввожу его e-mail 100500 раз на сутки... это же ему перед заходом на сайт ещё нужно каждый раз в ящик лазать, за "своим" паролем