0

現在のユーザーのユーザー ID を取得して、他の用途のためにセッションに入れることができるようにしようとしています。クエリをテストしたところ、正しい値が返されましたが、これらの値を「ユーザー」オブジェクトに入れようとすると、次のエラーが発生しました!

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;
        }

    }

}   

?>
4

2 に答える 2

1

この行を変更

$this->Name = $obj->name;

為に

$this->Name = $obj->username;
于 2013-05-15T12:54:39.343 に答える
0

上記のコメントで@MichaelBerkowskiに完全に同意します。ロードしていないフィールドを参照しようとしています。

コードを変更するか$this->Name = $obj->username;、クエリに「名前」を追加してください

$res = $db->Select("username, ID, name" , "user_tbl","password = '$this->Password' and email = '$this->Email'");

IDに関しては

間違った変数名を参照しています。セッター/ゲッターでは、プロパティ名はcase "user_id":ですが、 経由で参照しようとしています$this->ID。これを機能させるには、ケース オプションを に変更する必要がありますcase "ID":

于 2013-05-15T12:58:14.283 に答える