检查用户名和电子邮件的SQL,如果记录存在,则创建错误消息


Check SQL for UserName and Email, Create Error message if record exists

当一个用户在我的网站上注册时,我希望能够检查我的sql表/记录,看看他们注册的电子邮件和用户名是否已经被使用。下面是我用来在任何字段为空时返回错误的代码:

//Input Validations
if($user_name == '') {
    $errmsg_arr[] = 'Username missing';
    $errflag = true;
}
if($user_password == '') {
    $errmsg_arr[] = 'Username Password missing';
    $errflag = true;
}
if($insp_name == '') {
    $errmsg_arr[] = 'Inspector Name missing';
    $errflag = true;
}
if($insp_email == '') {
    $errmsg_arr[] = 'Inspector Email missing';
    $errflag = true;
}
if($confirm_password == '') {
    $errmsg_arr[] = 'Confirm Password missing';
    $errflag = true;
}       
if ($user_password != $confirm_password) { 
        $errmsg_arr[] = 'The password which you have entered do not match';
    $errflag = true;
   }
//If there are input validations, redirect back to the registration form
if($errflag) {
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
    session_write_close();
    header("location: accountinfo.php");
    exit();
}

我试过这样检查我的sql:

$result=mysql_query("SELECT email FROM members WHERE `email` = '$insp_email'" ); 
$exist = mysql_fetch_row($result); 
    if ($exist == 1) { 
       $errmsg_arr[] = 'That email is already registered.';
    $errflag = true;
       }

这不起作用。我知道这可能是一个简单的解决方案,我只是看不出来,哈哈。我想要的是检查电子邮件和用户名的sql。如果这两个已经存在于sql中,那么我想重定向回注册页面,并显示一条消息说"该电子邮件或用户名已在使用"

谢谢!

好了,我现在把它修好了,这正是我想要的。但我注意到的另一个问题是,如果有一个错误(空白字段,用户名已经在使用),当它重定向回注册页面,它不显示错误或解释为什么用户被发送回注册页面。这部分的代码在下面:

//If there are input validations, redirect back to the registration form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: accountinfo.php");
exit();
}
$result=mysql_query("SELECT email FROM members WHERE `email` = '$insp_email' or username='$username' LIMIT 1" ); 
$exist = mysql_fetch_row($result); 
    if ($exist !==false ) { 
       $errmsg_arr[] = 'That email is already registered.';
    $errflag = true;
       }

试试这样:

select count(*) from yourtable where username = 'jimmy' and email = 'jim@aol.com';

如果result = 0,则该组合不存在,否则存在。

但是,您应该检查用户名,因为您不希望多个用户使用相同的用户名,不是吗?

如果是,你可以像上面那样做,但是使用OR:

select count(*) from yourtable where username = 'jimmy' or email = 'jim@aol.com';

希望这对你有帮助!

编辑

你也可以在用户名列和电子邮件列上放置唯一的约束,当你试图插入重复的记录时,它会抛出和错误。然后可以处理错误。除了上述操作之外,您还应该这样做,以确保在不使用UI的情况下不会创建重复记录。

使用mysql_num_rows

http://php.net/manual/en/function.mysql-num-rows.php

if (mysql_num_rows($result) > 0)
{
   $errmsg_arr[] = "That email is already registered.";
   $errflag = true;
   etc...

而且,因为你实际上试图做一些输入验证,你应该考虑保护你的代码对SQL注入

http://php.net/manual/en/function.mysql-real-escape-string.php

在WHERE子句中使用OR来检查电子邮件和用户名

$result = mysql_query("SELECT email FROM members WHERE `email` = '$insp_email' OR `username` = '$user_name'");