我试图获取当前用户的用户ID,以便我可以将其放在会话中供其他用途。我测试了查询并返回了正确的值,但是当我尝试将这些值放入我的" user"对象我得到以下错误!
Undefined property: stdClass::$name in C:\xampp\htdocs\Project\classes\User.class.php on line 88
LINE 88是:
$this->Name = $obj->name;
<?php
include_once("classes/Db.class.php");
class User
{
private $m_sName;
private $m_sPassword;
private $m_sEmail;
private $m_sID;
public function __get($p_sProperty)
{
switch($p_sProperty)
{
case "Name":
return $this->m_sName;
break;
case "Password":
return $this->m_sPassword;
break;
case "Email":
return $this->m_sEmail;
break;
case "user_id":
return $this->m_sID;
default:
throw new Exception("CANNOT GET " . $p_sProperty);
}
}
public function __set($p_sProperty, $p_vValue)
{
switch($p_sProperty)
{
case "Name":
$this->m_sName = mysql_real_escape_string($p_vValue);
break;
case "Password":
$salt = "kjfiqjifmqjfemq";
$this->m_sPassword = md5($p_vValue.$salt);
break;
case "Email":
$this->m_sEmail = mysql_real_escape_string($p_vValue);
break;
case "user_id":
$this->m_sID = $p_vValue;
break;
default:
throw new Exception("CANNOT SET " . $p_sProperty);
}
}
public function Register()
{
try
{
$db = new db('localhost', 'root', '', 'project');
$db->insert("user_tbl (username, password, email)", "'$this->Name','$this->Password', '$this->Email'");
}
catch(Exception $e)
{
echo $e->Message;
}
}
public function CanLogin()
{
$db = new db('localhost', 'root', '', 'project');
$res = $db->Select("username, ID" , "user_tbl","password = '$this->Password' and email = '$this->Email'");
if($res->num_rows == 1)
{
$obj = $res->fetch_object();
$this->Name = $obj->name;
$this->ID = $obj->ID;
return true;
}else
{
throw new Exception('Fout bij het aanmelden.');
return false;
}
}
}
?>
答案 0 :(得分:1)
更改此行
$this->Name = $obj->name;
的
$this->Name = $obj->username;
答案 1 :(得分:0)
在上面的评论中与@MichaelBerkowski完全一致。您正在尝试引用未加载的字段。
将代码更改为$this->Name = $obj->username;
或为查询添加“名称”
$res = $db->Select("username, ID, name" , "user_tbl","password = '$this->Password' and email = '$this->Email'");
至于ID
您正在引用错误的变量名称。在您的setter / getter中,属性名称为case "user_id":
,但您尝试通过$this->ID
引用它。
您需要将案例选项更改为case "ID":
才能生效。