Это плохая практика (и практически невозможно после того, как пароль введен на md5) отправлять электронные письма, содержащие пароль пользователя. Один из вариантов:
Возьмите электронную почту пользователя и отправьте ссылку на электронную почту, которая позволяет пользователю изменить свой пароль. Ссылка должна храниться в другой таблице БД и иметь какой-то длинный уникальный идентификатор, связанный с ней. Когда ссылка будет запрошена, покажите форму для изменения пароля. Затем md5()
новый пароль и замените пароль пользователя в базе данных.
if($_POST['submit'] == 'Send Reset Password Link') {
if(//User exists & email is valid (check mysql)) {
$db->prepare('INSERT INTO reset VALUES('', :email, :linkid)');
//etc...
mail($email, 'Password Reset for myawesomesite.com', 'Here is your link: http://www.myawesomesite.com/reset.php?id='.$linkid.'&email='.urlencode($email));
echo "Email sent";
}
}
reset.php:
if(isset($_GET['id']) && isset($_GET['email'])) {
$q = $db->prepare('SELECT id FROM reset WHERE email=:email AND linkid=:linkid');
$q->bindParam(':email', $_GET['email']);
$q->bindParam(':linkid', $_GET['id']);
$q->execute();
if($q->rowCount() == 1) {
//Show password reset form
} else {
echo "Reset link invalid";
}
}
Тогда вы можете сбросить пароль, используя UPDATE users WHERE email='' SET password=''
EDIT
Я не советую отправлять пользователям временные пароли, если форма забытого пароля не имеет уровня безопасности помимо электронной почты пользователя. Если это не так, любой, кто знает электронную почту пользователя, может сбросить свой пароль. Кроме того, электронные письма обычно не зашифрованы, и я считаю небезопасным отправлять пароли (временные или нет) по электронной почте.