搜索不适用于带分页的codeigniter

时间:2012-04-16 06:58:26

标签: php codeigniter search pagination

我正在尝试在我的列表中添加搜索。我正在使用codeigniter和分页列表。搜索只是数据库搜索作为样本ID。搜索在分页的第一页中完美无缺。但是当谈到其他页面时,它不起作用。

这是我的控制器的代码。

  $this->clear_sample_id_catche();
  $out=$this->Mgeneral->listData();
  $per_page = 10;
  $total = $this->Mgeneral->countData();
  $data = $this->Mgeneral->listData($per_page, $this->uri->segment(3));

   $base_url = site_url('general/listData');

   $config['base_url'] = $base_url;
   $config['total_rows'] = $total;
   $config['per_page'] = $per_page;
   $config['uri_segment'] = '3';

  $this->pagination->initialize($config); 
  $data=array('body'=>'list','out'=>$data);

  $this->load->view('template',$data);

我在视图中添加了搜索表单。 任何人都可以建议我的问题是什么? 提前谢谢。

1 个答案:

答案 0 :(得分:4)

您必须忘记传递分页的搜索查询。看到页码如何是查询字符串的第三段,我猜测搜索表单会在用户提交时执行POST操作。用户提交表单后,当然会有效。因为他们刚刚发出POST个请求,您可以使用$_POST或类似内容从$this->input->post('user_input')获取搜索查询。但是,当他们尝试通过单击页码链接(这是GET请求)导航到另一个页面时,搜索失败,因为超级全局$_POST数组为空。

解决此问题的解决方案是根据用户输入设置会话值(我建议您使用CodeIgniter的会话类),而不是使用$_POST中的搜索查询,并使用存储在会话而不是。

另一种方法是为搜索结果创建另一个页面(假设它当前与表单位于同一页面中,即在同一个控制器函数中)。然后让搜索表单对其自己的控制器函数执行GET请求,然后控制器函数将base64中的搜索查询编码,并用编码的字符串替换=(等号) .。之后,将用户重定向到搜索结果页面,同时将编码的搜索查询作为URL查询字符串中的第三个段传递(页码将是第四个)。在该函数中,将.替换回=并使用base64_decode()获取搜索查询并将其传递给将生成搜索结果的函数。

当然,还有很多其他方法可以达到相同的效果。只是谷歌吧。