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