2016-08-23 7 views
-3

PHP Object Orientedを使用してカスタムCMSを作成しています。管理者がサイトの現在の管理者のリストを参照できるセクションを作成しました。あなたが機能GetAdminsが引数を取ることができると私はCURRENT USERのセッション変数にこの引数を設定しているようにPHP OOPクエリはデータベースから1行だけを取得します

<?php 
class Admins 
{ 
    public $db,$id,$user,$pass,$group,$joined,$message,$firstname,$lastname,$login,$logout,$level,$email1,$email2,$avatar,$status; 
    public function __construct() 
    { 
     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
    } 
    public function GetAdmins($name) 
    { 
     if(!empty($name)) 
     { 
      $adms = $this->db->prepare("select * from admins where user_name != ?"); 
      $adms->bindParam(1,$name); 
      $adms->execute(); 
      while($row = $adms->fetch()) 
      { 
       $this->id   = $row['id']; 
       $this->user   = $row['user_name']; 
       $this->pass   = $row['password_hash']; 
       $this->group  = $row['group_admin']; 
       $this->joined  = $row['date_joined']; 
       $this->message  = $row['welcome_message']; 
       $this->firstname = $row['first_name']; 
       $this->lastname  = $row['last_name']; 
       $this->login  = $row['login_time']; 
       $this->logout  = $row['logout_time']; 
       $this->level  = $row['admin_level']; 
       $this->email1  = $row['email_address']; 
       $this->email2  = $row['secondary_email']; 
       $this->avatar  = $row['profile_picture']; 
       $this->status  = $row['activation_status']; 
      } 
     } 
     else 
     { 
      header("Location: php/includes/errors/004.php"); 
      exit(); 
     } 
    } 
    public function GetId() 
    { 
     return $this->id; 
    } 
    public function GetUsername() 
    { 
     return $this->user; 
    } 
    public function GetPassword() 
    { 
     return $this->pass; 
    } 
    public function GetGroup() 
    { 
     return $this->group; 
    } 
    public function GetJoined() 
    { 
     return $this->joined; 
    } 
    public function GetMessage() 
    { 
     return $this->message; 
    } 
    public function GetFirstname() 
    { 
     return $this->firstname; 
    } 
    public function GetLastname() 
    { 
     return $this->lastname; 
    } 
    public function GetLogin() 
    { 
     return $this->login; 
    } 
    public function GetLogout() 
    { 
     return $this->logout; 
    } 
    public function GetLevel() 
    { 
     return $this->level; 
    } 
    public function GetEmail1() 
    { 
     return $this->email1; 
    } 
    public function GetEmail2() 
    { 
     return $this->email2; 
    } 
    public function GetAvatar() 
    { 
     return $this->avatar; 
    } 
    public function GetStatus() 
    { 
     return $this->status; 
    } 
} 
?> 

:だから私はAdmins.class.phpと呼ばれ、このクラスでは、私はこれを書いているクラスを作りました。それから私はこの方法で、このクラスと呼ばれる:

$adminSet = new Admins(); 
$adminSet->GetAdmins($_SESSION["admin_username"]); 

USER_NAMEフィールドは、私がパラメータとして渡さadmin_usernameのセッション変数に等しくない場合ので、それは管理者のテーブルから選択する必要があります。

そしてadmins.phpページに私がこれを書いた:

<div class="box-body table-responsive no-padding"> 
    <table class="table table-hover"> 
     <tr> 
      <th>ID</th> 
      <th>User Name</th> 
      <th>Email Address</th> 
      <th>Date Joined</th> 
      <th>Last Login</th> 
      <th>Last Logout</th> 
      <th>Group Admin</th> 
      <th></th> 
     </tr> 
     <tr> 
      <td><?php echo $table_id++ ?></td> 
      <td><a href="#"><?php echo $adminSet->GetUsername(); ?></a></td> 
      <td><a href="mailto:<?php echo $adminSet->GetEmail1(); ?>" target="_top"><?php echo $dataSet->GetEmail1(); ?></td> 
      <td><?php echo $adminSet->GetJoined(); ?></td> 
      <td><?php echo $adminSet->GetLogin(); ?></td> 
      <td><?php echo $adminSet->GetLogout(); ?></td> 
      <td><?php echo $adminSet->GetGroup(); ?></td> 
      <td><a href="#"><span class="label label-danger">REMOVE</span></a></td> 
     </tr> 
    </table> 
</div> 

しかし、問題は、それがうまくいかないということです!実際にはadminsテーブルの最後の行しか取得せず、現在の管理者に表示します。それは私が望んでいないことです。だから何がうまくいかず、現在のユーザーに属するフィールド以外のテーブルのすべての行を取得するためにはどうすればよいですか。何かお考えですか?ここで

は、テーブルの印刷画面です:

print screen one

そして、ここでHTMLテーブルの印刷画面です:あなたは変数に値をオーバーライドしているためだ

print screen two

+1

クラスメンバの値をループごとに上書きします。返される各値を格納する場合は、配列を使用する必要があります。 –

+1

それでは、どうすればいいのか教えてください。 – Pouya

+0

@JohnCondeが正しいと本当に感謝しています。あなたのデータを上書きするのではなく配列を使用する\ –

答えて

0

。だからあなたはデータの最後の行だけを取得します。

複数の行を返すには、arrayを使用する必要があります。

これを行うには、データベース(DAOクラス)からデータを取得するためだけの別のクラスを作成し、whileループではgetterメソッドとsetterメソッドを持つAdminsオブジェクトの配列を作成します。

関連する問題