我在userpie登录和注册脚本中遇到问题。所以脚本在linux薄荷上使用灯泡效果很好!但当我进入Windows时,有超过15个问题,其中一个是
注意:尝试在第164行的C:\ armadicehost \ htdocs \ models \ funcs.user.php中获取非对象的属性
注意:尝试在第165行的C:\ armadicehost \ htdocs \ models \ funcs.user.php中获取非对象的属性
这是第165和164行的代码:
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)."'
AND password = '".$db->sql_escape($loggedInUser->hash_pw)."'
AND
active = 1
LIMIT 1";
}
if($loggedInUser == NULL)
对于login.php,它说......
注意:未定义的索引:第401行的C:\ armadicehost \ htdocs \ login.php中的状态
<?php
if(!empty($_POST))
{
?>
<?php
if(count($errors) > 0)
{
?>
<?php
} }
?>
我需要解决这个问题吗?
答案 0 :(得分:0)
似乎由于您的逻辑,$loggedInUser
未正确初始化。 &#34;非对象&#34;在这种情况下意味着它是null
或不是一个对象(即它是一个字符串或数字......)。
尝试改变:
function isUserLoggedIn()
{
global $loggedInUser,$db,$db_table_prefix;
if ( !isset($loggedInUser) || !isset($db) || !isset($db_table_prefix) )
{
throw new Exception "Objects and/or globals not initialized.";
}
$sql = "SELECT user_id,
.....
如果出现问题,这将终止您的脚本。由于缺少其余代码,几乎无法确定问题所在的位置。
到第二个Q:这似乎不是正确的代码,因为没有带索引的数组引用'status'
答案 1 :(得分:0)
就像Axel在他的回答中提到的那样,$ loggedInUser绝对是个问题。 我不同意Axel的解决方案。
由于该方法的目标是检查用户是否登录,因此根据用户是否登录,它应该返回TRUE为FALSE。 如果用户未登录,则不会设置$ loggedInUser,在这种情况下您应该返回false。
function isUserLoggedIn()
{
global $loggedInUser,$db,$db_table_prefix;
if (!is_object($loggedInUser)) {
return false;
}
...
}
答案 2 :(得分:0)
注意:尝试在...中获取非对象的属性
在使用前检查全局变量initizlization:
function isUserLoggedIn()
{
global $loggedInUser,$db,$db_table_prefix;
if (!isset(
$db,
$db_table_prefix,
$loggedInUser->user_id,
$loggedInUser->hash_pw
)) {
// Handle non-initizlized variables case
}
$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";
}
<强> FYI 强>
以这种方式使用sql-queries连接可能很危险:
$sql = "SELECT user_id,
password
FROM ".$db_table_prefix."users <--- POSSIBLE SQL-INJECTION
....
在连接之前清理$db_table_prefix
。
注意:未定义的索引:状态在...
Tis notice告诉我使用了未定义的索引为status
的数组元素。不幸的是,您的第二个代码示例无法确定那里到底发生了什么。
在使用前检查数组元素初始化:
if (!isset($array['status']) {
// Handle non-initialized array element case
}