deadangel |
01.06.2010 09:16 |
Простая страница восстановления пароля
Написал простой скрипт восстановления пароля. Пароль в БД меняется, но в игру все равно заходит по старому паролю. Вопрос, как можно сделать так, чтобы после смены пароля сразу в игру можно было зайти по новому паролю?
Вот окончательный и переделанный вариант скрипта.
PHP код:
<?=header('Content-type: text/html; charset=utf-8');?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru"> <head> <title>Смена пароля для аккаунта World of Warcraft</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta name="author" content="Kazakou V. Andrey" /> <meta name="email" content="a.v.kazakou@gmail.com" /> </head> <body>
<?php function error($str = '') { echo "<p class=\"error\">$str</p></body></html>"; exit; }
function sendPassword($login, $email) { mysql_connect('<host>','<login>','<password>') or die(error('Ошибка! Невозможно соедениться с базой данных.')); mysql_select_db('realmd');
$login = mysql_real_escape_string($login); $email = mysql_real_escape_string($email);
$result = mysql_query('SELECT COUNT(*) as validation FROM `account` WHERE `username` LIKE \''.$login.'\' AND `email` LIKE \''.$email.'\'') or die(error('Ошибка! Невозможно выполнить запрос в БД')); $result = mysql_fetch_array($result); if($result***91;'validation'***93;!=1) error('Данная связка Логина и E-mail не обнаружена');
$psswd = str_shuffle(substr(md5(rand(1,1024)), 0, 6)); $sql = "UPDATE `account` SET `sha_pass_hash`=SHA1(UPPER(CONCAT('$login',':','$psswd'))), `locked`=0, `v`=NULL, `s`=NULL, `sessionkey`=NULL WHERE `username`='$login' AND `email`='$email'"; $result = mysql_query($sql) or die(error(mysql_error().'</p><p>'.$sql)); if(mysql_affected_rows()!=1) error('Невозможно изменить пароль в базе данных');
$to = $email; $subject = 'Смена пароля для World of Warcraft'; $message = 'Ваш новый пароль для аккаунта '.$login.' в игре World of Warcraft: '.$psswd; $headers = 'From: robot@example.com' . "\r\n" . 'Reply-To: robot@example.com' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
$mailSended = mail($to, $subject, $message, $headers); if(!$mailSended) error('Невозможно отправить письмо с новым паролем.');
error('Письмо с новым паролем выслано на указаный адрес.'); } ?>
<?php if(!empty($_POST) and isset($_POST***91;'login'***93;) and isset($_POST***91;'email'***93;)) sendPassword($_POST***91;'login'***93;, $_POST***91;'email'***93;); ?>
<form action="newpass.php" method="post"> <table summary=""> <tr> <td>Имя аккаунта:</td> <td><input type="text" name="login" value="" size="30" /></td>
</tr> <tr> <td>Адрес e-mail:</td> <td><input type="text" name="email" value="" size="30" /></td> </tr> <tr> <td colspan="2"><input type="submit" name="submit" value="Выслать новый пароль" /></td> </tr> </table> </form> </body> </html>
|