battles/rememberpassword.php

117 lines
5.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 и нажмите кнопку &laquo;Отправить письмо&raquo;.<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>