2015-02-07 101 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"; 
     } 
    } 
} 
相关问题