2015-11-13 49 views
0

我有這樣的錯誤我的簡單登錄系統出錯。試圖從數據庫中讀取

「警告:mysql_result():\ XAMPP \ htdocs中\核心\功能\ users.php第14行:USER_ID在MySQL結果指數13用C未找到」我想我不知道如何從我的數據庫中讀取,它看起來像

this

這裏是我的用戶代碼

<?php 
    function user_exists($username){ 
      $username = sanitize($username); 
      return (mysql_result(mysql_query("SELECT COUNT(`uID`) FROM `user` WHERE `uUserName` = '$username'"), 0) == 1) ? true : false; 
    } 

    function user_active($username){ 
      $username = sanitize($username); 
      return (mysql_result(mysql_query("SELECT COUNT(`uID`) FROM `user` WHERE `uUserName` = '$username' AND `uActive` = 1"), 0) == 1) ? true : false; 
    } 

    function user_id_from_username($username){ 
      $username = sanitize($username); 
      return mysql_result(mysql_query("SELECT `uID` FROM `user` WHERE `uUserName` = '$username'"), 0, 'user_id'); 
    } 

    function login($username,$password){ 
      $user_id = user_id_from_username($username); 

      $username = sanitize($username); 
      $password = md5($password); 

      return (mysql_result(mysql_query("SELECT COUNT(`uID`) FROM `user` WHERE `uUserName` = '$username' AND `uPassword` = '$password'"), 0) == 1) ? $user_id : false; 
    } 

?>

這是我登陸系統的代碼

if(empty($_POST) === false){ 
     $username = $_POST['username']; 
     $password = $_POST['password']; 

     if(empty($username) === true || empty($password) === true){ 
       $errors[] = 'You need to enter a Username and Password'; 
     } else if(user_exists($username) == false){ 
       $errors[] = 'We cannot find that Username, have you registered?'; 

     } else if(user_active($username) === false){ 
       $errors[] = 'You have not activated your account.'; 
     } 
     else { 
       $login = login($username,$password); 
       if($login === false){ 
         $errors[] = 'The username or password is incorrect'; 
       } else { 
         echo 'ok'; 
       } 
     } 

     print_r($errors); 

} 
+0

數據庫查詢通常不區分大小寫。您在數據庫級別將密碼作爲純文本比較是一個大紅旗,您的應用程序將很容易受到各種黑客攻擊。 - 編輯:我現在看到散列,對不起,忽略我 – Nikki9696

+0

問題在於這一行:'mysql_result(mysql_query(「SELECT'uID' FROM'user' WHERE'uUserName' ='$ username'」),0, 'user_id');' 您正在使用'user_id'作爲偏移量,而不是mysql識別或查看的數字或字段。嘗試將其改爲「uID」。 –

+0

我知道我正試圖輕鬆區分現在的事情。所以我明確表示。但它仍然無法找到密碼,有任何幫助嗎? –

回答

0

目前我看到的是你user_id_from_username功能的唯一問題。

你試圖設置一個不存在的字段的偏移量,並且mysql沒有找到它。因此,它拋出一個錯誤:

function user_id_from_username($username){ 
     $username = sanitize($username); 
     return mysql_result(mysql_query("SELECT `uID` FROM `user` WHERE `uUserName` = '$username'"), 0, 'uID'); 
} 

試試上面或離開關閉uID因爲它不是強制性的,而是可選參數。

Insert obligatory, you should be using mysqli instead of mysql at this point if your PHP version supports it.

1

您在第13行指定'user_id'作爲偏移量時出錯。

如果該行存在,您可以簡單地獲取uID列並存儲該值。

$result = mysql_query("SELECT `uID` FROM `user` WHERE `uUserName` = '$username'"); 
$user_id = 0; // default value, meaning user not found 

if ($result && mysql_num_rows($result) > 0){ 
    $row = mysql_fetch_assoc($result); 
    $user_id = $row[0]; 
} 

return $user_id; 

然後你可以修改你的登錄函數來檢查user_id> 0與否。如果它大於0,那麼你得到了該用戶的ID。