2013-05-08 73 views
6

我在尝试让用户使用电子邮件或用户名登录。目前只有用户名被接受。我的工作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。可能是什么问题呢?还是有另一种更好的方式来实现这一目标?

+5

你的代码很好,所以别的是错的。你需要使用phpMyAdmin或者直接在数据库上运行你的查询来确定是什么。同样不要忘记检查mysql_query调用的成功结果,并运行mysql_error来确定是否存在问题。 – 2013-05-08 09:12:47

+3

所有'mysql_'函数都被弃用。此外,您的代码可用于[SQL注入](http://xkcd.com/327/)。而且,md5密码只比使用纯文本存储要好一些。 – Arjan 2013-05-08 09:13:21

+1

“不起作用”是什么意思?提供更多细节。另外,当遇到查询问题时,总是使用'echo $ your_query'来确切地知道发送到数据库的内容。 – Jocelyn 2013-05-08 09:14:21

回答

-1

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

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

但是,您无法确定密码何时出错,或只是登录凭据。 – 2013-05-08 09:32:57

+0

为什么?如果(mysql_num_rows($ result)== 0)echo'错误的用户名或密码!';' – 2013-05-08 10:41:14

+0

如果'='区分大小写或'LIKE'区分大小写取决于使用的排序规则。 http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html – dognose 2014-03-22 21:04:22

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."'"; 
} 

所以,如果条件能够满足,则电子邮件将被验证。否则登录名将被验证

+0

所以你假设用户名不能包含'@'?感觉像是错误的方法。 – Hirnhamster 2014-08-23 21:12:30

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

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

0

试试这个,我敢肯定,这将工作:“。$的用户名。

$ SQL = “SELECT * FROM客户WHERE登录=” “ '|电子邮件 ='” $用户名。“'AND password ='”。$ password。“'”;

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

补充一点:

如果(mysql_num_rows($结果)== 0){回声“错误的用户名或密码';}

+0

我说得对吗?你在SQL中使用按位操作数(| - 按位或)吗?我肯定错过了一些东西 – Yaronius 2015-09-09 15:18:10

+0

你是否解决了这个问题还是有问题? – Stormix 2015-10-25 13:42:43

-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 
} 
+0

当你只需要一个时,你为什么会提出2个要求? – Hirnhamster 2014-08-23 21:11:24

相关问题