类User的对象无法转换为字符串

Dar*_*ren 2 php mysql

我目前正在研究一个论坛软件.

我有一个名为User的类,在该类中我有一个名为GetUserGroup的方法来确定用户所在的组.

我正在运行查询并以与我所有其他查询相同的方式关联,我不确定我做错了什么,我查看了查询语法错误但只是看不到任何问题.

可捕获的致命错误:类的对象无法在第22行的C:\ xampp\htdocs\forums\index.php中转换为字符串

这是整个页面:

<?php 
include_once('connect.php');
session_start();

if (isset($_SESSION['username'])) {
    $username = $_SESSION['username'];

}

class User {

    public $usergroup;
    public $user;

    function __construct() {
        if (isset($_SESSION['username'])) {
            $this->user = $_SESSION['username'];
        }
    }

    public function GetUserGroup() {
        $find_group = "SELECT group FROM users WHERE username='$this->user'";
        $run_find_group = mysql_query($find_group);
        $find_group_assoc = mysql_fetch_assoc($run_find_group);
        $this->usergroup = $find_group_assoc['group'];
    }
}

class Forum {

    function __construct() {

    }

    public function DisplayForums() {

        $find = "SELECT id,name,description FROM forums";
        $run_find = mysql_query($find);

        while ($is = mysql_fetch_assoc($run_find)) {
            $forum_id = $is['id'];
            $forum_name = $is['name'];
            $forum_description = $is['description'];

            echo "<div  style='background:#FF6699;width:1000px;'>";
            echo "Forum: <a href='topics.php?t='$forum_id'>".$forum_name."</a><br/>".$forum_description."<br/><hr>";
            echo "</div>";
        }
    }
}

$forum = new Forum();
if (isset($_SESSION['username'])) {
    $_SESSION['username'] = new User();
    $_SESSION['username']->GetUserGroup();
}
?>
<html>
<head>
    <title>Home</title>
</head>
<body>
<?php 
if (isset($_SESSION['username'])) {
    echo "Welcome, " . $username . "!";
    if ($_SESSION['username']->usergroup==admin) {
        echo "<span align='right'><a href='/admin/index.php'>Admin CP</a></span>";
    }
    $forum->DisplayForums(); 
} else {
    $forum->DisplayForums(); 
    echo "
    <form action='login.php' method='post'>
    <table>
        <tr>
            <td>Username: </td>
            <td><input type='text' name='username' /></td>
        </tr>
        <tr>
            <td>Password: </td>
            <td><input type='text' name='password' /></td>
        </tr>
        <tr>
            <td><input type='submit' name='login_submit' value='Login' /></td>
        </tr>
    </table>
    </form>";
}
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Roc*_*mat 5

你的问题在这里:

$_SESSION['username'] = new User();
Run Code Online (Sandbox Code Playgroud)

你正在为一个User对象分配一个$_SESSION['username'].因此,当$_SESSION['username']->GetUserGroup()被调用时$this->user是User对象.

您需要设置$_SESSION['username']用户名,而不是对象.或者创建一个从对象中获取用户名的方法.你应该添加一个getUsername方法或东西User.

public function GetUserGroup() {
    $user = $this->user->getUsername();
    $find_group = "SELECT group FROM users WHERE username='$user'";
    $run_find_group = mysql_query($find_group);
    $find_group_assoc = mysql_fetch_assoc($run_find_group);
    $this->usergroup = $find_group_assoc['group'];
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用PHP的__toString方法.

function __toString(){
  return $this->getUsername();
}
Run Code Online (Sandbox Code Playgroud)

如果你使用__toString,那么:

$find_group = "SELECT group FROM users WHERE username='$this->user'";
Run Code Online (Sandbox Code Playgroud)

将工作.