我试图检查我的数据库中是否已存在电子邮件(在我的注册表单中),但我想在同一个IF语句中检查其电子邮件是否实际存在。
我写了这段代码,但我仍然可以注册已经存在于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;
}
}
答案 0 :(得分:2)
您应该在电子邮件列上使用UNIQUE
约束,这样当您尝试插入重复值时,您将收到MySQL错误 - 已经存在的电子邮件。
您只需检查查询结果,如果您没有插入任何错误,如果您收到此错误,则该电子邮件已被使用。
如果我没记错的话,重复输入的错误编号为1062。
通过这样做,您可以避免额外的SELECT
查询。
答案 1 :(得分:0)
检查电子邮件地址是否有效非常复杂;搜索stackoverflow以“验证电子邮件地址”以获得一种感觉。
因此,我认为使用相同的if
子句检查它根本不是一个好主意 - 甚至通过让用户进入来减少错误消息的帮助性怀疑电子邮件地址是无效还是已经存在。
答案 2 :(得分: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";
}
}
}