File size: 9.54Kb
<?php
// проверка наличия авторизации
if (isset($user)) {
# Перенаправляем на главную
header('Location: /');
}
# Заголовок модуля
$system['page_title'] = 'Восстановление пароля';
# Шапка модуля
require_once(HOME .'/incfiles/header.php');
// смена пароля
if (isset($_POST['change_password']) && isset($_GET['login']) && isset($_GET['email']) && isset($_GET['key'])) {
$login = txt($_GET['login']);
$email = txt($_GET['email']);
$key = txt($_GET['key']);
$change_password = txt($_GET['change_password']);
# Проверка наличия в базе данных пользователя с таким логином и почтовым ящиком
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."'"), 0) == 0) $err .= 'Неверная связка логина и E-Mail или отсутствует привязка E-Mail к аккаунту<br />';
if (!isset($err)) {
# Проверка ключа
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `lost_password` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."' AND `key` = '". input($key) ."'"), 0) == 0) $err .= 'Неверный ключ<br />';
}
if (!isset($err)) {
# Пароль
$change_password= txt($_POST['change_password']);
# Проверка ввода пароля
if (empty($change_password)) $err .= 'Не введен новый пароль<br />';
# Проверка длины пароля
if (!empty($change_password) && (strlen($change_password) < 5 || strlen($change_password) > 64)) $err .= 'Неверная длина нового пароля. Допустимо от 5 до 64 символов<br />';
if (!isset($err)) {
# Кодируем пароль
$change_password = encrypt($change_password);
# Сохраняем данные
mysql_query("UPDATE `users` SET `password` = '". input($change_password) ."' WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."' LIMIT 1");
# Удаление всех ключей
mysql_query("DELETE FROM `lost_password` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."'");
echo '<div class="title">Изменение пароля</div>
<div class="menu">
Ваш пароль успешно изменен.
</div>';
echo '<div class="block">
» <a href="/user/entry.php">Авторизация</a><br />
» <a href="/">На главную</a>
</div>';
# Ноги модуля
require_once(HOME .'/incfiles/footer.php');
}
}
}
// проверка запроса на восстановление пароля
if (isset($_GET['login']) && isset($_GET['email']) && isset($_GET['key'])) {
$login = txt($_GET['login']);
$email = txt($_GET['email']);
$key = txt($_GET['key']);
# Проверка наличия в базе данных пользователя с таким логином и почтовым ящиком
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."'"), 0) == 0) $err .= 'Неверная связка логина и E-Mail или отсутствует привязка E-Mail к аккаунту<br />';
if (!isset($err)) {
# Проверка ключа
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `lost_password` WHERE `login` = '". input($login) ."' AND `email` = '". input($email) ."' AND `key` = '". input($key) ."'"), 0) == 0) $err .= 'Неверный ключ<br />';
}
if (!isset($err)) {
echo '<div class="title">Смена пароля</div>
<form method="post" action="/user/lost_password.php?login='. input($login) .'&email='. input($email) .'&key='. input($key) .'">
<div class="menu">
Новый пароль:<br />
<input type="password" name="change_password" /><br />
<input type="submit" value="Изменить" />
</div>
</form>';
echo '<div class="block">
» <a href="/">На главную</a>
</div>';
# Ноги модуля
require_once(HOME .'/incfiles/footer.php');
}
}
// проверка полученных данных
if (isset($_POST['lost_login']) && isset($_POST['lost_email'])) {
# Фильтрация логина
$lost_login = txt($_POST['lost_login']);
# Проверка ввода логина
if (empty($lost_login)) $err .= 'Не введен логин<br />';
# Проверка длины логина
if (!empty($lost_login) && (strlen($lost_login) < 3 || strlen($lost_login) > 32)) $err .= 'Неверная длина логина. Допустимо от 3 до 32 символов<br />';
# Проверка наличия пользователя с таким логином
if (mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `login` = '". input($lost_login) ."'")) == 0) $err .= 'Пользователь с таким логином не существует<br />';
// если нет ошибок проверяем почтовый ящик
if (!isset($err)) {
# E-mail
$lost_email = txt($_POST['lost_email']);
# Проверка ввода логина
if (empty($lost_email)) $err .= 'Не введен E-Mail<br />';
# Проверка длины
if (!empty($lost_email) && (strlen($lost_email) < 3 || strlen($lost_email) > 72)) $err .= 'Неверная длина E-Mail. Допустимо от 3 до 72 символов<br />';
# Формат
if (!empty($lost_email) && !preg_match('|^([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})$|ius', $lost_email)) $err .= 'Неверный формат E-Mail<br />';
if (!isset($err)) {
# Проверка наличия в базе данных пользователя с таким логином и почтовым ящиком
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '". input($lost_login) ."' AND `email` = '". input($lost_email) ."'"), 0) == 0) $err .= 'Неверная связка логина и E-Mail или отсутствует привязка E-Mail к аккаунту<br />';
}
}
if (!isset($err)) {
# Уникальный ключ
$key = md5(base64_encode($lost_login) . time());
# Проверка наличия ключа восстановления
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `lost_password` WHERE `login` = '". input($lost_login) ."' AND `email` = '". input($lost_email) ."'"),0) != 0) {
# Удаление всех ключей
mysql_query("DELETE FROM `lost_password` WHERE `login` = '". input($lost_login) ."' AND `email` = '". input($lost_email) ."'");
}
# Запись ключа
mysql_query("INSERT INTO `lost_password` SET `login` = '". input($lost_login) ."', `email` = '". input($lost_email) ."', `key` = '". input($key) ."', `time` = '". time() ."'");
# Отправка ключа на почтовый ящик
mail($lost_email, '=?utf-8?B?'.base64_encode('Восстановление пароля на Promob').'?=', 'Здравствуйте, '. input($lost_login) .'!<br /><br />Для восстановления пароля на promob.net перейдите по этой ссылке:<br /><a href="http://promob.net/user/lost_password.php?login='. input($lost_login) .'&email='. input($lost_email) .'&key='. input($key) .'">http://promob.net/user/lost_password.php?login='. input($lost_login) .'&email='. input($lost_email) .'&key='. input($key) .'</a><br /><br />С уважением,<br />Команда Promob<br /><br /><small>Сообщение было отправленно автоматически, отвечать на него не нужно.</small>', "From: \"[email protected]\" <[email protected]>\nContent-Type: text/html; charset=utf-8\n");
echo '<div class="title">Восстановление пароля</div>
<div class="menu">
Ключ для восстановления пароля выслан на Ваш E-Mail. Дальнейшие инструкции Вы найдете в письме. В случае возникновения проблем с восстановлением пароля просьба обращаться на <a href="mailto:[email protected]">[email protected]</a>.
</div>';
echo '<div class="block">
» <a href="/">На главную</a>
</div>';
# Ноги модуля
require_once(HOME .'/incfiles/footer.php');
}
}
error($err);
echo '<div class="title">Восстановление пароля</div>
<form method="post" action="/user/lost_password.php">
<div class="menu">
Логин:<br />
<input type="text" name="lost_login" /><br />
E-Mail:<br />
<input type="text" name="lost_email" /><br />
<input type="submit" value="Восстановить" />
</div>
</form>
<div class="menu">
Если Ваш аккаунт не был привязан к E-Mail адресу, то восстановление пароля не возможно.
</div>';
echo '<div class="block">
» <a href="/user/entry.php">Авторизация</a><br />
» <a href="/">На главную</a>
</div>';
# Ноги модуля
require_once(HOME .'/incfiles/footer.php');
?>