代码之家  ›  专栏  ›  技术社区  ›  pavanred

如何解决此PHP错误

php
  •  0
  • pavanred  · 技术社区  · 14 年前

    我正在使用 usercake 用于我的项目中的用户管理模块。这是我的第一个PHP项目,我还在学习。我设置了数据库和用户蛋糕项目,但我一直收到这个错误-

    注意:试图在第170行获取c:\wamp\www\usercake\models\funcs.user.php中非对象的属性

    注意:尝试在第172行获取c:\wamp\www\usercake\models\funcs.user.php中非对象的属性

    只有当没有用户登录到系统时,才会捕获此错误。一旦用户登录,我就不会再收到此错误。负责的代码是-

    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中设置为对象实例的对象引用。我说得对吗?如果没有,是什么导致了这个错误?

    我怎么修这个?

    4 回复  |  直到 14 年前
        1
  •  1
  •   Sekhar    14 年前

    我想第一次用户没有登录时,引用是空的,所以在第170行中, $db->sql_escape($loggedInUser->user_id). 导致类似于空引用的情况。尝试移动

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

    如果用户为空,则在代码开头停止取消引用。

        2
  •  1
  •   joe    14 年前
    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;
            }
        }
    }
    

    用此替换函数。在检查$loggedinuser是否为空之前,不应设置SQL语句。

        3
  •  1
  •   itaynoy    14 年前

    我也有同样的问题,

    似乎我有自己的数据库连接 之后 创建了usercake连接,这明显超过了usercake连接,使其无法进行SQL_转义。

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

    btw您还应该在包含usercake之前删除任何会话start()。这将导致会话中的“php”类不完整错误。

        4
  •  0
  •   pestaa    14 年前

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

    你可能想返回假 早期的 如果 $loggedinuser 为空。