2011-12-30 10 views
0

現在フォーラムソフトウェアで作業しています。クラスのオブジェクトユーザーを文字列に変換できませんでした

私は、そのクラスの中に、私はユーザーが何であるかのグループを決定するためにGetUserGroupというメソッドを持って、ユーザーと呼ばれるクラスを持っている。

私は、クエリとASSOC私はすべてを行ってきたのと同じ方法を実行しています私の他のクエリ、私は間違って何をやっているのか分からない、私は構文エラーのためのクエリを見てきましたが、ちょうど何も表示されません。

キャッチできる致命的なエラー:クラスユーザーのオブジェクトは、Cの文字列に変換することができませんでした:\ xamppの\ htdocsに\フォーラム\ライン上で22

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

ここでの問題のようです何を、役員? –

+0

提供したスニペットにエラーがありません。私は完全なエラー出力があなたに問題が発生する行番号を教えてくれると思う。完全なエラーメッセージとソースコードを投稿してください。 – rdlowrey

+0

サイドノート - これまでの検証をしていない場合、SQLクエリはSQLインジェクション攻撃に対応しています。http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php – keyboardP

答えて

4

あなたの問題はここにある:あなたが$_SESSION['username']Userオブジェクトを代入している

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

。したがって、$_SESSION['username']->GetUserGroup()が呼び出されたとき、$this->userは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に$ usernameを設定した後、 '$ _SESSION ['username'] =新しいUser();'を '$ username = new User();'に変更する必要がありますか? – Darren

+0

@Darren:問題は '$ _SESSION ['username']'は文字列ではなく 'User'オブジェクトです。 '$ this-> user = $ _SESSION ['username'];' $ this-> user'を文字列ではなくオブジェクトに設定しています。 '$ _SESSION ['username'] = new User();'を実行すると、文字列ではないことを知ることができます。 '$ this-> user = $ _SESSION ['username'] - > getUsername()'や '__toString()'メソッドを使う必要があります。 –

+0

どうすれば修正できますか?どのように$ this-> userを文字列に変換するのでしょうか? – Darren

1

セキュリティ上の問題と結び付きの欠如:サンプル内にnew User()$_SESSION['username']に割り当てています。つまり、$this->userです。

ユーザー名文字列とUserオブジェクトの両方に$_SESSION['username']が使用されているようです。 1つだけを保存するか、別々に保存してください(例:$_SESSION['username']$_SESSION['user'])。

1

変更この行:

$find_group = "SELECT group FROM users WHERE username='{$this->user}'"; 
関連する問題