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

时间:2011-12-30 17:55:13

标签: 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>

3 个答案:

答案 0 :(得分:5)

你的问题在这里:

$_SESSION['username'] = new User();

您正在为User分配$_SESSION['username']个对象。因此,调用$_SESSION['username']->GetUserGroup()$this->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'];
}

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

function __toString(){
  return $this->getUsername();
}

如果您使用__toString,则:

$find_group = "SELECT group FROM users WHERE username='$this->user'";

会奏效。

答案 1 :(得分:1)

安全问题和缺乏凝聚力:您在样本中分配new User()$_SESSION['username'],这就是$this->user

您似乎正在使用$_SESSION['username']用户名字符串和User对象。可以只存储其中一个,也可以单独存储(例如$_SESSION['username']$_SESSION['user'])。

答案 2 :(得分:1)

更改此行:

$find_group = "SELECT group FROM users WHERE username='{$this->user}'";