2013-02-25 68 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

相关问题