2015-02-07 98 views
-1

我試圖檢查電子郵件是否已經存在於我的數據庫中(在我的註冊表格中),但我想在同一個IF語句中檢查它的電子郵件是否真實存在。PHP檢查電子郵件是否已經存在

我寫了這段代碼,但我仍然可以用DB中已經存在的電子郵件地址註冊。我究竟做錯了什麼?這是已經存在的電子郵件 -

function CheckEmail() 
{ 
    $email = $_POST['email']; 
    $query = mysql_query("SELECT email FROM users WHERE email='" . $email . "'"); 
    $a = mysql_num_rows($query); 
    if ((!filter_var($email, FILTER_VALIDATE_EMAIL)) OR ($a >= 1)) 
    { 
     echo "Your email is not valid or already exists!"; 
     echo $a; 
    } 
    else 
    { 
     return true;  
    } 
} 
+1

起初..不使用mysql ..(msqli就是這樣) – poxip 2015-02-07 13:20:22

+0

沒有更多的上下文是不可能的。也許你需要在if()語句中返回false?然而,邏輯似乎是正確的,假設這裏沒有包含的代碼是檢查CheckEmail === true – 2015-02-07 13:20:55

+0

問題出在你的條件語句 – starkeen 2015-02-07 13:23:12

回答

2

那麼當您嘗試插入重複的值上的電子郵件列使用UNIQUE約束,這樣你會得到一個MySQL錯誤。

您只需檢查查詢結果,如果您沒有任何錯誤,那麼它被插入,如果您收到此錯誤,電子郵件已被使用。

如果我沒有記錯,重複條目的錯誤編號爲1062。

通過這樣做,您可以避免額外的SELECT查詢。

+0

但我不喜歡這種方式(與MySQL錯誤):(我嘗試這個,但仍然無法正常工作:?'CheckEmail () { $電子郵件= $ _POST [ '電子郵件']; $查詢=請求mysql_query( 「選擇的電子郵件用戶WHERE電子郵件= '」 $電子郵件。 「'」); \t \t $ A = mysql_num_rows($查詢); 如果) (filter_var($電子郵件,FILTER_VALIDATE_EMAIL!){ 回聲 '您的郵箱是無效的!'; \t \t \t \t回聲$ A; } ELSEIF($ A> = 1){ \t \t \t \t echo'您的電子郵件已經存在!「; \t \t \t \t} else { return true; } }' – dvdty 2015-02-07 13:48:24

0

檢查電子郵件地址是否有效非常複雜;搜索「驗證電子郵件地址」的stackoverflow來獲得一種感覺。

因此,我不認爲與同if條款檢查它是一個好主意 - 它甚至減少您的錯誤消息後留在懷疑你的用戶對電子郵件地址是無效的樂於助人或已經在那裏。

+0

你可能是對的,但我想知道這件事。 – dvdty 2015-02-07 13:36:26

+0

他只做非常基本的驗證。他並不是試圖完全驗證電子郵件是否有效,而只是確保它是合理的,沒有重複。我沒有看到這個問題。他甚至使用了內置的PHP函數。 – 2015-02-07 13:40:26

0

您可以通過使用while循環並檢查數據庫是否輸入了電子郵件來完成此操作。

以下代碼。

function CheckEmail() 
{ 
    $email = $_POST['email']; 
    $query = @mysql_query("SELECT email FROM users WHERE email='" . $email . "'"); 
    $a = mysql_num_rows($query); 
    while($row = mysql_fetch_array($query)){ 
     if($row['email'] == $email){ 
      echo "Email you entered is already registered"; 
     } 
    } 
} 
相關問題