2012-12-02 52 views
2

基本上,該代碼通過拉取用戶在表單中輸入的數據並連接到基於輸入信息執行查詢搜索的模型。Codeigniter - 具有多個參數的搜索表單

此代碼有效,但只有當我輸入$ no和$ first字段時才起作用。但我需要它的工作,所以用戶將能夠輸入$ no並將其他變量留空。

我想我可以使用某種OR語句,但我不確定如何實現它。任何幫助將不勝感激,我很抱歉,如果它不夠清楚,我談到codeigniter時是相當新的。

控制器

public function query() 

{ 

    $no = $this->input->post('no'); 
    $first = $this->input->post('first'); 
    $this->load->model("test"); 
     $data['query']=$this->test->query($no,$first); 
     $this->load->view('query',$data); 

} 

型號

function query($no, $first) 
{ 

return $query = $this->db->get_where('table', array('no' => $no, 
'first' => $first))->result(); 

} 

查看

<?php foreach($query as $row): ?> 
<tr> 
    <td><?php echo $row->no; ?></td> 
    <td><?php echo $row->date; ?></td> 
    <td><?php echo $row->first; ?></td> 


    </tr> 
    <?php endforeach; ?> 
+0

檢查天氣這兩個變量都不是空的,然後做相應的查詢或更改查詢 – vodich

回答

2

如何只跳過沒有提供任何參數?

function query($no, $first) 
{ 
    $where = array(); 

    if ($no != '') $where['no'] = $no; 
    if ($first != '') $where['first'] = $first; 

    if (empty($where)) 
    { 
    return array(); // ... or NULL 
    } 
    else 
    { 
    return $query = $this->db->get_where('table', $where); 
    } 
} 
0

例如

if(strlen($no)>0 && strlen($first)>0){ 
    $data['query']=$this->test->query($no,$first); 
}else{ 
    $data['query']=$this->test->query($no);//or $first 
} 
0

你也可以做使用默認參數的概念。可以檢查用戶是否傳遞了兩個參數,因此您可以調用模型併發送參數。

考慮您的例子我寫的代碼:

控制器

public function query() 
{ 

$no = $this->input->post('no'); 
if($this->input->post('first')) 
    $first = $this->input->post('first'); 
$this->load->model("test"); 
if($first != '') 
    $data['query']=$this->test->query($no,$first); 
else 
    $data['query']=$this->test->query($no); 
$this->load->view('query',$data); 
} 

型號

function query($no, $first = null) 
{ 

return $query = $this->db->get_where('table', array('no' => $no, 
'first' => $first))->result(); 

} 

查看

<?php foreach($query as $row): ?> 
<tr> <td><?php echo $row->no; ?></td> 
    <td><?php echo $row->date; ?></td> 
    <td><?php echo $row->first; ?></td> 
</tr> 
<?php endforeach; ?> 

使用這個概念,你可以使用相同的功能在不同的地方。 例如。你用兩個diff做了搜索功能。參數搜索,但使用默認參數的概念,你可以使用相同的功能來搜索數據庫與一個或兩個參數。

我希望我幫你! :)