我目前正在研究论坛软件。
我有一个名为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>
答案 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}'";