2013-03-02 205 views
0

誰能告訴我爲什麼這個簡單的PHP/MySQL登錄代碼總是顯示「錯誤的用戶名或密碼」,即使我輸入了正確的用戶名/密碼組合?我花了很多時間試圖弄清楚這一點。PHP/MySQL登錄不工作

<?php 
// Database Connection 
mysql_connect("IP", "charlesfries", "Password") or die(mysql_error()); 
mysql_select_db("charlesfriessdatabase") or die(mysql_error()); 

// Variables 
$username = $_POST["username"]; 
$password = $_POST["password"]; 

$result = mysql_query("SELECT * FROM accounts WHERE username = '$username' and password = '$password'"); 

// Success 
$count = mysql_num_rows($result); 
if ($count == 1) // Checks for Single Record of Given Username & Password 
{ 
    session_register("username"); // Registers Username Key in Session 
    session_register("password"); // Registers Password Key in Session 
    header("location:http://charliefries.tk/"); 
} 

// Failure 
else 
{ 
    echo "Wrong Username or Password"; 
} 
?> 

此外,請不要告訴我我的代碼是可注射的。我知道它是。

這裏是我的表單代碼:

<form action="signinprocess.php" method="post"> <!-- Sign In Process --> 
Username: <input type="text" name="username" style="width:150"> 
<br /> 
Password: <input type="password" name="password" style="width:153"> 
<br /> 
<br /> 
<input type="submit" value="Sign In"> 
</form> 
+0

你嘗試在phpmyadmin等? – kennypu 2013-03-02 03:27:19

+0

我做到了。密碼和用戶名在表格中,但是此代碼不檢索它。 – 2013-03-02 03:28:45

+0

你確定這些值在'$ _POST'數組中嗎? – prodigitalson 2013-03-02 03:29:10

回答

4

嘗試LIMIT 1 SELECT,以確保你只有1行。

+0

工作正常!謝謝! – 2013-03-02 03:39:06

+0

原來我有重複的條目。 – 2013-03-02 03:40:18

+0

if($ count == 1)//檢查給定用戶名和密碼的單個記錄。 您的數據庫數據可能包含重複的用戶名或密碼,該用戶名或密碼會返回大於1的結果。 嘗試過濾並使用戶名唯一,以便不重複帳戶並加密您的密碼。 :) – Snippet 2013-03-02 03:43:26

1

有一些「壞主意」,在你的代碼:

  1. 請勿用於新項目mysql_ *。這已經過時了。切換到mysqli_ * http://php.net/manual/en/book.mysqli.php
  2. 通過用戶名和密碼選擇並不總是一個好主意。在大多數情況下,如果密碼正確,最好搜索用戶名並檢查。隨着準備的陳述,你會得到像這樣的東西

    SELECT * FROM accounts WHERE username =?

    在下一步中,您可以檢查,如果您的密碼與數據庫中的密碼相同, G。用if語句$ _POST ['password'] == $ dataFromDB ['password']。

  3. 當前您正在以純文本格式保存密碼。這是一個非常糟糕的主意。看看bcrypt。請參閱How do you use bcrypt for hashing passwords in PHP?
  4. session_register已過期。使用類似

    $ _SESSION [ '用戶名'] = $ dataFromDB [ '用戶名']

依我之見,問題是在(不存在)的限制。無論如何,希望這些提示能幫助你。

+0

感謝您提供這方面的信息! – 2013-03-02 03:44:38