Возвращение True / False из PHP в Ajax - PullRequest
1 голос
/ 08 марта 2019

В прошлый день я пытался вернуть Ajax истинное или ложное логическое значение.

Процесс: Кто-то отправляет форму> Отправить в файл PHP> Из PHP, проверьте, все ли правильно.Если да, верните true и echo 'correct'.> Вывести результат.В этом случае оно должно будет корректно отображаться.И проверьте, является ли это истиной или ложью.

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

Моя форма:

<form id="loginform" class="col s12" name="loginform" method="post">
    <div class="input-field col s12">
        <i class="fas fa-user material-icons prefix"></i>
        <input id="hn" type="text" class="validate" name="hn">
        <label for="hn">Gebruikersnaam</label>
    </div>
    <div class="input-field col s12">
        <i class="fas fa-key material-icons prefix"></i>
        <input id="ww" type="password" class="validate" name="ww">
        <label for="ww">Wachtwoord</label>
    </div>
    <button class="mui-btn mui-btn--raised mui-btn--primary" id="forminlog"><i class="fas fa-chevron-right"></i> Inloggen</button>

Ajax:

$("#forminlog").click(function(){
    $.ajax({
        type: 'POST',
        data: {hn: document.getElementById("hn").value, ww: document.getElementById("ww").value},
        url: 'login.php',
        success: function(output) {
            swal(output);
            if(output == true){
                alert("true");
            } else {
                alert("false");
            }
        }
    });
    event.preventDefault()
});

PHP:

<?php
function login(){
    header('Content-Type', 'application/json');
    //VARIABLEN
    $pgebruiker = $_POST['hn'];
    $pww = $_POST['ww'];
    //LEGE VELDEN
    if(empty($pgebruiker) || empty($pww)){
        echo 'Vul alle velden in';

    }
    else {
        //DATA VANUIT DB
        include("connection.php");
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sth = $dbh->prepare("SELECT * FROM gebruikers WHERE gebruikersnaam = :gebruiker");
        $pdoExec = $sth->execute(array(":gebruiker"=>$pgebruiker));
        $sth->execute();
        $result = $sth->fetch(PDO::FETCH_OBJ);
        //GEBRUIKERSNAAM
        $gebruikersnaam = $result->gebruikersnaam;
        //WACHTWOORD
        $wachtwoord =  $result->wachtwoord;
        if(!strcasecmp($pgebruiker, $gebruikersnaam) == 0){
            echo 'Verkeerd gebruikersnaam.';
        }
        elseif(!password_verify($pww, $wachtwoord) /*strcasecmp($pww, $wachtwoord) == 0*/){
            echo 'Verkeerd wachtwoord';
        }
        else{
            echo 'Correcte gegevens.';
            return true;
            /*session_start();
            $_SESSION['gebruiker'] = $gebruikersnaam;
            header('Location: veilig.php');*/
            //exit;
        }
    }
}
login();
?>

1 Ответ

2 голосов
/ 08 марта 2019

Две вещи должны быть возвращены из вашей функции login():

  • сообщение
  • логическое значение

Поэтому я предлагаю вам вывестиданные в виде строки json, например:

Перед функцией login(), объявите массив:

$response = [];

Затем, во всех ваших условиях ... просто установите msg и success соответственно, например, если логин правильный:

$response["msg"] = "You're logged in buddy!";
$response["success"] = true;

В конце всех условий echo массив в виде строки json:

echo json_encode($response);

Он отправит следующую строку:

{"msg":"You're logged in buddy!","success":true}

** Убедитесь, что echo является единственным echo в этом файле PHP!

На клиентесо стороны, в обратном вызове success это будет:

success: function(output) {

        // Parse the string.
        var json = JSON.parse(output);

        swal(json.msg); // Sweet Alert...
        if(json.success){
            // something to do with the boolean true
        } else {
            // Something else
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...