Проблема с созданием аутентификации при входе с использованием ajax - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь создать скрипт AJAX, который вызывает скрипт PHP для проверки введенного имени пользователя и пароля. Скрипт PHP просто возвращает «true», если введенные данные верны, и false, если в противном случае.

В конце сценария AJAX я поместил простое условие if else для возвратов true / false. Каждый раз, когда PHP-скрипт возвращает true, AJAX-скрипты переходят в другую часть, пропуская if.

Я знаю, что может быть какая-то глупая ошибка или, возможно, это нелепый вопрос, но я застрял на нем много дней,Стек - последнее средство!

Вот мой AJAX SCRIPT

function authenticate() 
{
//XMLHttpRequest Object 

var xhttp = new XMLHttpRequest();
var email = document.getElementById('email').value;
var pass = document.getElementById('pass').value;

var url = "php/user_authentication.php";
var url2 = "php/user_authentication.php?email=" + email + "&pass=" + pass;
var result = "";

xhttp.open("GET", url2, true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send();


xhttp.onreadystatechange = function f() 
//f() would be called everytime the onreadystatechange property changes the value
    {
        if (xhttp.readyState == 4 && xhttp.status == 200) 

        {
            alert(this.responseText);
            result = this.responseText;

            if (result == "true") 
            //!! -> NOT ENTERING THIS PART EVEN WHEN result="true" !!
            {
                alert("Inside true");
                document.getElementById('email_pass').innerHTML = 'login successful';
            } else {
                document.getElementById('email_pass').innerHTML = 'login failed';
                alert("2 " + xhttp.responseText);
            }
        }
    }

}

Вот PHP-скрипт [user_authentication.php]

<?php
//User Authentication

//1.Including the database_connection.php
include "database_connection.php";

//2.1.Fetching the user id and password from the form
$email = $_GET['email'];
$pass = $_GET['pass'];

//2.2.Defining th select query 
$qry = 'select * from user_auth where Email="'.$email.'" and Password = "'.$pass.'"';

//3.Executing the query and storing it to result
$result = mysqli_query($connection,$qry);

//authenticating
if(mysqli_num_rows($result)>0)
{
    echo "true";

}
else
{
    echo "false";

}
?>

Ответы [ 3 ]

0 голосов
/ 02 октября 2019

Проблема заключалась в том, что я получал несколько лишних пробелов вместе с моим responseText, что делало следующее условие ложным каждый раз, когда я получал "true" в моем responseText.

if (result == "true") 
//Turns false because result.length = 11 (extra empty spaces due to some unknown reasons)

Решение было следующим:

  1. Изменение возвращаемого значения в моем PHP на 't' и 'f'
  2. Использование метода slice для нарезки первой переменной responseText, чтобы исключить все пробелы в строке, и последующее сравнение

    xhttp.onreadystatechange = function f() 
    
    {
    if (xhttp.readyState == 4 && xhttp.status == 200) 
    
    {
        result = this.responseText;
        var temp = result.slice(0,1);  
        //This will only select the first char in the result string
    
        if (temp == "t") 
            document.getElementById('email_pass').innerHTML = 'login successful';
    
        else
            document.getElementById('email_pass').innerHTML = 'login failed';
    }
    

    }

0 голосов
/ 02 октября 2019

Обязательный комментарий о подготовленных утверждениях в php и sql Руководство по PHP .

Но я бы попытался привести сравнение

        if (result == "true")

к логическому, как это

        if (Boolean(result) === true)

Признаюсь, мои знания ajax и JS ограничены, но в таких случаях я научился не доверять JS-автоматическому приведению типов. Также обратите внимание, что я бы определенно использовал 3x =, если мы приводим результат к логическому значению.

0 голосов
/ 02 октября 2019

$result не получает «true», убедитесь, что дважды проверьте ниже:

  1. Идентификаторы HTML-элемента: (электронная почта, пароль)
  2. Подключение к базе данных работает нормально,
  3. $qry: выбранные поля, связанные с запросом, совпали со столбцами таблицы
  4. $result будет иметь значение true, только если запрошенный адрес электронной почты и пароль выходят из базы данных user_auth таблица

Я думаю, что это может помочь ... удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...