2013-02-25 71 views
0

我讀了很多關於檢查數據庫中是否存在相同電子郵件的問題。然而,這些解決方案都沒有考慮到電子郵件提供商(例如google)允許用戶在其帳戶名稱中加點的情況。例如[email protected]等於[email protected]檢查是否有已經註冊的電子郵件地址(包括點等)

我明白我可以去掉點並像這樣檢查它,這是個好主意嗎?

但我相信還有其他的事情需要在這裏考慮。

幫我檢查一下數據庫中是否有給定的電子郵件,並考慮了點和其他額外的因素。

UPDATE 這是我檢查是否有電子郵件地址的方式。

public function isemail($email) 
{ 
    $qw = $this->registry->dbi->prepare("SELECT `email` FROM `".PRE."membership` WHERE `email`=?;")->execute($email)->results(); 
    if (empty($qw)) return false; 
    return true; 
} 

問題是,例如[email protected][email protected]不同,因爲有一個點。有些電子郵件允許點是相同的帳戶,有些則不是。我應該如何表現?

類似的解決方案

解決類似的問題都可以在這裏找到

How to check for a duplicate email address in PHP, considering Gmail ([email protected])

+0

爲什麼重複地址有問題? – Blender 2013-02-25 00:41:55

+0

因爲它是一個註冊系統,每個登錄必須有一封電子郵件。 – Davit 2013-02-25 00:43:27

+2

期限在電子郵件地址rfc5322,rfc5321的本地部分有效。 [email protected]和[email protected]應該被認爲是不同的;在電子郵件地址上添加一個唯一的約束就足夠了。 (如果主持人選擇將我@和我@映射到不在您控制範圍內的同一個用戶;那麼可以選擇將我@和mu @映射到同一個用戶/帳戶) – wildplasser 2013-02-25 00:50:12

回答

1

你不應該需要做什麼特別的電子郵件地址點。只要做一個SELECT查詢搜索電子郵件地址,如果你得到1或更多行,那麼你知道它是重複的。我懷疑你的問題可能與你構建查詢的方式有關。在將它包含在查詢中之前,嘗試將電子郵件傳遞給mysqli_real_escape_string。如果這沒有幫助,那麼發佈代碼的相關部分,以便我們可以更好地幫助解決問題。

+0

我使用mysqli,我想我的查詢是正確的。我檢查類似的用戶名,它工作正常。我在說的是'name.surname @ gmail.com'與'namesurname @ gmail.com'相同,註冊人可以在我的網站上添加這些電子郵件,而所有者是同一個。我現在將發佈我的代碼。謝謝。 – Davit 2013-02-25 00:42:37

+2

從技術上講,帶點和不帶點的電子郵件地址是兩個單獨的電子郵件地址。有些電子郵件提供商可能認爲它們是相同的(Gmail似乎就是這種情況),但這絕對不是標準行爲。因此,如果你想考慮這種可能性,那麼你應該專門檢查域名,看看它是否是Gmail等,然後在這些情況下刪除點(首先,爆炸('@',$ email)''在'@'之前的部分執行'str_replace') – 2013-02-25 00:50:16

+0

我剛剛發現這個''http://stackoverflow.com/questions/1586389/how-to-check-for-a-duplicate-email-address-in- php-consideration-gmail-user-name'檢查它是否有興趣。它提供了一個很好的解決方案 – Davit 2013-02-25 00:53:33

相關問題