我正在尝试在创建用户之前检查系统中是否存在电子邮件。我正在使用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;
});
});
答案 0 :(得分:2)
您最好使用PDO;)如果您使用,它会提供所需的全部保护 对的。因为现在你有很多安全漏洞 - 你没有 查询转义,您正在检查字段值是否相等(当它 最好使用正则表达式或至少截断值 来自可能的空间)
你的检查有点粗糙。尝试使用SELECT COUNT(*) as cnt FROM
table WHERE email = '$email';
并检查是否
intval($first_row_of_result['cnt']) > 0
。
如何执行用户创建过程?如果您的代码是先前的
用户创建一个,它们都是一个功能的一部分 -
是的,你是对的。如果您在创建用户之前执行if
(!email_exists($email)) return false;
,那么您就是对的。
否则我无法确定该过程是否正确。
哦,是的......
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();
}
希望这些对你有所帮助。