2011-11-05 51 views
1

我在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 "; 
    } 
} 

?> 
+4

這是你的JavaScript的職業生涯的重要時刻:) – Triptych

+0

旁註:你從數據庫中獲取所有的電子郵件地址,然後循環它們以找到$ email?這是非常低效的。 $ email = mysql_real_escape_string($ _ GET ['email']); $ sql =「選擇ID用戶WHERE電子郵件='{$ email}'」; //檢查是否有結果 – dirkbonhomme

回答

1

問題是$獲得()函數發起異步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!'); 

});

+0

謝謝你的回覆,但我真的需要valid_avail_email()函數來返回錯誤值,因爲我有另一個功能是獲取錯誤,並停止提交如果有錯誤 – mak

+0

那麼,如果你想檢查服務器端的電子郵件,你必須等待你的ajax調用的異步返回。有可能啓動一個同步ajax調用,但是這是非常不推薦的......所以在ajax success()回調中調用你的第二個函數,並且首先檢查它。 –

0

你不需要做一個foreach循環來檢查電子郵件是否在db中。只需執行以下查詢:

SELECT email FROM users WHERE email = '$email' 

並檢查結果是否包含任何項目。這個方法比使用「foreach」循環枚舉所有電子郵件要快,因爲db返回1或0的結果,而不是數千,如果你有一個大的分貝。

您valid_avail_email()是確定..只是檢查你的JS如果函數返回任何東西,如果是的,有警報顯示錯誤:

var emailOk = valid_avail_email("[email protected]"); 
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 
} 
+0

我加了整個代碼,你可以看到爲什麼我需要valid_avail_email()函數來返回一個錯誤值。 – mak