2011-03-03 199 views
5

我有一個jQuery遠程驗證的問題。我正在檢查電子郵件是否被註冊,遠程驗證是否有效,但它只顯示值 - 真或假,我不能提交表格。jQuery遠程驗證

jQuery代碼:

$("#form").validate({ 
    rules: { 
    email: { 
     required: true, 
     email: true, 
     remote: "check-email.php" 

    } 
    } 
}); 

檢查mail.php代碼:

$email = trim(strtolower($_REQUEST['email'])); 


$checkemail = mysql_query("SELECT * FROM users WHERE email = '".$email."'"); 

if(mysql_num_rows($checkemail) == 1) 
{ 
$valid = 'false'; 
} 
else 
{ 
$valid = 'true'; 
} //end of $checkemail if statemant 


echo json_encode($valid); 

回答

12
$checkemail = mysql_query("SELECT * FROM users WHERE email = '".$email."'"); 

永遠不要永遠永遠做到這一點。這是asking for trouble:SQL注入,隨機錯誤(單引號在電子郵件地址中有效,BTW)。

parameterized queries,使用它們。這只是代碼的幾行,但它與穀倉門之類的安全缺陷和安全的數據庫交互之間的差異。

if(mysql_num_rows($checkemail) == 1) 
{ 
$valid = 'false'; 
} 
else 
{ 
$valid = 'true'; 
} 

是說

$valid = mysql_num_rows($checkemail) == 1; 

根據該文檔的一個非常冗長的方式,遠程確認的響應是JSON編碼布爾,而不是一個JSON編碼

你有"true""false",這將成爲"\"true\"""\"false\""通過json_encode(),這是不對的。實際的truefalse將變爲"true""false",這是正確的。

設置響應內容類型爲JSON也可能是一個好主意:

header('Content-type: application/json'); 
+1

無用的語義,但它扔了我一秒。我想你想要:'$ valid = mysql_num_rows($ checkemail)== 0;' – 2011-10-26 01:57:55

+0

@Kijana我不確定這裏的「無用語義」是什麼。不,那不是我的意思。 – Tomalak 2011-10-26 06:51:36

+0

「無用的語義」是我把它提出來。 '$ valid = mysql_num_rows($ checkemail)== 1;' - 當它等於1時,'$ valid'不會是'true',這與OP代碼相反。 – 2011-11-10 22:43:45

1

這可能需要一個布爾值時,可以只返回一個字符串。也許嘗試以下操作:

if(mysql_num_rows($checkemail) == 1) 
{ 
$valid = false; 
} 
else 
{ 
$valid = true; 
} 
1

對於誰是不能夠得到遠程驗證使用上述技術的工作,下面是我的兩分錢的人其中可以幫助確保您正確運行。

1)。它僅適用於v1.6.1及更高版本。堅持最新版本的jQuery http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

2)。選擇'同步'遠程執行,默認爲異步。將async設置爲false。

$("#form").validate({ 
    rules: { 
    email: { 
     required: true, 
     email: true, 
     remote: { url:"check-email.php", async:false } 
    } 
    } 
});