繁体   English   中英

jQuery Ajax和PHP表单提交

[英]Jquery Ajax and PHP form submission

我一直在处理一个登录表单,该表单使用Jquery和Ajax提交到处理请求的PHP文件,然后发送回响应。 我认为某个地方的PHP脚本可能是不正确的,因为即使我故意输入了错误的密码,该表单也始终会返回true,从而允许该人登录。

这是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中的成功消息仍然成功触发。 任何帮助将不胜感激,我在整个论坛中进行了搜索,找到了相关主题,但没有发现任何真正的带有错误的内容。

谢谢

我认为您实际上需要抛出一个异常才能将错误处理程序称为http://php.net/manual/en/language.exceptions.php false不是错误,这根本不是事实。

从服务器返回HTTP 200时(换句话说,当返回正确的响应时),将触发ajax success回调。 因此,这意味着无论您的PHP代码中执行了哪个代码路径,成功回调都将被调用,并且用户将被重定向。

您可以修改成功回调以检查响应并采取适当的措施(首选),也可以在服务器上抛出异常以返回false情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM