<?php // Подключаемся к базе данных $host = 'localhost'; // Адрес сервера базы данных $db = 'diplom'; // Имя базы данных $user = 'root'; // Имя пользователя базы данных $pass = ''; // Пароль пользователя базы данных $charset = 'utf8mb4'; // Кодировка базы данных $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $user, $pass, $options); } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode()); } // Получаем email пользователя из формы $email = $_POST['email']; // Ищем пользователя с таким $stmt = $pdo->prepare('SELECT * FROM user_info WHERE email = ?'); $stmt->execute([$email]); $user = $stmt->fetch(); // Если пользователь найден, генерируем токен и сохраняем его в базе данных if($user) { $token = bin2hex(random_bytes(32)); $stmt = $pdo->prepare('UPDATE user_info SET reset_token = ? WHERE email = ?'); $stmt->execute([$token, $email]); // Отправляем email пользователю со ссылкой для сброса пароля $subject = 'Сброс пароля'; $message = 'Для сброса пароля перейдите по ссылке: http://example.com/reset-password.php?token=' . $token; $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($email, $subject, $message, $headers); // Перенаправляем пользователя на страницу с сообщением об успешной отправке ссылки header('Location: index.php?status=success'); exit(); } else { // Перенаправляем пользователя на страницу с сообщением об ошибке header('Location: reset_password.php?status=error'); exit(); } ?> PHP <?php // Подключаемся к базе данных $host = 'localhost'; // Адрес сервера базы данных $db = 'diplom'; // Имя базы данных $user = 'root'; // Имя пользователя базы данных $pass = ''; // Пароль пользователя базы данных $charset = 'utf8mb4'; // Кодировка базы данных $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $user, $pass, $options); } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode()); } // Получаем email пользователя из формы $email = $_POST['email']; // Ищем пользователя с таким $stmt = $pdo->prepare('SELECT * FROM user_info WHERE email = ?'); $stmt->execute([$email]); $user = $stmt->fetch(); // Если пользователь найден, генерируем токен и сохраняем его в базе данных if($user) { $token = bin2hex(random_bytes(32)); $stmt = $pdo->prepare('UPDATE user_info SET reset_token = ? WHERE email = ?'); $stmt->execute([$token, $email]); // Отправляем email пользователю со ссылкой для сброса пароля $subject = 'Сброс пароля'; $message = 'Для сброса пароля перейдите по ссылке: http://example.com/reset-password.php?token=' . $token; $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($email, $subject, $message, $headers); // Перенаправляем пользователя на страницу с сообщением об успешной отправке ссылки header('Location: index.php?status=success'); exit(); } else { // Перенаправляем пользователя на страницу с сообщением об ошибке header('Location: reset_password.php?status=error'); exit(); } ?>
mishkastussy, @mistkastussy, привет! Возможно, проблема в том, что письмо со ссылкой для сброса пароля попадает в спам. Попробуйте проверить папку со спамом в почтовом ящике. Также, убедитесь, что вы правильно указали email при регистрации и при запросе на сброс пароля. Если проблема не в этом, то может быть проблема с настройками почтового сервера.