我正在我的CodeIgniter项目中创建一个搜索页面。 在提交时,表单调用控制器函数,通过模型函数获取数据,并将结果数组传递给视图
问题在于,当我刷新结果页面时,表单正在重新提交,因为$ _POST数据仍然存在于请求标头中。 如何避免重新提交确认消息
以下是我的表单的代码:
<!--form-->
<form id="find" action="<?php echo base_url()?>search/find" method="post">
<input type="text" name="search_key" class="tb4" id="search_key" placeholder="Search here"/>
<input type="button" value="search"/>
</form>
以下是我的控制器的代码:
/*
* function for fetching search results
* @param void
* @return void
*/
public function find()
{
$data['search_result']=$this->search_model->search($this->input->post('search_key'));
$this->load->view('template/header');
$this->load->view('pages/search_result',$data);
$this->load->view('template/footer');
}
请帮助我。我不能使用重定向而不是加载视图,因为我必须将结果数组$ data传递给视图。
答案 0 :(得分:7)
尝试重定向到自己
public function find()
{
$data['search_result']=$this->search_model->search($this->input->post('search_key'));
if($this->input->post('search_key')) {
redirect('yourcontroller/find');
}
$this->load->view('template/header');
$this->load->view('pages/search_result',$data);
$this->load->view('template/footer');
}
答案 1 :(得分:2)
简单的解决方案是在表单中有一个隐藏的时间戳字段。
<?php echo form_hidden( 'TS', time() ); ?>
处理表单时,请将此时间戳保存在会话中
$this->session->set_userdata( 'form_TS', $this->input->post( 'TS' ) );
在处理表单之前检查两个时间戳不匹配
if ( $this->input->post( 'TS' ) != $this->session->userdata('form_TS') )
{...}
答案 2 :(得分:1)
如果你想避免重新提交,那么请在这样的同一控制器上保存重定向之后 它可以使用session解决。如果有任何POST表单提交,
即
if (count($_POST) > 0){
$this->session->set_userdata('post_data', $_POST );
redirect('same_controller');
}
else{
if($this->session->userdata('post_data')){
$_POST = $this->session->userdata('post_data');
$this->session->unset_userdata('post_data');
}
}