7

我正在尝试让我的用户使用电子邮件或用户名登录。目前只接受用户名。我的工作 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)

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

4

6 回答 6

0

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

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

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

添加这个:

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

于 2014-03-22T20:30:10.877 回答
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."'";
}

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

于 2013-05-08T11:15:35.533 回答
-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
}
于 2014-07-03T11:57:53.010 回答
-1
 $sql = "SELECT * FROM customers 
         WHERE EXISTS(select 1 from customers where login = '".$username."'
                      OR email = '".$username."') 
               AND password = '".$password."'";

试试这个,希望能解决你的问题。

于 2013-12-02T07:55:46.143 回答
-1

也许问题出在字符的情况下?

SELECT * FROM `customers` WHERE (LOWER(`login`)='" . strtolower($username) . "' OR
LOWER(`email`)='" . strtolower($username) . "') AND `password`='" . $password . "'"
于 2013-05-08T09:30:59.930 回答
-1

我知道这个问题很老,但由于它没有适合 OP 需求的答案,所以这里有一个适合我的解决方案:

我使用了带有FILTER_VALIDATE_EMAIL参数的filter_var()函数。

if (filter_var($input, FILTER_VALIDATE_EMAIL)) {
  $type = "email";
} else {
  $type = "username";
}
$sql = hive_query("SELECT * FROM `customers` WHERE `" . $type . "` = '" . $input . "'");
于 2020-03-16T21:53:36.810 回答