【问题标题】:Jquery Ajax and PHP form submissionJquery Ajax 和 PHP 表单提交
【发布时间】:2012-02-20 20:58:24
【问题描述】:

我一直在制作一个登录表单,它使用 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 中的成功消息仍然成功触发。任何帮助将不胜感激,我已经搜索了整个论坛以查找相关主题,但没有发现任何深入的错误。

谢谢

【问题讨论】:

  • 顺便说一下,您的打印低于返回值将永远不会触发。 . .

标签: php ajax forms function


【解决方案1】:

我认为您实际上需要抛出异常才能调用错误处理程序http://php.net/manual/en/language.exceptions.php false 不是错误,它根本不是真的。

【讨论】:

  • 也许用成功/错误代码填写响应数据也可能是一个好的解决方案?我不知道异常的可能性,我无法决定哪种解决方案更正确。有任何想法吗?也许它就像 bool 返回与抛出异常的困境一样。
  • 我认为任何一种方式都是有效的,而且我真的想不出任何理由来说明为什么要使用另一种方式。如果我认为其他代码可以恢复错误,则应该抛出异常(因此您可以使用 try catch )并且您将获得带有异常的堆栈跟踪,而不是仅仅写一些东西。也许其他人会插话以某种方式这样做。
  • 我有一些过去的 PHP 经验,但通常只在客户端使用 BlazeDS/Java 和 Flex,所以我在这里假设错误处理程序不会被触发,除非它实际上是一个异常是使用该设置不是 PHP 或 JQuery,从这个角度来看,我们通常通过抛出错误来处理错误情况,然后在客户端它更有意义,因为我们得到一个错误事件或一个成功事件。
【解决方案2】:

ajaxsuccess 回调将在服务器返回 HTTP 200 时触发(换句话说,当返回正确的响应时)。所以这意味着无论在你的PHP代码中执行哪个代码路径,仍然会调用成功回调,并且会重定向用户。

您可以修改成功回调以检查响应并采取适当的行动(首选),或者在服务器上抛出异常以返回 false 场景。

【讨论】:

  • 你说得对,我最终发现无论成功函数触发什么,除非它实际上不能执行 ajax 请求。我没有意识到我需要使用返回数据来区分结果。我最终将 PHP 脚本更改为简单地回显字符串“true”或“false”,然后在客户端根据 php 脚本的返回比较数据,这给了我正在寻找的结果。谢谢解答!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
相关资源
最近更新 更多