JQuery Ajax и PHP отправка формы - PullRequest
1 голос
/ 28 января 2012

Я работал над формой входа в систему, которая использует Jquery и Ajax для отправки в файл PHP, который обрабатывает запрос, а затем отправляет ответ.Я думаю, что где-то сценарий PHP может быть неправильным, потому что форма всегда возвращается, позволяя человеку войти в систему, даже когда я намеренно ввожу неверный пароль.

Вот HTML-код:

    <div id="login">
    <span class="error">Uh oh! Something went wrong please try again!</span>
    <span class="success">Congrats! You've been logged in, redirecting you to your homepage</span>
    <form action="process/core/login.php" method="post">
    <p>Email: <input type="text" name="email" <?php if($_POST['email'] != '') { echo 'value="'. $_POST['email'] .'"'; }?> /></p>
    <p>Password: <input type="password" name="pword" /></p>
    <p><input type="submit" value="Login" id="login-btn" /></p>
    </form>
</div>

<script>
function redirect(){
    window.location = "home.php"
}

$("#login-btn").click(function(){
    $.ajax({
        type:       "post",                                     // type of post
        url:        "process/core/login.php",                   // submitting file
        data:       $("form").serialize(),                      // data to submit
        success: function() {
            $(".success").show("slow");                         // sucess function
            setTimeout('redirect()', 3000);
        },      
        error: function() {
            $('.error').show("slow");                           // error function
        }
    });
return false;
});
</script>

Вот сценарий PHP:

<?php
session_start();

require '../../lib/core/connect.php';

if(!empty($_POST['email']) && !empty($_POST['pword'])) {

    $userInfo = mysql_query("SELECT * FROM users WHERE email = '". mysql_real_escape_string($_POST['email']) ."'");
    $userInfo = mysql_fetch_assoc($userInfo);

    if($_POST['email'] == $userInfo['email'] && md5($_POST['pword']) == $userInfo['pword']) {

        if($userInfo['active'] == 1) {

            $_SESSION['AuthEmail']=$userInfo['email'];
            $_SESSION['AuthUid']=$userInfo['uid'];
            $_SESSION['AuthName']=$userInfo['fname'] . ' ' . $userInfo['lname'];
            $_SESSION['AuthActive']=$userInfo['active'];
            $_SESSION['AuthType']=$userInfo['type'];

            return true;
            print 'success';
        } else {
            return false;
            print 'fail not active';
        }
    } else {
        return false;
        print 'Email and or password didn\'t match';
    }

} else {
    return false;   
    print 'Didn\'t enter one of the required values';
}
?>

Где-то у меня возникает ошибка, я даже изменил все значения сценария PHP, чтобы они возвращали false, и каким-то образом сообщение об успешном выполнении в ajax все еще срабатывало.Любая помощь будет принята с благодарностью, я искал весь форум, находя связанные темы, но не нашел ничего, что получило бы полное представление об ошибках.

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 января 2012

Я думаю, вам действительно нужно было сгенерировать исключение, чтобы обработчик ошибок назывался http://php.net/manual/en/language.exceptions.php false - это не ошибка, это просто неверно.

1 голос
/ 28 января 2012

Обратный вызов ajax success сработает при возврате HTTP 200 с сервера (другими словами, при возвращении правильного ответа).Таким образом, это означает, что независимо от того, какой путь к коду выполняется в вашем PHP-коде, обратный вызов успеха все равно будет вызываться, и пользователь будет перенаправлен.

Вы можете изменить обратный вызов успеха, чтобы проверить ответ и действоватьсоответствующим образом (предпочтительно), либо сгенерируйте исключение на сервере для сценариев возврата false.

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