使用用户名或电子邮件登录

时间:2013-05-08 09:09:38

标签: php mysql

我正在尝试让我的用户使用电子邮件或用户名登录。目前只接受用户名。我的工作SQL看起来像这样:

$sql = "SELECT * FROM customers WHERE login = '".$username."' AND password = '".$password."'";

的信息:

  • $username的值为$_POST['username']
  • $password的值为md5($_POST['password'])

现在我想将其扩展到客户可以在其个人资料中输入的电子邮件地址。我的SQL看起来像这样:

$sql = "SELECT * FROM customers WHERE (login = '".$username."' OR email = '".$username."') AND password = '".$password."'";

我将使用以下命令检查此SQL:

$result = mysql_query($sql);    
mysql_num_rows($result)

但目前它不起作用。如果我在SQL中使用OR,则mysql_num_rows会返回0。可能是什么问题呢?或者还有另一种更好的方法来实现这一目标吗?

6 个答案:

答案 0 :(得分:0)

试试这个:用户名可能有用户名或电子邮件ID吗?因此,首先检查用户名字符串中是否有“@”符号。

那是

if(stripos($username,'@') !== FALSE){
$sql = "SELECT * FROM customers WHERE email = '".$username."' AND password = '".$password."'";
}else{
 $sql = "SELECT * FROM customers WHERE login = '".$username."' AND password = '".$password."'";
}

因此,如果条件成功,则将验证电子邮件。其他登录名将被验证

答案 1 :(得分:0)

尝试这个,我相信它会起作用:

  

$ sql =“SELECT * FROM customers WHERE login ='”。$ username。“'| email   ='“。$ username。”'和密码='“。$ password。”'“;

确定密码何时出错,或只是登录凭据:

添加:

  

if(mysql_num_rows($ result)== 0){echo'用户名或密码错误!';}

答案 2 :(得分:-1)

也许问题出现在角色的情况下?

SELECT * FROM `customers` WHERE (LOWER(`login`)='" . strtolower($username) . "' OR
LOWER(`email`)='" . strtolower($username) . "') AND `password`='" . $password . "'"

答案 3 :(得分:-1)

 $sql = "SELECT * FROM customers 
         WHERE EXISTS(select 1 from customers where login = '".$username."'
                      OR email = '".$username."') 
               AND password = '".$password."'";

试试这个,我希望你的问题能够得到解决。

答案 4 :(得分:-1)

您可以在条件

中使用2个查询和or
$query=mysql_query("select * from customers where user='$username' and password='$password'");
$query1=mysql_query("select * from customers where email='$username' and password='$password'");
if(mysql_num_rows($query)==1 || mysql_num_rows($query1)==1)
{
//YOUR CODE
}
else
{
//YOUR CODE
}

答案 5 :(得分:-1)

我知道这个问题很旧,但是由于没有适合OP需求的答案,因此有一个对我有用的解决方案:

我将filter_var()函数与 FILTER_VALIDATE_EMAIL 参数一起使用。

if (filter_var($input, FILTER_VALIDATE_EMAIL)) {
  $type = "email";
} else {
  $type = "username";
}
$sql = hive_query("SELECT * FROM `customers` WHERE `" . $type . "` = '" . $input . "'");