Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类用户的对象无法转换为字符串_Php_Mysql - Fatal编程技术网

Php 类用户的对象无法转换为字符串

Php 类用户的对象无法转换为字符串,php,mysql,Php,Mysql,我目前正在开发一个论坛软件 我有一个名为User的类,在该类中我有一个名为GetUserGroup的方法来确定用户所在的组 我运行查询和assoc的方式与我处理所有其他查询的方式相同,我不确定我做错了什么,我查看了查询中的语法错误,但没有看到任何错误 可捕获的致命错误:类用户的对象无法转换为第22行C:\xampp\htdocs\forums\index.php中的字符串 以下是整页: <?php include_once('connect.php'); session_start();

我目前正在开发一个论坛软件

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

我运行查询和assoc的方式与我处理所有其他查询的方式相同,我不确定我做错了什么,我查看了查询中的语法错误,但没有看到任何错误

可捕获的致命错误:类用户的对象无法转换为第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>
您的问题在于:

$_SESSION['username'] = new User();
您正在将
用户
对象分配给
$\u会话['username']
。因此,当调用
$\u会话['username']->GetUserGroup()
时,
$this->user
是一个用户对象

您需要将
$\u SESSION['username']
设置为用户名,而不是对象。或者创建一个从对象获取用户名的方法。您应该向
User
添加
getUsername
方法或其他内容

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的方法

如果您使用
\uuuu toString
,则:

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

将起作用。

安全问题和缺乏内聚性放在一边:您正在为示例中的
$\u会话['username']
分配一个
新用户()
,因此这就是
$this->User
的含义

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

更改此行:

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

这里有什么问题,警官?错误不在你提供的代码片段中。我怀疑完整的错误输出会告诉您问题发生的行号。请发布完整的错误消息和源代码。我收到错误“类用户的对象无法转换为字符串”。在$find_group=“SELECT group FROM username='$this->user'”行中;我也知道它很脆弱,我刚开始做这个,还没来得及添加保护。显然,$this->user是一个对象。var_转储它以进行验证。另一种方法是,使用调试器逐步执行代码,以找出错误所在。如果您希望$this->user成为一个对象,请添加一个u-toString方法,告诉它如何在字符串上下文中运行。@Darren软件安全性不是开发的“阶段”。因此我应该更改
$\u会话['username']=new user()
$username=new User()
,将$username设置为$\u会话后?@Darren:问题是
$\u会话['username']
是一个
用户
对象,而不是字符串。因此,当您执行
$this->user=$\u会话['username']时
您正在将
$this->user
设置为对象,而不是字符串。您可以执行
$\u会话['username']=new User(),只需确保您知道它不是字符串。您需要执行类似于
$this->user=$\u SESSION['username']->getUsername()
的操作,或者使用
\u toString()
方法。我该如何解决这个问题?比如如何将$this->user转换为字符串?我不知道应该在getUsername()方法中输入什么。你能告诉我正确的方向吗?@Darren:在
getUsername
中,你应该找到一种获取用户用户名的方法。你有一个
User
对象,你怎么知道它是什么用户?
$find_group = "SELECT group FROM users WHERE username='{$this->user}'";