2017-04-15 1 views
0

나는 내가 어떻게하고 있는지에 대해 많은 의견을 말할 것이다. 저는 파트 타임으로 MVC를 사용하여 새로운 시스템을 개발하려고합니다. 현재의 문제점은 다음과 같습니다. 폼 (뷰)을로드하면 컨트롤러가 내 모델 파일을 호출하여 뷰의 새 모델을 즉시 인스턴스화하고 MySQL db에서 이전 폼 값을 검색합니다. 보기에는 일련의 드롭 다운이 있습니다. 뷰에서와 같은 이름을 가진 모델 전용 변수에 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> 

내가 말했듯이, 나는이 파트 타임을하고 나는 코드를 작성하는 더 나은 방법을 볼 수 있습니다 당신의 많은 분들,하지만 내가 정말 찾고 있어요 것은입니다 왜 데이터베이스에서 검색 한 값이로드 될 때 양식에 도달하지 않는지에 대한 대답.

미리 감사드립니다.

존 C.

당신은 selected="selected" 대신 사용해야합니다
+0

모든 코드를 가져 오지는 않았지만 'select'->''? – OldPadawan

+0

내 실수 ->''선택 ''대신에 ''선택 ''을 선택하십시오. – OldPadawan

답변

0

단지 select 예 : 브라우저에 대한 올바른 <option value="',$ldr1_role,'" selected="selected">',$role1,'</option>

select 있지만, 때때로 (이 부부의 PHP와 함께 나에게 무슨 일이 있었 거부 될 수 있습니다 몇 주 전, 다른 사람의 코드를 돕거나 작업).

selected="selected"도 모든 유형의 AFAIK에 유효합니다.

+0

고마워요.하지만 그렇지 않습니다. 문제의 일부가 모델에 있는데,보기에 표시 할 값이 비공개로 선언되므로 public으로 선언하거나 각 값에 대해 public get 메소드를 작성해야합니다. 존 C. – user1417971

관련 문제