Ошибка даже когда все правильно - PullRequest
0 голосов
/ 03 июня 2018

Я использую следующий код для забытого пароля в моей системе входа в систему php, но все равно позже появляется ошибка Имя пользователя или пароль неверны.Файл забыл пароль.php.Теперь я получаю сообщение об ошибке, указав неверное имя пользователя или адрес электронной почты, но мои данные верны и указаны в соответствии с таблицей mysql.Это мой код :-( на сервере хостинга, поэтому некоторая информация скрыта).

session_start();
 require_once 'Phpmailer/PHPMailerAutoload.php';

if (isset($_SESSION['id'])) {
header('Location: user.php');
die();
}

else {

if($_POST['submit']) {

   $username = strip_tags($_POST['username']);
   $uemail = strip_tags($_POST['email']);
   $db = mysqli_connect("localhost", "username", "password", "thedb") or die ("Failed to connect");
   $sql = "SELECT id,username,password FROM members where username = '$username' LIMIT 1";
   $query = mysqli_query($db, $sql);
   if($query) {
        $row = mysqli_fetch_row($query);
        $dbUserName = $row[1];
        $dbUserId = $row[0];
        $dbEmail = $row[4];

   }
   if($username == $dbUserName && $uemail == $dbEmail) {
       $_SESSION['username'] = $username;
       $_SESSION['id'] = $id;
       $token = rand(10);
       $db->query("UPDATE members SET token='$token' WHERE id='id'");
       $url = "https://www.example.net/resetpass?token=$token" ;
       $mail = new PHPMailer(true);                              // Passing 
`true` enables exceptions
try {
//Server settings
$mail->isSMTP();                                      // Set mailer to use 
SMTP
$mail->Host = 'example.net';                           // Specify main and 
backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP 
authentication
$mail->Username = 'members@example.net';                 // SMTP username
$mail->Password = 'password';                           // SMTP password
$mail->SMTPSecure = 'ssl';                            // Enable TLS 
encryption, `ssl` also accepted
$mail->Port = 465;                                    // TCP port to connect 
to

//Recipients
$mail->setFrom('members@example.net', 'example');
$mail->addAddress('$uemail');     // Add a recipient

//Content
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Reset Password Request';
$mail->Body    = 'We recieved an request for resseting password for user $username, please click the following link for resetting password $url';
//$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

$mail->send();
$suc =  'Message has been sent';
} catch (Exception $e) {
$err =  'Message could not be sent.';

}


       $reset_passwordsuc = "<b><i>Instructions sent to user email.</i><b>";
     }
   else {
      $reset_password = "<b><i>Username or Email Incorrect</i><b>";

   }
}
}

?>

Наконец я получил Неверное имя пользователя или адрес электронной почты.Пожалуйста, помогите

1 Ответ

0 голосов
/ 03 июня 2018

Вы должны изменить способ проверки имени пользователя и электронной почты.Пожалуйста, используйте следующие модификации.

Изменить:

   $sql = "SELECT id,username,password FROM members where username = '$username' LIMIT 1";

Кому:

$sql = "SELECT id,username,password, email FROM members WHERE email LIKE '$uemail' AND username = '$username' LIMIT 1";

Изменить:

if($username == $dbUserName && $uemail == $dbEmail) {

Кому:

if(mysqli_num_rows($query) == 1) {

Для работы токена выполните следующие модификации.

Изменение:

$_SESSION['id'] = $id;

Кому:

$_SESSION['id'] = $dbUserId;

Изменение:

$db->query("UPDATE members SET token='$token' WHERE id='id'");

To:

mysqli_query($db, "UPDATE members SET token='$token' WHERE id='$dbUserId'");

PS: Вы можете использовать подготовленные операторы для предотвращения атак с использованием SQL-инъекций.

...