Пишем восстановление пароля на phpЕсли вы пишите свою CMS и незнаете как организовать восстановление пароля то эта статья для вас. Для начала давайте определимся с алгоритмом работы.
1. Создаем форму куда пользователь будет вписывать свой логин для востановления
2. Проверяем есть ли пользователь в базе
3. Если юзер есть в базе, то генерируем новый пароль.
4. Для безопасности я советую вам хранить пароли в зашифрованом виде. Поэтому перегоняем в md5 хеш.
5. Переписываем пороль в базу уже хэшированым
6. Шлём пороль на это мыло
Вот и всё. И так начнем. Создадим файл lostpass.php и в него впишем сдедующий код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<head>
<title>Восстановление пароля - Админцентр</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="shortcut icon" href="images/siteico0.ico" type="image/x-icon" />
<style type="text/css" media="all">
* { margin: 0; padding: 0; }
body {background: #fAfAfA; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px;}
img {border:none;}
#conteiner {width: 400px; margin: 7em auto;}
#conteiner .loform {
padding: 16px 16px 16px 16px;
font-weight: normal;
-moz-border-radius: 11px;
-khtml-border-radius: 11px;
-webkit-border-radius: 11px;
border-radius: 5px;
background: #fff;
border: 1px solid #e5e5e5;
-moz-box-shadow: rgba(200,200,200,1) 0 4px 18px;
-webkit-box-shadow: rgba(200,200,200,1) 0 4px 18px;
-khtml-box-shadow: rgba(200,200,200,1) 0 4px 18px;
box-shadow: rgba(200,200,200,1) 0 4px 18px;
}
#conteiner .mess {
margin-bottom: 10px;
padding: 10px;
font-weight: normal;
-moz-border-radius: 5px;
-khtml-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
border: 1px solid;
-moz-box-shadow: rgba(200,200,200,1) 0 4px 18px;
-webkit-box-shadow: rgba(200,200,200,1) 0 4px 18px;
-khtml-box-shadow: rgba(200,200,200,1) 0 4px 18px;
box-shadow: rgba(200,200,200,1) 0 4px 18px;
color:#000;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:11px;
}
#conteiner .loform p {color:#808080; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px; margin:5px;}
#conteiner .loform input {background:#fafafa; border:1px solid #cccccc; color:#666666; padding:4px; width:98%; font-size:25px; margin-bottom:20px;}
#conteiner .loform input.submit {margin-top:-16px; width:74px; height:64px; border: 1 px; text-align:right; vertical-align:top;}
#conteiner .loform a {color: #bcbcbc; text-decoration: none;}
#conteiner .loform a:hover {color:#d7722f;}
#conteiner .logo {text-align:center; padding-bottom:20px;}
</style>
</head>
<body>
<div id="conteiner">
<div class="logo">
<p><strong>Восстановление пароля</strong></p>
</div>
<div class="loform">
<form name="form1" method="post" action="lostpass.php">
<p>Логин <input ype="text" name="username" size="40" /></p>
<p>
<input type="submit" value="востановить" size="40" name="go">
</p>
</form>
</div>
</div>
</body>
</html>
<?php
//подключаем базу в моём случае
$settings_dir = "../settings"; include "$settings_dir/database.php";
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$mail = mysql_real_escape_string($_POST['mail']);
// проверяем, если юзер в таблице с таким же логином
$query = "SELECT `user_id`
FROM `users`
WHERE `username`='{$username}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql)==1)
{
//если есть
//генерируем пороль
$simvols = array ("0","1","2","3","4","5","6","7","8","9",
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
for ($key = 0; $key < 6; $key++)
{
shuffle ($simvols);
$string = $string.$simvols[1];
}
//перегоняем в md5 хэш
$pass = md5(md5($string));
//переписываем пороль в базе уже хэшированый
$query = "UPDATE `users`
SET
`password`='{$pass}'
WHERE `username`='{$username}' ";
$sql = mysql_query($query) or die(mysql_error());
//получаем мыло из базы для нашего пользователя
$query = "SELECT `mail`
FROM `users`
WHERE
`username`='{$username}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($sql);
$mail = $row['mail'];
//шлём пороль на это мыло
mail($mail, "Запрос на востонавление пороля", "Здравствуйте $login ваш новый пороль : $string");
}
?>