Hy我正在尝试在注册表单中验证电子邮件地址。我想检查数据库中是否存在地址;
我有以下功能:
function validateEmailRepeat(){
// check if email exists in the database;
var emailVal = $('#email').val();
// assuming this is a input text field
$.post('check_email.php', {'email' : emailVal}, function(data) {
if(data==1)
{
email.addClass("error");
emailInfo.text("Adress exists");
emailInfo.addClass("error");
dataExist=1;
}
else {
email.removeClass("error");
emailInfo.text("Valid adress");
emailInfo.removeClass("error");
dataExist=0;
}
});
if(dataExist==1)
return false;
else
return true;
}
check_email.php如下所示:
require_once('db.php');
if (isset($_POST['email'])){
$email=mysqli_real_escape_string($con,$_POST['email']);
$sql = "SELECT * FROM users WHERE `username`='".$email."'";
$select=mysqli_query($con,$sql) or die("fail");
$row = mysqli_num_rows($select);
if ($row >0) {
echo 1;
}else echo 0 ;
}
else
echo "post error";
我是新来的。所以不要强硬。提前谢谢。
LE:对不起!我忘了这个问题...... 问题是如果我在函数形式$ .post之外定义var dataExist,我的函数返回true 如果我喜欢它现在在函数中我得到“dataExist未定义”错误并返回true
Le:PHP按照我想要的方式返回预期的1和0 ..
LE: 似乎是在定义
var dataExist = 0;
函数validateEmailRepeat()
之外的解决了这个问题。
如果有更优雅的另一种方式,请告诉我,因为这对我来说似乎有点愚蠢。
答案 0 :(得分:2)
问题是你无法将值返回到被调用函数,因为ajax是异步工作的。
function validateEmailRepeat(){
// check if email exists in the database;
var emailVal = $('#email').val();
// assuming this is a input text field
$.post('check_email.php', {'email' : emailVal}, function(data) {
if(data==1){
email.addClass("error");
emailInfo.text("Adress exists");
emailInfo.addClass("error");
dataExist=1;
}else{
email.removeClass("error");
emailInfo.text("Valid adress");
emailInfo.removeClass("error");
dataExist=0;
}
$('#some_input').val(dataExist);
validateUserName();
});
}
function validateUserName() {
var input = $('#some_input').val();
if (input) {
alert("This username is already taken");// whatever
} else {
// whatever
}
};
答案 1 :(得分:0)
您正在将用户名与电子邮件地址进行比较。这是你的数据库的工作方式吗?
$ sql =“SELECT * FROM users WHERE
username
='”。$ email。“'”;
我打赌你的数据库中有一个字段用于电子邮件本身,否则我建议你这样做。查询应如下所示:
$sql = "SELECT * FROM users WHERE email = '".$email."'";
没有列的单引号。