2011-12-30 103 views
0

我正在從事論壇軟件。類的對象用戶無法轉換爲字符串

我有一個名爲User類,這個類中我有一個名爲GetUserGroup來確定用戶是在什麼組方法。

我運行查詢和assoc命令以同樣的方式我一直在做的所有我的其他查詢,我不知道我做錯了什麼,我查看了查詢語法錯誤,但沒有看到任何。

開捕致命錯誤:類用戶的對象無法轉換爲字符串C:\ XAMPP \ htdocs中\ \論壇上的index.php線22

這裏的整個頁面:

<?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> 
+1

什麼,似乎這裏是問題,警官? – 2011-12-30 17:56:54

+0

錯誤不在您提供的代碼片段中。我懷疑完整的錯誤輸出會告訴你發生問題的行號。請發佈完整的錯誤消息和源代碼。 – rdlowrey 2011-12-30 17:57:33

+0

備註 - 如果您還沒有做過任何以前的驗證,那麼您的SQL查詢將對SQL注入攻擊開放http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php – keyboardP 2011-12-30 17:57:38

回答

4

你的問題是在這裏:

$_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'"; 

會工作。

+0

所以我應該$ _SESSION ['用戶名'] =新的用戶();'到'$用戶名=新的用戶();',有一個$用戶名設置爲$ _SESSION? – Darren 2011-12-30 18:05:27

+0

@Darren:問題是'$ _SESSION ['username']'是'用戶'對象,而不是字符串。所以,當你做'$ this-> user = $ _SESSION ['username'];'你把'$ this-> user'設置爲一個對象,而不是一個字符串。你可以做'$ _SESSION ['username'] = new User();',只要確保你知道它不是一個字符串。你需要做一些類似'$ this-> user = $ _SESSION ['username'] - > getUsername()',或者使用'__toString()'方法。 – 2011-12-30 18:09:12

+0

我該如何解決這個問題?像我將如何將$ this->用戶轉換爲字符串? – Darren 2011-12-30 18:10:49

1

安全問題和缺乏凝聚力:您正在分配new User()$_SESSION['username']您的示例中,所以這就是$this->user

看起來您對用戶名字符串和User對象都使用$_SESSION['username']。要麼只存儲其中的一個,要麼單獨存儲它們(例如,如$_SESSION['username']$_SESSION['user'])。

1

改變這一行:

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