2015-06-22 73 views
0

我是CakePHP的初學者。我想做一個簡單的搜索框,但它不工作,下面是我的控制器代碼: -CakePHP 2.5搜索框不工作

public function index() {   
    if ($this->request->is('post')) { 
     $this->loadModel('Job'); 
     $this->request->data = $keyword; 
     $result = $this->Job->find('all', array(
      'condition'=>array('Job.title'=>'% $keyword %') 
     )); 
     $this->set('rslt',$result); 
     //$this->set('kc',$keyword); 
    } 
} 

對於我的看法,我有下面的代碼: -

<?php echo $this->Form->create('search', array('type'=>'get'));?> 
<?php echo $this->Form->input('search');?> 
<?php echo $this->Form->end('Submit');?>  

<pre><?php print_r($rslt) ; ?></pre> 

然而搜索結果顯示一個空白頁面。

+0

什麼是'$ this-> request-> data = $ keyword;'for?你不應該像這樣改變'$ this-> request-> data'。你從哪裏得到'$關鍵字'? – drmonkeyninja

+0

$關鍵字是來自搜索表單的變量 – user2090999

回答

-1

更改此:

'% $keyword %' 

這樣:

'%$keyword%' 

也就是說,刪除空格,否則生成的SQL將嘗試找到空間包圍的關鍵字。

+0

謝謝,我已經這樣做了,但仍然顯示空白頁面,顯示 – user2090999

+0

另外,在您的視圖中,將'array('type'=>'get')' array('type'=>'post')',否則你的數據將通過'get'方法發送,而你的代碼只接受數據; 'post'方法。 –

+0

我想我現在正在取得進展,它顯示了一些結果,但結果與搜索關鍵字無關,它正在顯示數據庫中的所有內容 – user2090999

1

看起來你的代碼有幾個問題。

首先,您應該從請求數據中獲取關鍵字$this->request->data['search']['keyword']。不要像您的示例代碼中那樣覆蓋$this->request->data;它的意思是提交給頁面的一組數據,你用一個字符串替換它!其次,你的病情需要看起來像'Job.title LIKE' => '%' . $this->request->data['search']['keyword'] . '%'。圍繞PHP變量使用單引號將其視爲字符串,因此不會將其替換爲變量的值。相反,我們只引用% s。

您還錯過了在條件索引中搜索的LIKE關鍵字。

在你的控制器中的代碼應該是這個樣子: -

public function index() {   
    if (!empty($this->request->data)) { 
     $this->loadModel('Job'); 
     $result = $this->Job->find('all', array(
      'conditions' => array('Job.title LIKE' => '%' . $this->request->data['search']['keyword'] . '%') 
     )); 
     $this->set('rslt',$result); 
    } 
} 
+0

謝謝,我需要對我的視圖文件進行任何編輯嗎?我的意思是我的形式 – user2090999

+2

而不是這種容易出錯的方法,你應該更好地使用搜索插件https://github.com/CakeDC/search和適當的PRG方法。這將立即解決所有問題,並且乾淨利落。 – mark

+0

我想我現在正在取得進展,它顯示了一些結果,但結果與搜索關鍵字無關,它正在顯示數據庫中的所有內容 – user2090999

0

您構成方式爲"GET"與您試圖訪問它在你的控制器沒有張貼。

//你的視圖代碼

<?php echo $this->Form->create('search', array('type'=>'get'));?> 
<?php echo $this->Form->input('search');?> 
<?php echo $this->Form->end('Submit');?> 

你應該在你的控制器做到這一點。

if($this->request->is('get')){ 
    $keyword = $this->request->data['search']; 
// OR $keyword = $_GET['search']; 

$this->Job->find('all', array('conditions' => 
    'Job.colunmName LIKE' => '%'.$keyword.'%' 
)) 
} 
+0

實施您的建議後,頁面開始顯示空白 – user2090999

+0

嘗試if(isset($ _GET ['search'])&&!empty($ _GET ['search'])){this-> Job-> find('所有',array('conditions'=> 'Job.colunmName LIKE'=>'%'。$ keyword。'%' )) } 請記住使用$ this-> set將值傳遞迴您的視圖(),也用您的表格colunm和Job替換colunmName與您的型號名稱 – Michel

+0

我累了,現在我的視圖中的文本框顯示爲一個選擇框 – user2090999