我正在尝试在我的列表中添加搜索。我正在使用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);
我在视图中添加了搜索表单。 任何人都可以建议我的问题是什么? 提前谢谢。
答案 0 :(得分:4)
您必须忘记传递分页的搜索查询。看到页码如何是查询字符串的第三段,我猜测搜索表单会在用户提交时执行POST
操作。用户提交表单后,当然会有效。因为他们刚刚发出POST
个请求,您可以使用$_POST
或类似内容从$this->input->post('user_input')
获取搜索查询。但是,当他们尝试通过单击页码链接(这是GET
请求)导航到另一个页面时,搜索失败,因为超级全局$_POST
数组为空。
解决此问题的解决方案是根据用户输入设置会话值(我建议您使用CodeIgniter的会话类),而不是使用$_POST
中的搜索查询,并使用存储在会话而不是。
另一种方法是为搜索结果创建另一个页面(假设它当前与表单位于同一页面中,即在同一个控制器函数中)。然后让搜索表单对其自己的控制器函数执行GET
请求,然后控制器函数将base64
中的搜索查询编码,并用编码的字符串替换=
(等号) .
。之后,将用户重定向到搜索结果页面,同时将编码的搜索查询作为URL查询字符串中的第三个段传递(页码将是第四个)。在该函数中,将.
替换回=
并使用base64_decode()
获取搜索查询并将其传递给将生成搜索结果的函数。
当然,还有很多其他方法可以达到相同的效果。只是谷歌吧。