<?php
if (!defined('FastCore')) { exit('Opss!'); }
# Заголовки
$opt = array(
'title' => 'Восстановление пароля',
'description' => 'Восстановление пароля, вспомнить пароль, сбросить пароль'
);
if (isset($_SESSION['uid'])) {
Header('Location: /user/dashboard');
return;
}
?>
<div class="container-fluid pt-4 px-4" style="width: 835px; height: 500px;">
<div class="d-flex align-items-center justify-content-between mb-4">
<h5 class="mb-0">Восстановление пароля</h5>
</div>
<?php
# Форма восстановления пароля
if (isset($_POST['restore'])) {
# Фильтрация данных
$email = $func->FMail($_POST['email']);
$time = time();
$tdel = $time + 60 * 15; // Время удаления ссылки через 15 минут
# Удаление старых запросов на восстановление пароля
$db->query("DELETE FROM db_restore WHERE date_del < ?", $time);
# Определение IP-адреса
$ipGet = $func->ipGet();
$ip = $func->ipValid($ipGet);
# Проверка email
if (!empty(filter_var($email, FILTER_VALIDATE_EMAIL))) {
# Ищем пользователя по email
$uml = $db->query("SELECT * FROM db_users WHERE email = ?", $email)->numRows();
if ($uml == 1) {
# Проверка, не было ли недавно восстановление пароля с этого IP или email
$restore = $db->query("SELECT * FROM db_restore WHERE ip = ? OR email = ?", $ip, $email)->numRows();
if ($restore == 0) {
# Генерация нового пароля (14 символов, заглавные и строчные буквы, цифры)
function dozzzeer_pass($length = 14)
{
$arr = array(
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'I', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '!', '#', ''
);
$res = '';
for ($i = 0; $i < $length; $i++) {
$res .= $arr[random_int(0, count($arr) - 1)];
}
return $res;
}
$new_pass = dozzzeer_pass();
# Запись в таблицу восстановления пароля
$db->query("INSERT INTO db_restore (email, ip, date_add, date_del) VALUES (?,?,?,?)", $email, $ip, $time, $tdel);
# Обновление пароля в базе данных
$db->query('UPDATE db_users SET pass = ? WHERE email = ?', array($new_pass, $email));
# Отправка email с новым паролем
$mailSMTP = new sendMailSmtpClass('ТУТ ПОЧТА', 'ТУТ ПАРОЛЬ', 'ТУТСЕРВЕР', 587, "UTF-8");
$from = array(
"$config->sitename",
"$config->email"
);
$to = $email; // Получатель
// HTML сообщение с новым паролем
$message = "
<html>
<head>
<title>Восстановление пароля</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
color: #333;
padding: 20px;
margin: 0;
}
.email-container {
background-color: #ffffff;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
padding: 30px;
width: 600px;
margin: 0 auto;
}
.email-header {
text-align: center;
background-color: #3498db;
color: #fff;
padding: 20px;
border-radius: 8px 8px 0 0;
}
.email-header h1 {
font-size: 24px;
margin: 0;
}
.email-body {
font-size: 16px;
line-height: 1.6;
padding: 20px 0;
}
.new-password {
font-size: 18px;
color: #e74c3c;
font-weight: bold;
background-color: #f9f9f9;
border: 1px solid #e74c3c;
padding: 10px;
border-radius: 5px;
display: inline-block;
margin-top: 10px;
}
.footer {
text-align: center;
font-size: 14px;
color: #777;
margin-top: 30px;
}
.footer a {
color: #3498db;
text-decoration: none;
}
</style>
</head>
<body>
<div class='email-container'>
<div class='email-header'>
<h1>Восстановление пароля</h1>
</div>
<div class='email-body'>
<p>Здравствуйте!</p>
<p>Вы запросили восстановление пароля для вашего аккаунта. Ваш новый пароль:</p>
<p class='new-password'>$new_pass</p>
<p>Пожалуйста, используйте его для входа на сайт.</p>
<p>Если вы не запрашивали восстановление пароля, проигнорируйте это сообщение.</p>
</div>
<div class='footer'>
<p>С уважением, команда <strong>$config->sitename</strong></p>
<p>Если у вас возникли вопросы, свяжитесь с нами по адресу <a href='mailto:$config->email'>$config->email</a></p>
</div>
</div>
</body>
</html>
";
// Отправка email
$result = $mailSMTP->send($to, 'Восстановление пароля', $message, $from);
# Уведомление об успешной отправке письма
echo '<div class="alert alert-success">На ваш E-Mail адрес было отправлено сообщение.</div>';
} else {
$errors[] = 'Восстановление пароля с этого IP ('.$ip.') уже производилось за последние 15 минут!';
}
} else {
$errors[] = 'Пользователь с таким email не найден!';
}
} else {
$errors[] = 'Ошибка заполнения email!';
}
# Вывод ошибок
if (!empty($errors)) {
foreach ($errors as $error) {
echo '<div class="alert alert-danger"><i class="fa fa-warning"></i> ' . $error . '</div>';
}
}
}
?>
<form class="contact-one__form" action="" method="POST">
<input class="form-control" name="email" type="email" placeholder="Введите Email" style="text-align: left; width: 250px;" value="" required />
<br>
<div class="text-left">
<button name="restore" type="submit" class="btn btn-primary">
Восстановить пароль
</button>
</div>
</form>
</div>