我在项目中使用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引用。我对吗?如果没有,导致此错误的原因是什么?
我该如何解决这个问题?
答案 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
为空,您可能希望返回错误的早期。