我在JavaScript和jQuery中有这个代码,我需要修复它:
function valid_form() {
val_avail_email=valid_avail_email();
if (val_avail_email!="") {
$("#email_valid").html(val_avail_email);
return false;
}
return true;
}
function valid_avail_email() {
var error="";
$.get("valid_avail_email.php",{email:document.reg_form.email_reg.value},function(output) {
error=output;
});
return error;
}
所以很明显我希望error
变量包含valid_avail_email.php
的输出,而不是让valid_avail_email()
函数返回该值。
以下是valid_avail_email.php
中的代码:
<?php
include("config.php");
$email=$_GET["email"];
$sql="select email from users";
$sql_query=mysql_query($sql);
if (!$sql_query) {
echo mysql_error();
}
$res_assoc = mysql_fetch_assoc($sql_query);
foreach ($res_assoc as $field=>$value) {
if ($value==$email) {
echo "please use another email this one is taken ";
}
}
?>
答案 0 :(得分:1)
问题是$ .get()函数启动异步ajax调用,意味着该函数在ajax调用仍在运行时返回。您必须从ajax回调函数中通知GUI,例如:
$.get("valid_avail_email.php",{email:document.reg_form.email_reg.value},function(output) {
error=output;
if (error !== '')
alert('Sorry, use another email!');
});
答案 1 :(得分:0)
您不需要执行foreach循环来检查电子邮件是否在db中。只需执行以下查询:
SELECT email FROM users WHERE email = '$email'
并检查结果是否包含任何项目。这种方法比使用“foreach”循环枚举所有电子邮件更快,因为如果你有一个大的数据库,db会返回1或0结果而不是数千。
你的valid_avail_email()没关系..只要检查你的JS是否该函数返回任何内容,如果是,那么alert会显示错误:
var emailOk = valid_avail_email("blabla@email.com");
if(emailOk != ""){
//the following alert will show the error from php, it can show mysql_error() or "please use another email.." message
alert(emailOk);
//do stuff to abort the script
}