2013-12-20 307 views
5

我在我的CodeIgniter项目中创建了一个搜索页面。 在提交时,窗体调用控制器功能,数据是通过模型函数获取所得数组传递给视图PHP 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'); 
    } 

请帮我this.I不能使用重定向而不是加载视图,因为我必须将结果数组$ data传递给视图。

+0

核查请求是否是发布并在请求中发布数据。然后加载结果。请执行一些操作 –

+0

即可。问题在于刷新结果页面浏览器显示确认消息以重新结束t表格 – Chinthu

回答

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'); 
} 
+0

确切地说,重定向将服务器作为下一次它将不会提交表单,做得好。 – Pupil

+0

它工作..........我的问题的正确解决方案...非常感谢你.... – Chinthu

1

如果你想避免重新提交,那么请保存重定向后在这样的控制器上这样的 它可以使用会话来解决。如果有任何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'); 
    } 
} 
+0

你不明白真正的问题.....? – Chinthu

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')) 
{...}