2014-10-02 71 views
0

首先。我是PHP/SQL和StackOverflow的新手,所以如果我的帖子很奇怪,我很抱歉。我很難弄清楚我的代碼有什麼問題。我註冊了幾個用戶(每個用戶的密碼都是c),但我只登錄失敗。如果這是錯誤的,是我的嗎?用戶認證PHP/SQL

謝謝。

<?php 

session_start(); 

    //Connecting and choosing DB 
    $connection = mysql_connect("link", "user", "pw");   
    mysql_select_db("user", $connection); 

    $username = mysql_real_escape_string($_POST['brukernavn']); 
    $password = mysql_real_escape_string($_POST['passord']); 


    // Check the users input against the DB. 
    $sql = "SELECT * FROM brukere WHERE brukernavn = '$username' AND passord = '$password'"; 
    $result = mysql_query($sql) or die ("Unable to verify user because " . mysql_error()); 

    $row = mysql_fetch_assoc($result); 

    if($row['total'] == 1) 

    { 
     $_SESSION['loggedIn'] = "true"; 
     header("Location: insertlink"); 
    } 
    else 
    { 
     $_SESSION['loggedIn'] = "false"; 
     echo "<p>Login failed, username or password incorrect.</p>"; 
    } 

?> 
+0

我知道你說你是PHP/MySQL的新手,所以我建議開始時不要使用mysql_ *函數。看看mysqli或PDO(後者是我個人的偏好)。我們還需要查看您的註冊碼。你是否在保存密碼時加密密碼? – muttley91 2014-10-02 23:04:48

+4

1.'mysql_ *'已棄用,請使用'mysqli_'或'PDO'。 2.你在你的數據庫中存儲明文密碼,這是非常糟糕的。 – lxg 2014-10-02 23:04:53

+0

@lxg - 我希望我可以給大約100個upvotes ... – 2014-10-02 23:12:19

回答

3

有由mysql_fetch_assoc()返回的數組中沒有total字段。

如果你想知道結果的數量,使用count功能:

if(count($rows) === 1) 
… 

順便說一句,前面已經提到:

  1. mysql_*已過時,使用mysqli_*PDO
  2. 您正在數據庫中存儲明文密碼,這非常糟糕。請閱讀哈希和鹽漬存儲的密碼。
+1

[php密碼加密文檔](http://php.net/manual/en/faq.passwords.php) – 2014-10-02 23:14:36

+0

@lxg非常感謝您,先生!我要去看看mysqli_和PDO。 – 2014-10-02 23:17:35

+0

不錯的鏈接@ gloomy.penguin。不知道PHP有關於此的專門文章。 – lxg 2014-10-02 23:17:43