2011-05-10 93 views
0

我有這樣的問題:調用成員函數的非對象的問題

function do_login() { 
global $db; 

    $username = $_POST['username']; 
    $password = md5($_POST['password']); 

    $row = $db->query("SELECT username, password FROM users WHERE username = '$username' AND password = '$password'"); 

    while ($rows = mysql_fetch_array($row)) { 
     if($username == $rows['username'] && $password == $rows['password']) { 
      $_SESSION['Logedin'] = true; 
      echo 'yah'; 
     }else{ 
      echo 'Neh'; 
     }; 
    } 
} 

,因爲它給了我這個錯誤:致命錯誤: 調用一個成員函數查詢()在非-object in line 79

我不知道我在想什麼! 感謝您的幫助

+2

你知道[小鮑比表(http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain),你呢? – Gordon 2011-05-10 14:20:29

+0

不,我不知道那是什麼? – TooCooL 2011-05-10 14:21:39

+0

避免使用'全局',它絕對是每個編碼器的敵人。函數沒有參數 - 在那裏傳遞$ db。 – 2011-05-10 14:40:29

回答

1

$db可能未初始化。在之前的行發出一個var_dump($db);看到它所包含的內容。

另外,您的代碼可以在sql注入時打開全部...在查詢中使用任何內容之前清理$_GET/$_POST。試試這個用戶名,例如:

$_POST['username'] = "admin' OR 1 = 1 OR username='" 
+0

的問題是,經過這功能,所以現在它的工作類被初始化,但我不是在安全性確實不錯,但我會做一些事情,謝謝 – TooCooL 2011-05-10 14:27:45

0

我的猜測(和它只是一個猜測)是,當你調用關閉以連接到數據庫,你得到一個錯誤代碼或錯誤的背部,而不是一個數據庫對象。而且你沒有檢查這個條件,並且稍後將它用作一個普通變量。當然,一個int或者false或者其他沒有查詢方法的東西。

這只是一種猜測。

相關問題