2011-01-16 27 views
0

我試圖阻止用戶在我工作的網站上有重複的電子郵件地址。這是我使用的方法:PHP/MYSQL重複的電子郵件地址

function createUser($emlAd) 
{ 
    $sql = "SELECT FROM Users WHERE email='$emlAd'" ; 

    $result = mysql_query($sql) ; 

    if(mysql_num_rows($result) > 0) 
    { 
die("There is already a user with that email!") ; 
    }//end if 

    //rest of function 
}//end createUser 

此代碼不能完成任務,用戶仍然能夠與已經使用電子郵件創建一個帳戶。奇怪的是,當我將if條件更改爲:

mysql_num_rows($result) == 0 

用戶無法使用任何電子郵件地址創建帳戶。爲什麼當行數大於0時,代碼不會將控制權傳遞給if塊?

+0

嘗試在執行前傾銷$ sql,看看它是否給你一個更好的線索,爲什麼它找不到任何結果 – Naatan

+0

請務必查看'mysql_real_escape_string'。這是你很想習慣早期使用的東西。 –

+0

您是否檢查過查詢實際上已經成功?如果出現問題,$ result將爲boolean FALSE,並且mysql_num_rows調用將失敗,並且返回false,這將導致類型轉換爲0,這會導致一個'(0> 0)'檢查,並且用戶進入。 –

回答

2

試試這個:

SELECT * FROM ...(注意SELECT後面的星號)。我不認爲您所呼叫的任何記錄(除用戶的第一條記錄)。無論如何,我可能會犯錯,但請注意。

+0

看起來很明顯,當你指出:-)。爲你+1。 – 2011-01-16 04:13:15

+0

這確實是一個愚蠢的錯誤。謝謝! –

+0

歡迎:)謝謝。 – OldWest

0

它看起來像你從來沒有得到一個電子郵件比賽。所以

mysql_num_rows($result) == 0 

將始終爲真。

嘗試

echo $sql 

,以確保您的SQL看起來正確。您可能沒有正確地傳遞$ emlAd到的createUser()

相關問題