2015-09-05 129 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. 
    }