<?php include("config.php"); function random_password( $length = 8 ) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-=+;:,.?"; $password = substr( str_shuffle( $chars ), 0, $length ); return $password; } function mail_send($to, $from_user, $from_email, $subject = '(No subject)', $message = '') { $from_user = "=?UTF-8?B?".base64_encode($from_user)."?="; $subject = "=?UTF-8?B?".base64_encode($subject)."?="; $headers = "From: $from_user <$from_email>\r\n". "MIME-Version: 1.0" . "\r\n" . "Content-type: text/html; charset=UTF-8" . "\r\n"; return mail($to, $subject, $message, $headers); } $login = filter_input(INPUT_POST, 'loginid', FILTER_SANITIZE_SPECIAL_CHARS); //TODO Сделать всё нормальным человеческим способом, как у белых людей. Сброс пароля генерирует ссылку на почту, ссылка на почте разрешает одноразовую смену пароля. if ($login) { // $sql = mysql_query("SELECT `id`, `login`, `realname`, `email` FROM `users` WHERE LOWER(`login`) = '" . $_POST['loginid'] . "' LIMIT 1"); // $sql = mysql_fetch_array($sql, MYSQL_ASSOC); $sql = db::c()->query('SELECT `id`, `login`, `email` FROM `users` WHERE `login` = "?s" LIMIT 1', $login)->fetch_assoc(); $newpass = random_password(); $lasttime = date('Y-m-d', strtotime($Date. ' + 1 days')); $ip = $_SERVER['REMOTE_ADDR']; if ($sql['login'] && db::c()->query('INSERT INTO `confirmpasswd` (`login`, `passwd`, `date`, `ip`, `active`) VALUES ("?s", "?s", "?s", "?s", "?s")', $sql['login'], $newpass, $lasttime, $ip)) { $message = "Здравствуйте!<br><br> Кто-то запросил восстановление пароля к вашему персонажу".$sql['login'].".<br> Ваш новый пароль:".$newpass.".<br><br> Для подтверждения нового пароля пройдите по <a href='".GAMEDOMAIN."/confirmpassw.php?newpass=".$newpass."&login=".$sql['login']."&timev=".$lasttime."'> данной ссылке</a>.<br><br> Ссылка будет действовать до <em>".date('d-M-Y', $lasttime)."</em>. "; if (mail_send($sql['email'],"Noreply", "noreply@".GAMEDOMAIN, "Восстановление забытого пароля", $message)) { echo "<h3>Письмо отправлено.</h3>"; } else { echo "<h3>Ошибка: письмо не отправлено!</h3>"; } } else { echo "<h3>Сегодня пароль уже высылался или такой login отсутствует.</h3>"; } } ?> <!DOCTYPE html> <html lang="ru_RU"> <head> <meta charset="utf-8"> <link href="static/styles/forgot-password.css" rel="stylesheet"> <title>Восстановление пароля</title> <script type="text/javascript"> function sendmailpassw() { var loginP = document.getElementById('loginid').value; if (loginP == '' || loginP.length > 50) { alert('Введен некоректный login'); return false; } else document.sendmailid.submit(); } </script> </head> <body> <a id="top-logo" href="/" title="На главную"></a> <?php if (!empty($error)): $error_list = explode('<br>', $error); ?> <div id="error"> <h1>Ошибка при регистрации</h1> <?php if (count($error_list) > 1): ?> <ul> <?php foreach ($error_list as $error_item): if (empty($error_item)): continue; endif; ?> <li><?php echo $error_item; ?></li> <?php endforeach; ?> </ul> <?php else: ?> <?php echo $error; ?> <?php endif; ?> </div> <?php endif; ?> <form name='sendmailid' method="post"> <h1>Забыли пароль?</h1> <div class="form-input"> <div class="name"> <label for="loginid">Укажите логин персонажа:</label> </div> <div class="value"> <input placeholder="Логин" type='text' value='<?php echo $_POST['loginid']; ?>' id='loginid' name='loginid'/> </div> <div class="comment"> Для восстановления пароля введите свой login и нажмите кнопку «Отправить письмо».<br> Письмо будет выслано на email адрес, указанный вами при регистрации.<br> Восстанавливать пароль можно только раз в сутки.<br> </div> </div> <div class="form-input"> <div class="submit"> <input type="submit" onClick="sendmailpassw(); return false;" value="Отправить письмо"/> </div> </div> </form> </body> </html>