即使没有,也会调用错误消息

时间:2012-01-06 08:46:18

标签: php jquery ajax

我正在尝试在创建用户之前检查系统中是否存在电子邮件。我正在使用PHP和jQuery(AJAX,插件)。

即使数据库中没有相同的电子邮件,我的脚本也写道存在相同的电子邮件。但它仍然创造了用户(它应该)。

如果 是现有的电子邮件,那么它不会创建用户,并且正在编写正确的错误消息。

我不知道这是不是我的AJAX错了?

我的PHP:

$check_email = mysql_query("SELECT * FROM table WHERE email='$email'");
$email_count = mysql_num_rows($check_email);

if($email_count>0){
echo "Email exists";
    return false;
}

我的jQuery:

$(function() {  
    $("#goNewUser").click(function() {  
        // validate and process form here  

        var username = $("input#username").val();  
        if(username == "") {
            $("input#username").focus();  
        return false;
        }

        var email = $("input#email").val();  
        if(email == "") {  
            $("input#email").focus();  
        return false;
        }

        var password = $("input#password").val();  
        if(password == "") {  
            $("input#password").focus();  
        return false;
        } 

        var salt = $("input#salt").val();
        if(salt == ""){
            $("input#username").focus();
        return false;
        }

        var dataString = 'username=' + username + '&email=' + email + '&password=' + password + '&salt=' + salt;  
        //alert (dataString);
        $.ajax({  
            type: "POST",  
            url: "includes/classes/handler.php?do=addLogin",
            data: dataString,  
            success: function(returnedData){

                if(returnedData == ''){
                    $('.sideBarNewUserWrap').fadeOut();
                } else {
                    $('.errorMessage').fadeIn().html(returnedData);
                }

            }
        });  
        return false;
  });  
});

1 个答案:

答案 0 :(得分:2)

  1. 您最好使用PDO;)如果您使用,它会提供所需的全部保护 对的。因为现在你有很多安全漏洞 - 你没有 查询转义,您正在检查字段值是否相等(当它 最好使用正则表达式或至少截断值 来自可能的空间)

  2. 你的检查有点粗糙。尝试使用SELECT COUNT(*) as cnt FROM table WHERE email = '$email';并检查是否 intval($first_row_of_result['cnt']) > 0

  3. 如何执行用户创建过程?如果您的代码是先前的 用户创建一个,它们都是一个功能的一部分 - 是的,你是对的。如果您在创建用户之前执行if (!email_exists($email)) return false;,那么您就是对的。 否则我无法确定该过程是否正确。

  4. 哦,是的......

    var dataString = 'username=' + username + '&email=' + email + '&password=' + password + '&salt=' + salt;  
    
    $.ajax({  
        type: "POST",  
        url: "includes/classes/handler.php?do=addLogin",
        data: dataString,  
        success: function(returnedData){ }
    });
    

    最好不要使用手动数据转义 - 尝试传递JSON对象而不是dataString。 jQuery肯定会处理它。

    您最好使用FireBug或其他工具将alert(something)替换为console.log(something) - 它更漂亮;)

    还有一个:你最好使用否定条件:

    if (returnedData){
      $('.errorMessage').fadeIn().html(returnedData);
    } else {
      $('.sideBarNewUserWrap').fadeOut();
    }
    

    希望这些对你有所帮助。