【问题标题】:Form submission in CodeigniterCodeigniter 中的表单提交
【发布时间】:2013-04-14 01:47:02
【问题描述】:

我有这个问题,在我提交表单后,我执行了“F5”或“刷新” 还有数据提交了,每次按“F5”和我第一次提交表单时一样的数据,然后它变成重复条目,我尝试清除POST数据以及CI中的field_data,仍然存在提交的值,我不知道为什么它不能被困在form_validation 上,我在那里设置了一个必需的规则。

$this->load->library('form_validation');

$this->form_validation->set_rules('name', 'Name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email');
$this->form_validation->set_rules('comment','Comment','required');

if(/*form validation is false*/) //fail
{
   // some code for incorrect values
}
else //success
{
   $_POST = array();
   $this->form_validation->clear_field_data();
  //and some code for views
}

现在,在正常过程中,它没有错误,但是当我按下“F5”或刷新页面时,数据再次提交,从而再次将其插入数据库, 我真的不知道为什么会发生它已经清除了从现场数据到实际帖子数据的所有内容,如果您有任何知识,请分享

顺便说一句,我的 form_validation 是定制的,扩展了 CI 的原生 form_validation

【问题讨论】:

  • 会不会是浏览器缓存了它?
  • hmmm 也许但我不知道如何查看缓存.. 无法通过 CI 分析器查看它?知道如何查看或更好地清除它吗?在 CI 中
  • 您从浏览器中清除浏览器缓存。如果这样可以暂时解决问题,则意味着浏览器确实在缓存表单提交,您需要设置正确的 HTTP 标头以防止它发生。
  • 嗯我知道 dat 是如何工作的,但我不认为用户会知道清除缓存会解决这个问题,我的意思是通过以编程方式清除它以防止重新提交它
  • 如果表单验证成功,那么使用redirect 是停止表单重新提交的常用方法(例如,而不是加载视图)。

标签: php forms codeigniter


【解决方案1】:

尝试使用redirect 函数代替$this->load->view

你可以看到here

【讨论】:

  • 使用 rederict 更容易,我认为更有效,成功的消息只需使用 flash 数据,无论如何它会在下一次服务器请求时被销毁
【解决方案2】:

您可以使用重定向(首选)或使用服务器端标头来不存储发布数据:

header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header ("Pragma: no-cache"); // HTTP/1.0

【讨论】:

    【解决方案3】:

    试试这个

    if ($this->form_validation->run() == FALSE) 
    {
       $data['Name']['value'] = $this->input->post('name', TRUE);
       $this->load->view("someview",$data);
    }
    else
    {
       $data['Name']['value'] = "";
       $this->load->view("someview",$data);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-03
      • 2011-02-24
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多