我该如何解决这个php错误

时间:2010-11-20 09:54:18

标签: php

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

  

注意:尝试在第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中对象实例的Object引用。我对吗?如果没有,导致此错误的原因是什么?

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

我猜第一次用户未登录时,引用为空,因此在第170行中,$db->sql_escape($loggedInUser->user_id).导致类似空引用的内容。尝试移动

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

在代码的开头,如果用户为null,则停止解除引用。

答案 1 :(得分: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;
        }
    }
}

用此替换功能。在检查$ logged In User是否为空之前,不应设置sql语句。

答案 2 :(得分:1)

我遇到了同样的问题,

似乎我有自己的数据库连接,在之后启动建立了userCake连接,这显然会覆盖userCake连接,使得它无法进行sql_escape。

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

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

答案 3 :(得分:0)

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

如果$loggedInUser为空,您可能希望返回错误的早期