2013-05-08 327 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

相關問題