Почему мой сценарий входа в систему ajax не работает? - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужен сценарий входа AJAX для моего школьного проекта.Но на самом деле это не сработает, потому что когда я пытаюсь войти, меня пинают на стартовую страницу (форму входа) без каких-либо сообщений.

Это мой backend-скрипт (login2.php):

if(empty($_POST['loginEmail']) || empty($_POST['loginPassword'])) {
    $error[] = "Bitte füllen Sie alle Felder aus!";
}
if (!empty($_POST['loginEmail']) && !filter_var($_POST['loginEmail'], FILTER_VALIDATE_EMAIL)) {
    $error[] = "Bitte geben Sie eine gültige E-Mail-Adresse an!";
} 
if(count($error)>0) {
    $resp['msg'] = $error;
    $resp['status'] = false;
    echo json_encode($resp);
    exit;
}

$sql = "SELECT * FROM `users` WHERE `uEmail` = :email AND `uPassword` = :password";
$stmt = $conn->prepare($sql);
$stmt->execute(array(':email' => $_POST['loginEmail']));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(count($row)>0) {
    if(!password_verify($_POST['loginPassword'],$row[0]['uPassword'])) {
        $error[] = "Falsches Passwort!";
        $resp['msg'] = $error;
        $resp['status'] = false;
        echo json_encode($resp);
        exit;
    }
    session_start();
    $_SESSION['Email'] = $row[0]['uEmail'];
    $resp['redirect'] = "dashboard.php";
    $resp['status'] = true;
    echo json_encode($resp);
    exit;
}
else {
    $error[] = "Falsche E-Mail-Adresse!";
    $resp['msg'] = $error;
    $resp['status'] = false;
    echo json_encode($resp);
    exit;
}

И это моя JS часть формы входа в систему:

$(function() {
    $('#login').click(function(e){
        let self = $(this);
        e.preventDefault();
        self.prop('disabled',true);
        var data = $('#login-form').serialize();
        $.ajax({
            url: '/login2.php',
            type: "POST",
            data: data,
        }).done(function(res) {
            res = JSON.parse(res);
            if(res['status']) {
                location.href = "dashboard.php";
            } else {
                var errorMessage = "";
                console.log(res.msg);
                $.each(res['msg'],function(index,message) {
                    errorMessage += '<p>' + message + '</p>';
                });
                $("#error-msg").html(errorMessage);
                $("#error-msg").show();
                self.prop('disabled',false);
            }
        }).fail(function() {
            alert("error");
        }).always(function(){
            self.prop('disabled',false);
        });
    });
});

Когда я пытаюсь добавить action="/login2.php" в форму, я получаю сообщение об ошибке HTTP 500 и сообщение о том, что он не можетобработайте этот запрос в это время.

1 Ответ

0 голосов
/ 06 февраля 2019

Я не уверен, что это ваша основная проблема, но она значительная.Вы готовите два параметра:

$sql = "SELECT * FROM `users` WHERE `uEmail` = :email AND `uPassword` = :password";

Но вы связываете только один:

$stmt->execute(array(':email' => $_POST['loginEmail']));

Вы не хотите включать пароль в выбор, так как выиспользуя password_verify(), чтобы подтвердить это позже.Измените свой SQL на это:

$sql = "SELECT * FROM `users` WHERE `uEmail` = :email";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...