@Hahaz

Почему не работает восстановление пароля?

<?php

if ($module == 'logout' and $_SESSION['USER_LOGIN_IN'] == 1) {
if ($_COOKIE['user']) { 
    setcookie('user', '', strtotime('-30 days'), '/');
unset($_COOKIE['user']);
}

session_unset();
exit(header('Location: /'));
}


ULogin(0);

if ($module == 'restore' and !$param['code'] and substr($_SESSION['RESTORE'], 0, 4) == 'wait') MessageSend(1,'Вы уже отправили заявку на восстановление пароля. Проверьте ваш Email <b>'.substr($_SESSION['RESTORE'], 5).'</b>.');
if ($module == 'restore' and $_SESSION['RESTORE'] and substr($_SESSION['RESTORE'], 0, 4) != 'wait')  MessageSend(1, 'Ваш пароль ранее уже был изменен. Для входа используйте новый пароль <b>'.$_SESSION['RESTORE'].'</b>', '/login');

if ($module == 'restore' and !$param['code']){
    $Row = mysqli_fetch_assoc(mysqli_query($connect, 'SELECT `login` FROM `users` WHERE `id` = '.str_replace(md5('Hello'), '', $param['code'])));

    if(!$Row['login']) MessageSend(1,'Невозможно восстановить пароль.', '/login');
    $Random = RandomString(15);
    $_SESSION['RESTORE'] = $Random;
    mysqli_query($connect, "UPDATE `users` SET `password` ='".GenPass($Random, $Row['login'])."' WHERE `login` = '$Row[login]'");
    MessageSend(1,'Пароль успешно изменен, для входа используйте новый пароль <b>'.$Random.'</b>', 'login');
}



if ($module == 'restore' and $_POST['enter']){
    $_POST['login'] = FormChars($_POST['login']);
    if(!$_POST['login']) MessageSend(1,'Невозможно обработать форму.');

    $Row = mysqli_fetch_assoc(mysqli_query($connect, "SELECT `id`, `email` FROM `users` WHERE `login` = '$_POST[login]'"));
    if(!$Row['email']) MessageSend(1,'Пользователь не найден.');

    mail ($Row['email'], 'Web-platform', 'Ссылка для восстановления: http://forum/account/restore/code/'.md5('Hello').$Row['id'], 'From: Web-platform');


    $_SESSION['RESTORE'] = 'wait_'.$Row['email'];
    
    MessageSend(2, 'На ваш Email <b>'.HideEmail($Row['email']).'</b> отправлено сообщение о подтверждении смены пароля');
}



if ($module == 'register' and $_POST['enter']) {
    $_POST['name'] = FormChars($_POST['name']);
    $_POST['login'] = FormChars($_POST['login']);
    $_POST['email'] = FormChars($_POST['email']);
    $_POST['password'] = GenPass(FormChars($_POST['password']), $_POST['login']);

    if (!$_POST['login'] or !$_POST['password'] or !$_POST['name'] or !$_POST['email']) MessageSend(1,'Невозможно обработать форму.');

    $Row = mysqli_fetch_assoc(mysqli_query($connect, "SELECT `login` FROM `users` WHERE `login` = '$_POST[login]'"));
    if($Row['login']) exit('Логин <b>'.$_POST['login'].'</b> уже используется.');

    $Row = mysqli_fetch_assoc(mysqli_query($connect, "SELECT `email` FROM `users` WHERE `email` = '$_POST[email]'"));
    if($Row['email']) exit('Email <b>'.$_POST['email'].'</b> уже используется.');

    mysqli_query($connect, "INSERT INTO `users` (`login`, `password`, `name`, `regdate`, `email`, `avatar`, `country`) VALUES ('$_POST[login]', '$_POST[password]', '$_POST[name]', NOW(), '$_POST[email]', 0, 0)");

    
    $code = base64_encode($_POST['email']);
    mail ($_POST['email'], 'Регистрация на Web-platform', 'Ссылка для активации: http://forum/account/activate/code/'.$code, 'From: Web-platform');
    MessageSend(3, 'Регистрация аккаунта успешно завершена, на указанный email адрес <b>'.$_POST['email'].'</b> отправленно письмо о подтверждении регистрации.');
}

else if ($module == 'activate' and $param['code']) {
    $email = base64_decode($param['code']);
    
    // Проверяем, активен ли email
    $result = mysqli_query($connect, "SELECT `active` FROM `users` WHERE `email` = '$email'");
    $user = mysqli_fetch_assoc($result);

    if ($user && $user['active'] == 0) {
        // Если email не активен, активируем его и устанавливаем сессию
        $_SESSION['USER_ACTIVE_EMAIL'] = $email;
        mysqli_query($connect, "UPDATE `users` SET `active` = 1 WHERE `email` = '$email'");
        MessageSend(3, 'Email <b>'.$email.'</b> подтвержден.', '/login');
    } else {
        // Если email уже активен или не найден, выводим ошибку
        MessageSend(1, 'Email адрес уже подтвержден или недействителен.', '/login');
    }
}



else if ($module == 'login' and $_POST['enter']) {

$_POST['login'] = FormChars($_POST['login']);
$_POST['password'] = GenPass(FormChars($_POST['password']), $_POST['login']);

if(!$_POST['login'] or !$_POST['password']) MessageSend(1,'Невозможно обработать форму.');

$Row = mysqli_fetch_assoc(mysqli_query($connect, "SELECT `password`, `active` FROM `users` WHERE `login` = '$_POST[login]'"));
if($Row['password'] != $_POST['password']) MessageSend(1,'Неверный логин или пароль.');
if($Row['active'] == 0) MessageSend(1,'Аккаунт пользователя <b>'.$_POST['login'].'</b> не подтвержден.');

$Row = mysqli_fetch_assoc(mysqli_query($connect, "SELECT `id`, `name`, `regdate`, `email` FROM `users` WHERE `login` = '$_POST[login]'"));

$_SESSION['USER_ID'] = $Row['id'];
$_SESSION['USER_NAME'] = $Row['name'];
$_SESSION['USER_REGDATE'] = $Row['regdate'];
$_SESSION['USER_EMAIL'] = $Row['email'];
$_SESSION['USER_LOGIN_IN'] = 1;

if ($_REQUEST['remember']) setcookie('user', $_POST['password'], strtotime('+30 days'), '/');


exit(header('Location: /profile'));
}

?>


Вылезает "Ошибка: Невозможно восстановить пароль." хотя должен был отправится email с новым паролем
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
yesbro
@yesbro
Думаю, помогаю думать
$Row = mysqli_fetch_assoc(mysqli_query($connect, 'SELECT `login` FROM `users` WHERE `id` = '.str_replace(md5('Hello'), '', $param['code'])));

    if(!$Row['login']) MessageSend(1,'Невозможно восстановить пароль.', '/login');


Это просто. У тебя $Row['login'] пустое. А это значит что у тебя по id не найден пользователь.

В коде опять какая-то странная конструкция получения id. Разбирайся чему равно id, чему $param['code']. Как это делать я тебя ранее подсказывал.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы