2015-11-04 101 views
0

當前我想在用戶登錄到系統時從兩個表中獲取兩個不同的數據。權限表是「用戶」,「user_staff」和「user_group」。但是,當用戶輸入其用戶名和密碼,並提交提示「致命錯誤:調用第26行的C:\ xampp \ htdocs \ auditsystem \ index.php中的非對象上的成員函數fetch_array()」

下面是代碼:

if($username!= "" && $password != "") 
{ 
//INNER JOIN user_group_module_role ON user.user_group_module_role_id = user_group_module_role.id 
    $result = $db->query("SELECT * FROM user 
          INNER JOIN user_staff ON user.user_staff_id = user_staff.id 
          WHERE username = '$username' AND password = '$password'"); 



    if($result->num_rows == 1) 
    { 
     $validate = $result->fetch_assoc(); 

     $query1 = "SELECT * FROM usergroup WHERE id = $validate[user_group_id]"; 
     $result1 = $db->query($query1); 
     $row1 = $result1->fetch_array(); 
     //change here for the authority 
     $_SESSION['user_staff'] = $validate['displayname']; 
     $_SESSION['usergroup'] = $row1['user_group_type']; 
     echo "<script language='javascript'>window.location='panel.php'</script>"; 
    } 
    else 
    { 
     echo "<script>alert('Sorry, wrong username and password please check.')</script>"; 
    } 
} 
+1

1)你必須在雙引號內的'{}'中包裝數組。 2)你想用單引號包裝索引:'$ query1 =「SELECT * FROM usergroup WHERE id = {$ validate ['user_group_id']}」; – Twisty

+2

您的第二個查詢失敗,並且由於您沒有檢查,所以'$ result1'爲null/false,並且沒有成員函數。 – Twisty

+1

[mysqli - fetch \ _Array錯誤調用函數在非對象mysqli]上獲取\ _array()的可能重複(http://stackoverflow.com/questions/14639965/mysqli-fetch-array-error-call - 對一個成員函數提取陣列在一個非目標) –

回答

5

您所查詢的格式不正確和失敗。這使得$ result1 null/false。您的查詢也容易受到SQL注入的攻擊!

if($username!= "" && $password != ""){ 
//INNER JOIN user_group_module_role ON user.user_group_module_role_id = user_group_module_role.id 
    $result = $db->query("SELECT * FROM user INNER JOIN user_staff ON user.user_staff_id = user_staff.id WHERE username = '$username' AND password = '$password'"); 
    if($result->num_rows == 1){ 
     $validate = $result->fetch_assoc(); 
     $query1 = "SELECT * FROM usergroup WHERE id = {$validate['user_group_id']}"; 
     if($result1 = $db->query($query1)){ 
      $row1 = $result1->fetch_array(); 
      //change here for the authority 
      $_SESSION['user_staff'] = $validate['displayname']; 
      $_SESSION['usergroup'] = $row1['user_group_type']; 
      echo "<script language='javascript'>window.location='panel.php'</script>"; 
     } else { 
      echo "<script language='javascript'>alert('SQL Error.');</script>"; 
     } 
    } else { 
     echo "<script>alert('Sorry, wrong username and password please check.')</script>"; 
    } 
} 
+0

感謝兄弟。你解決了我的問題:) – Andrew

+0

嗨兄弟,是否有可能添加另一個查詢插入到log_record? \t $查詢= 「INSERT INTO user_log_record(用戶名,ipaddres) \t \t \t VALUES \t \t \t( '$用戶名', '$ IP')」; \t $ result = $ db-> query($ query); – Andrew

+0

你不會從'INPUT'查詢中得到結果集。但是,是的,你可以用同樣的方式執行另一個查詢:'$ db-> query($ query);' – Twisty