2013-06-26 22 views
1

無論我做什麼,我總是會得到「錯誤的用戶名或密碼」 已嘗試不同類型的解決方案,但沒有任何幫助。這個php登錄碼有什麼問題?

//header('Access-Control-Allow-Origin: *'); 

include('db.php'); 

// username and password sent from form 
$myusername=$_POST['username']; 
$mypassword=$_POST['password']; 

// To protect MySQL injection 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 

$sql="SELECT * FROM users WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 

$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 

if($count==1){ 


     echo '{"type":"1",'. 
      '"item": "Logged In"'. 
      '}'; 
} 
else { 
echo '{"type": "0",'. 
      '"item":"Wrong Username or Password"'. 
      '}'; 
} 

誰能幫助嗎? 先進的謝謝!

+0

你的代碼在哪裏?我們應該看什麼來發現錯誤? – Fallen

+6

我認爲問題是你沒有代碼。 – Kermit

+1

代碼隱藏,因爲它沒有正確格式化 –

回答

3

可能有多種原因。

  1. 無論您的用戶名或密碼不正確(這是值得檢查此類型的錯誤)
  2. 你必須與你DATABSE連接問題! (啓用錯誤報告和調試東西)
  3. 您對發佈的數據有問題。有時候你會在不知情的情況下進行GET而不是POST。
  4. 或者,您的密碼或usename包含已被轉義且未正確匹配的字符串!

編輯

一種你對夫婦的其他建議!總是使用mysql準備好的語句來獲得最大的安全性,並且使用mysql_的函數不推薦使用mysqli_替代方法。您使用stripslashes表明我正在使用magic_quotes_,這再次令人沮喪! :)

+0

是的,而不是$ _REQUEST我做了$ _POST。 謝謝:) –

+0

:)祝你好運! – cipher

+0

@RotemShukron - 如果這是解決方案,那麼你還沒有配置PHP來顯示錯誤消息。這是你在進一步研究之前需要解決的問題;沒有錯誤消息的幫助,編碼是不可能的。這裏有一個[簡要說明](http://stackoverflow.com/a/5680885/13508)。 –

0

我建議你看看你使用的功能的適當的手冊頁,並注意返回值。舉例來說,如果你去mysql_query()和滾過«這個擴展不贊成PHP 5.5.0的,並會在將來被移除»警告你會看到這一點:

對於SELECT [ ...]以及其他返回結果集的語句, mysql_query()返回成功的資源,或者錯誤地返回FALSE

mysql_num_rows()

類似地:

行中成功或FALSE上失敗的結果集的數目。

一切都表明其中一個正在返回FALSE

依靠結果集計數來確定是否匹配是一種有風險的技術(它可以工作或不依賴於您的設置)。運行COUNT(*)或嘗試獲取第一行更堅如磐石。

一些隨機的結論:

  • 不要忽略錯誤檢查。
  • 如果我是你,我不會浪費時間學習過時的擴展。
  • stripslashes()建議在您的服務器中啓用magic_quotes。如果是這樣的話,請在之前損壞的數據倒禁用它。
0

一個例子使用stripslashes()函數是當PHP指令magic_quotes_gpc的是(這是在默認情況下PHP 5.4之前),而你不是活得將此數據插入需要轉義的地方(如數據庫)。例如,如果您只是直接從HTML表單輸出數據。

mysql_real_escape_string - 轉義字符串中的特殊字符以用於SQL語句。

根據我的觀點mysql_real_escape_string此函數從用戶名和密碼中轉義特殊字符。每次在用戶名或密碼中找到任何特殊字符時,都會將其刪除。並總是給行數爲零...