2010-11-20 98 views
0

我在我的项目中使用usercake作为用户管理模块。这是我的第一个PHP项目,我仍然在学习。我建立了数据库和usercake项目,但我不断收到此错误 -如何解决此php错误

注意:试图让非对象的属性在C:\ WAMP \ WWW \ userCake \型号\上线170 funcs.user.php

注意:试图让非对象的属性在C:\ WAMP \ WWW \ userCake \型号\ funcs.user.php上线172

而这个错误只有当没有抓到用户登录到系统。一旦用户登录,我不会再遇到这个错误。代码负责是 -

function isUserLoggedIn() 
{ 
    global $loggedInUser,$db,$db_table_prefix; 

    $sql = "SELECT User_ID, 
      Password 
      FROM ".$db_table_prefix."Users 
      WHERE 
      User_ID = '".$db->sql_escape($loggedInUser->user_id)."' //line 170 
      AND 
      Password = '".$db->sql_escape($loggedInUser->hash_pw)."' // line 172 
      AND 
      Active = 1 
      LIMIT 1"; 

    $sql = mysql_num_rows($sql); 

    if($loggedInUser == NULL) 
    { 
     return false; 
    } 
    else 
    { 
     //Query the database to ensure they haven't been removed or possibly banned? 
     if(returns_result($sql) > 0) 
     { 
       return true; 
     } 
     else 
     { 
      //No result returned kill the user session, user banned or deleted 
      $loggedInUser->userLogOut(); 

      return false; 
     } 
    } 
} 

我试图解决这个与我有限的知识的PHP,但无法。我猜这个错误类似于未在.net中设置为对象实例的对象引用。我对吗?如果不是,是什么导致了这个错误?

我该如何解决这个问题?

回答

1

我想第一次用户没有登录,引用为空,所以在第170行,$db->sql_escape($loggedInUser->user_id).导致类似空引用的东西。尝试在代码停止提领,如果用户是空的开始移动

if($loggedInUser == NULL) { return false; }

0

我怀疑只要用户没有登录,全局变量$loggedInUser就是空的。所以通过SQL使用它来检测用户是否登录...这是一条蛇咬自己的尾巴。

如果$loggedInUser为空,那么您可能希望返回前面的

1
function isUserLoggedIn() { 
    global $loggedInUser, $db, $db_table_prefix; 

    if ($loggedInUser == NULL) { return false; } 
    else { 
     $sql = "SELECT User_ID, 
       Password 
       FROM " . $db_table_prefix . "Users 
       WHERE 
       User_ID = '" . $db->sql_escape($loggedInUser->user_id) . "' 
       AND 
       Password = '" . $db->sql_escape($loggedInUser->hash_pw) . "' 
       AND 
       Active = 1 
       LIMIT 1"; 

     //Query the database to ensure they haven't been removed or possibly banned? 
     if (returns_result($sql) > 0) { return true; } 
     else { 
      //No result returned kill the user session, user banned or deleted 
      $loggedInUser->userLogOut(); 

      return false; 
     } 
    } 
} 

用此替换功能。 SQL语句不应该被设定,直到它检查后,如果$与loggedInUser是空..

1

我有完全相同的问题,

看来我有我自己的数据库连接whice被的userCake连接是后开始这明显地忽略了userCake连接,使得它不可能实现sql_escape。

尝试在userCake包含后禁用任何数据库连接。

顺便说一句,你还应该在userCake包含之前删除任何session_start()。这将导致会话中的__php_incomplete_class错误