2015-09-05 29 views
1

你好我是codeigniter框架的初學者,我需要一些幫助。 我有一個表格(在表格組織中)需要填充各種數據。一個場(第一行,第二列)需要與下拉MENY(與來自數據庫表中的數據)(選擇選項菜單中)來填充,我設法到,codeigniter填充從視圖下拉菜單 - 從視圖觸發方法

form table

但是,這是我做了什麼做到這一點:

當鏈接用戶點擊(T - 插入Labwork)

link

實際上他所說的控制器的方法(my_courses())和方法:

1 - 從會話獲取用戶名

2 - 加載模型。

3 - 然後,他通過用戶名所加載的模型

4 - 如果模型返回false比我們會返回消息給用戶

5 - 否則,如果模型返回true,那麼我們會返回結果

CONTROLLERS方法是這樣的:

function my_courses(){ 

$username = $this->session->userdata('username'); //1 username from session 

$this->load->model('model_professor'); //2 we load a model,whose task is to load professors courses from table 

$result =$this->model_professor->professors_classes($username); //3 so we send username to that model 

if($result == false){ 
    echo "Professor has no courses "; 
}else{ //4 model will return results collected from table 
    $query = $this->model_professor->professors_classes($username); 
    $data['main_content'] = 'professor/t_professor_insert_labwork_2'; 
    $data['another_content'] = 'professor/professor_view_links'; 
    $data['records'] = $query; 
    $this->load->view('includes/template',$data); 
    }  
} 

模型的方法是這樣的:

function professors_classes($username){ 

    $this->db->where("username", $username); 

    $query = $this->db->get("table_teach_a_course"); 

    if($query->result()){ 
     return $query->result(); 
    }else{ 
     return false; 
    }   
} 

最後我的看法(較短的版本,而不從圖像中的所有行)t_professor_insert_labwork_2看起來是這樣的:

<?php 
    echo form_open("controller_professor/insert_labwork"); 
?> 
<table> 
    <tr> 
     <td>Course name:</td> 
     <td> 
      <?php if(isset($records)) { ?> 
         <select> 
          <?php foreach ($records as $row){ ?> 
           <option value=""> <?php echo $row->course_code; ?> </option> 
          <?php } ?> 
         </select> 
        <?php 
        }else { 
         echo"<h6>No records were returned!</h6>"; 
        } ?> 
     </td> 
    </tr> 


    <tr> <td colspan="2"> <hr/> </td></tr> 

    <tr> 
     <td><input type="reset" value="Clear form"></td> 
     <td></td> 
     <td><input type="submit" value="Save"></td> 
    </tr> 
</table> 
<?php 
    echo form_close(); 
?> 
    <?php 
     echo validation_errors('<p style="color:red"></p>'); 
    ?> 

但是,當我點擊鏈接,例如(主頁) enter image description here

他也加載了這個視圖和其他一些視圖,當他加載我的t_professor_insert_labwork_2視圖時,就會出現問題。

這是主頁鏈接呼叫:

$this->load->view('professor/t_professor_insert_labwork_2'); 

但是,這只是加載誰是空的,並且不能填充下拉菜單的觀點,我明白爲什麼,因爲沒有什麼觸發我的方法填充該菜單。但是這對我來說很麻煩,我只是不知道如何從我的視圖中觸發一些將數據返回給該字段的方法。

而我的問題是,我怎樣才能調用我的視圖,這會自動觸發一些方法誰將返回數據來填充這個下拉字段?

感謝大家願意幫助我!

+0

db是否實際返回查詢結果?如果沒有,我建議你要麼爲你的模型添加一個回退方法,即如果($ query-> num_rows()!> 0){//得到其他結果}。或者替代地填充您的視圖,其中顯示的數組爲空的默認選項。 – kurt

+0

不,我真的用db的實際數據填充我的下拉菜單,所以這不是問題,因爲我的方法在這個意義上工作正常。唯一的問題是,目前我需要激發我的方法,我需要點擊鏈接將數據返回到我的視圖。但我想自動完成,而不是像我已經描述的那樣。只是不知道如何從視圖 – useruser

+0

自動調用你不從視圖中調用它,然後從控制器默認或索引方法調用它。即public function index(){$ query = $ this-> model_professor-> professors_classes($ username); $ data ['main_content'] ='professor/t_professor_insert_labwork_2'; $ data ['another_content'] ='professor/professor_view_links'; $ data ['records'] = $ query; $ this-> load-> view('includes/template',$ data); }。只是圖片你想先顯示的結果並將其傳遞給你的模型 – kurt

回答

0

您需要修改您的控制器DEFAULT方法(當您訪問www.mysite時調用的方法。com/mycontroller),這通常會以您的控制器或調用索引命名,我將使用您提供的代碼給出示例,假定此方法是您的默認方法。看這個代碼有兩種可能的情況。

案例1 - 您在初始加載時沒有用戶名會話變量。

function my_courses(){ 
 
    
 
$this->load->model('model_professor'); //2 we load a model,whose task is to load professors courses from table 
 

 
//set a default for username 
 
$username = 'mydefaultusername'; 
 
//check if a username has been provided and update $username variable 
 
if(isset($this->session->userdata('username')) && !empty($this->session->userdata('username'))){ 
 
    $username = $this->session->userdata('username'); //1 username from session 
 
} 
 

 
$result =$this->model_professor->professors_classes($username); //3 so we send username to that model 
 
    
 
if($result == false){ 
 
    echo "Professor has no courses "; 
 
}else{ //4 model will return results collected from table 
 
    $query = $this->model_professor->professors_classes($username); 
 
    $data['main_content'] = 'professor/t_professor_insert_labwork_2'; 
 
    $data['another_content'] = 'professor/professor_view_links'; 
 
    $data['records'] = $query; 
 
    $this->load->view('includes/template',$data); 
 
    }  
 
}

CASE 2 - 你有一個用戶名會話變量,但想,如果有沒有默認結果集。

function my_courses(){ 
 

 
$username = $this->session->userdata('username'); //1 username from session 
 

 
$this->load->model('model_professor'); //2 we load a model,whose task is to load professors courses from table 
 

 
$result = $this->model_professor->professors_classes($username); //3 so we send username to that model 
 

 
//check if you need to set a default 
 
if(count($result) !> 0){ 
 
    $result = //your method to get your default results. 
 
} 
 
if($result == false){ 
 
    echo "Professor has no courses "; 
 
}else{ //4 model will return results collected from table 
 
    $query = $this->model_professor->professors_classes($username); 
 
    $data['main_content'] = 'professor/t_professor_insert_labwork_2'; 
 
    $data['another_content'] = 'professor/professor_view_links'; 
 
    $data['records'] = $query; 
 
    $this->load->view('includes/template',$data); 
 
    }  
 
}

在第二種情況下,你將不得不設置在控制器的初始負載的會話或其他變量,以確保你不返回默認結果時,你應該返回「沒有找到「即

//check if you need to set a default 
    if(count($result) !> 0 && !isset($_SESSION['init']) or $_SESSION['init'] == FALSE){ 
     $_SESSION['init'] = 1; 
     $result = //your method to get your default results. 
    }