2017-04-15 6 views
0

私は物事をどのようにしているかについて多くのコメントを得るでしょう。私はこれをパートタイムで行い、MVCを使って新しいシステムを開発しようとしています。私の現在の問題は次のとおりです。フォーム(ビュー)をロードすると、コントローラがモデルファイルを呼び出し、ビューの新しいモデルを即座にインスタンス化し、MySQLデータベースから古いフォーム値を取得します。ビューには一連のドロップダウンがあります。ビューの名前と同じ名前のモデルのプライベート変数にdbから値をロードしますが、値はビューに渡されないので、ドロップダウンはすべてデフォルト値を示しています - 値を表示する必要がありますdbに格納されます。以下のコードが、ちょうど関連するスニペット:PHP:モデルから選択された値を取得しないでください

<?php 
require_once("../controller/db_conn_ctlr.php"); 

class dom_leader_model { 
    // Variables 
    private $ldr1_rec; // leader 1 record 
    private $ldr1_role; // leader 1 role 
    private $ldr2_rec; // leader 2 record 
    private $ldr2_role; // leader 2 role 
    private $ldr3_rec; // leader 3 record 
    private $ldr3_role; // leader 3 role 
    private $ldr4_rec; // leader 3 record 
    private $ldr4_role; // leader 3 role  
    private $trail_no; // TRAIL # of plan 

    // constructor 
    public function __construct() { 
     $trail_no = $this->getTrailNumber(); 
     $this->getOldLeaderInfo($trail_no); 
    } 

    // get TRAIL number 
    public function getTrailNumber() { 
     return $this->trail_no = $_SESSION['trail_no']; 
    } 

    // get leader info from database and put it on the form 
    public function getOldLeaderInfo($trail_no) { 

     $fiscal_yr = substr($trail_no, 0, 2); 
     $trip_id = substr ($trail_no, 2, 3); 
     $section_id = substr($trail_no, 5, 1); 

     $query20 = " 
      SELECT * FROM leader_info 
      WHERE fiscal_yr = '$fiscal_yr' AND trip_id = '$trip_id' 
       AND section_id = '$section_id'"; 

     $connect = db_connection();  
     $result20 = mysqli_query($connect, $query20) or die("Query20 failed: 
      " . mysqli_error($connect)); 
     $connect->close(); 

     if($result20) { 
      $row = $result20->fetch_array(MYSQLI_ASSOC); 
      $this->ldr1_rec = $row['leader1_record'];   
      $this->ldr1_role = $row['leader1_role']; 
      $this->ldr2_rec = $row['leader2_record']; 
      $this->ldr2_role = $row['leader2_role']; 
      $this->ldr3_rec = $row['leader3_record']; 
      $this->ldr3_role = $row['leader3_role']; 
      $this->ldr4_rec = $row['leader4_record']; 
      $this->ldr4_role = $row['leader4_role'];    
      return 1; 
     } else { 
      return 0; 
     }   
    } 

[from controller] 
<?php 
require_once '../model/dom_leader_model.php'; 
require_once '../utilities/check_info_saved.php'; 
$session_start = session_start(); 

$leaderInfoModel = new dom_leader_model(); 
$trail_no = $leaderInfoModel->getTrailNumber(); 


if (isset($_POST['save']) || isset($_POST['next'])) { 

[from view] 
<p>Leader 1 Information:</p> 
<?php 
    if (empty($ldr1_rec)) { 
     $ldr1_switch = 'Select Leader'; 
     echo '<select name="ldr1_rec"><option selected 
      value="">',$ldr1_switch,'</option>', 
      require("../../lists/leader_list.txt"),'</select>'; 
    } else { 
     $ldr1_switch = leader_switch($ldr1_rec, 'dom');   
     echo '<select name="ldr1_rec"><option selected 
      value="',$ldr1_rec,'">',$ldr1_switch,'</option>', 
      require("../../lists/leader_list.txt"),'</select>'; 
    } 

    if (empty($ldr1_role)) { 
     $role1 = "Select Role"; 
     echo '<select name="ldr1_role"><option selected 
      value="">',$role1,'</option>', 
      require("../../lists/staff_role_list.txt"),'</select>'; 
    } else {  
     $role1 = role_switch($ldr1_role); 
     echo '<select name="ldr1_role"><option selected 
      value="',$ldr1_role,'">',$role1,'</option>', 
      require("../../lists/staff_role_list.txt"), '</select>&nbsp;'; 
    } 
?><p><hr> 

私はこのパートタイムを行うと、私は確信してあなたの多くは、コードを書くのより良い方法が表示されますけど、私が本当に探していますがあり、言ったようになぜ私の値がデータベースから取り出されても、ロード時にフォームに到達していないという理由で答えてください。

ありがとうございます。 <option value="',$ldr1_role,'" selected="selected">',$role1,'</option>

selectがブラウザに正しいですが、時々(これはPHPで私にのカップルが起こっ拒否されることがあります:あなたはselected="selected"だけではなくselect すなわちを使用する必要があります

ジョンC.

+0

すべてのコードをフェッチしませんでしたが、単に 'select' - >' '? – OldPadawan

+0

私の間違い - > '選択された*だけではなく '選択' 'を選択 – OldPadawan

答えて

0

数週間前に、他の人のコードを助けたり働いたりしていました。

selected="selected"はすべてのdoctypes AFAIKにも有効です。

+0

ありがとうございます。問題の一部がモデル内にあるので、ビューに表示させたい値はプライベートであると宣言されているため、それらをパブリックとして宣言したり、各値に対してパブリックgetメソッドを作成する必要があります。ジョンC. – user1417971

関連する問題