CakePHP输入表单搜索产品ID并在同一页面上显示结果

时间:2014-01-30 21:43:09

标签: php forms cakephp input

正如标题所说,我需要使用输入表格从我的数据库中搜索数据并将查询返回到同一页面。

我尝试了许多不同类型的Google解决方案。到目前为止,他们都没有和我合作过。我对CakePHP也很陌生,所以很明显我错过了一些东西......

我的数据的表名是“帖子”。

所以我希望这个搜索的视图是(search.ctp),我的表单就像这样:

<?php
  echo $this->Form->create('Search');
  echo $this->Form->input('search', array('label' => 'Search with ID'));
  echo $this->Form->end('Search');
?>

根据我的发现,我很困惑,如果我应该使用我的PostsController.php作为搜索功能,或者将新的Controller作为SearchController.php用于此,那么该模型也是如此。

此时我正在尝试使用SearchController.php,代码如下:

class SearchController extends AppController {


    public function search(){

        $keyword=$this->params->query['keyword']; 

        $cond=array('OR'=>array("Post.id LIKE '%$keyword%'","Post.title LIKE %$keyword%'")  );

        $list = $this->Post->find('all',array('conditions')=>$cond);

    }
}

我试图在页面search.ctp代码上显示我的查询结果的部分如下:

<?php
      foreach($list as $post): ?>

   <tr>
     <td> <?php echo $post ["Search"]["id"]; ?> </td>
     <td>   
         <?php echo $this->Html->link($post["Search"]["title"], array("controller" => "posts", "action" => "search", $post["Search"]["id"])); ?>
    </td>

    <td><?php echo $post["Search"]["created"]; ?></td>
   </tr>
<?php endforeach; ?>
<?php unset ($post); ?>

我敢打赌,代码有点迟钝,我一直在尝试这么多不同的解决方案,所以现在代码完全搞砸了我...

无论如何,如果有人能够帮助有需要的人,请提前感谢你!

2 个答案:

答案 0 :(得分:0)

这是完全错误的,您尝试通过POST(Post.search)进行搜索,但是使用URL中的查询参数(/ posts / index /?keyword = something)。你觉得它应该如何到达那里?顺便问一下你为什么要搜索id?

没有必要创建一个搜索控制器,我不明白为什么人们喜欢这样做,但肯定没有必要这样做。您可以在与搜索相同的页面上显示您的帖子列表,甚至是分页:

public function index() {
    if ($this->request->is('post') && !empty($this->request->data['Post']['search'])) {
        $searchTerm = '%' . $this->request->data['Post']['search'] . '%';
        $this->Paginator->settings['conditions']['OR'] = array(
            'Post.id LIKE' => $searchTerm,
            'Post.title LIKE' => $searchTerm,
        );
    }
    $this->set('posts', $this->Paginate->paginate());
}

如果您尝试在网址中获取搜索字词,则此处使用的正确模式为the PRG pattern。 CakePHP的CakeDC search plugin非常好地实现了它,并且很容易实现它。

答案 1 :(得分:-1)

在搜索操作中,您必须验证帖子是否已发送。 所以 if($ _POST) {         $关键字= $这 - &GT; params-&GT;查询[ '关键字'];

    $cond=array('OR'=>array("Post.id LIKE '%$keyword%'","Post.title LIKE %$keyword%'")  );

    $list = $this->Post->find('all',array('conditions')=>$cond);
    $this->set("list",$MyData);

}