2016-05-05 8 views
1

オブジェクトを繰り返し処理し、その内容を表示するためのより良い方法を探しています。
FormController:Objectプロパティを表示するための反復の改善PHP

 public function run(){ 

     $tabteachers=''; 

     if(!empty($_SESSION['apply']) && !empty($_SESSION['application'])){ 

      $tabteachers = DB::getInstance()->select_teacher_id($_SESSION['login']); 
     } 
     require_once(VIEW_PATH.'formdeux.php'); 
    }

Db.class機能():

public function select_teacher_id($login){ 
     $query = 'SELECT * FROM teachers,internships,students WHERE teachers.email_teacher = internships.email_responsible_internship AND students.registry_number_student = internships.registry_student_internship AND internships.registry_student_internship = '. $this->_db->quote ($login); 
     $result = $this->_db->query ($query); 
     if ($result->rowcount() != 0) { 
      while ($row = $result->fetch()) { 
       $teacher[]= new teacher ($row->email_teacher,$row->firstname_teacher,$row->lastname_teacher,$row->responsible_internship_teacher,NULL); 
      } 
      return $teacher; 
     } 
    }

フォームビュー:

<table> 
     <thead> 
      <tr> 
       <th width="20%" class="decoration">contact</th> 
      </tr> 
     </thead> 
      <tbody> 
      <?php foreach ($tabteachers as $teacher) { ?> 
       <tr> 
        <td>Lastname: <td> 
        <input type="text" name="lastnamepro" value="<?php echo $teacher->lastname_teacher() ?>" size="100px"> 
       </tr> 
       <tr> 
        <td>Firstname: <td> 
        <input type="text" name="firstnamepro" value="<?php echo $teacher->firstname_teacher() ?>" size="100px"> 
       </tr> 
       <tr> 
        <td>Email address: <td> 
        <input type="text" name="emailpro" value="<?php echo $teacher->email_teacher() ?>" size="100px"> 
       </tr> 
       <tr> 
        <td>Service: <td> 
        <input type="text" name="servicepro" value="null" size="100px"> 
       </tr> 
       <tr> 
        <td>mobile number: <td> 
        <input type="text" name="phonenumberpro" value="aucun numero" size="100px"> 
       </tr> 
      <?php } ?> 
      </tbody> 
    </table><br> 

DB接続:

private static $instance = null; 
    private $_db; 

    private function __construct() { 

     try { 
      $this->_db = new PDO ('mysql:host=localhost;dbname=ProjectWeb;charset=utf8', 'root', ''); 
      $this->_db->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $this->_db->setAttribute (PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 

     } catch (PDOException $e) { 
      die ('Erreur de connexion à la base de donnée : ' . $e->getMessage()); 
     } 
    } 

    // Pattern Singleton 
    public static function getInstance() { 
     if (is_null (self::$instance)) { 
      self::$instance = new Db(); 
     } 
     return self::$instance; 
    }

ご協力いただきありがとうございます。私はあなたが私はあなたではなくPDOのはfetchAllメソッドを使用して配列として結果セット全体を取得し、それにもかかわらず繰り返すことができると思いますけれども、デフォルトは、この特定のケースでは、FETCH_OBJにフェッチモードを設定している参照

+0

誰でも手伝ってもらえますか? –

+0

現在の設定で何が問題になっていますか?何か間違いに直面していますか?またはあなたはそれを最適化したいですか? – Vincent

+0

@Vincent **警告:無効な引数がforeach()に供給されています**これは私が実装したforeachからのものです。 –

答えて

1

public function select_teacher_id($login){ 
    $query = 'SELECT * FROM teachers,internships,students WHERE 
    teachers.email_teacher = internships.email_responsible_internship 
    AND students.registry_number_student = internships.registry_student_internship 
    AND internships.registry_student_internship = '. $this->_db->quote ($login); 


    $result = $this->_db->query ($query); 
     if ($result->rowcount() != 0) { 
     //fetch the entire result set as a multi-dimensional assoc array 
     $teachers_result = $result->fetchAll(PDO::FETCH_ASSOC); 
     return $teachers_result; 
     } 
} 

//表示

<table> 
    <thead> 
     <tr> 
      <th width="20%" class="decoration">contact</th> 
     </tr> 
    </thead> 
     <tbody> 
     <?php foreach ($tabteachers as $teacher) { ?> 
      <tr> 
       <td>Lastname: <td> 
       <input type="text" name="lastnamepro" value="<?php echo $teacher['lastname_teacher'] ?>" size="100px"> 
      </tr> 
      <tr> 
       <td>Firstname: <td> 
       <input type="text" name="firstnamepro" value="<?php echo $teacher['firstname_teacher'] ?>" size="100px"> 
      </tr> 
      <tr> 
       <td>Email address: <td> 
       <input type="text" name="emailpro" value="<?php echo $teacher['email_teacher'] ?>" size="100px"> 
      </tr> 
      <tr> 
       <td>Service: <td> 
       <input type="text" name="servicepro" value="null" size="100px"> 
      </tr> 
      <tr> 
       <td>mobile number: <td> 
       <input type="text" name="phonenumberpro" value="aucun numero" size="100px"> 
      </tr> 
     <?php } ?> 
     </tbody> 
</table><br> 
+0

var_dumpでテストすると、select_teacher_id()関数はnullを返します。何らかの理由で$ _SESSION ['login']がログインIDを保持していないことを認識しました。一方、要素を表示するあなたのやり方はとても良いです。 –

+0

このようにすることもできますし、以前のようにオブジェクトとして使用したい場合は、FETCH_ASSOCの代わりにPDO :: FETCH_OBJフラグを渡して、ビューでプロパティを呼び出すこともできます。 – Vincent

+1

私の$ _SESSION ['ログイン']が空であることを確認できます。しかし、なぜ私が$ _SESSION []に与えた価値がもう存在しないのか分かりません。私は$ _POSTテーブルを使ってユーザー名を保存しました。あなたの助けてくれてありがとう、本当に感謝しています! –

関連する問題