在 codeigniter 中提交一次后,在每次刷新时停止表单提交

Posted

技术标签:

【中文标题】在 codeigniter 中提交一次后,在每次刷新时停止表单提交【英文标题】:To stop form submit on every refresh after one submit in codeigniter 【发布时间】:2016-11-05 20:07:26 【问题描述】:

表单提交后,任意数量的刷新都会将数据存储在数据库中多次。 IE。 !empty($_POST) 在提交后始终为真。

如何在不重定向页面/网址的情况下停止提交。因为我想留在同一页面上。

我正在使用 form_open() 和 form_submit() 进行代码点火。

在视图中

    <?php echo form_open("",array('method' => 'POST'));?>
  /* form fields */
'发送', '值' => '发送通知',"name"=>"send_notification")); ?>

在控制器中

`if (!empty($_POST['send_notification'])) 
      /* validation rules  & data*/
      if ($this->form_validation->run() == TRUE)
         $this->model->insert($data);
      
 `

如何停止重复记录插入,我试过了 unset($_POST) , isset() , if($this->input->post()) ,似乎没有任何效果。

【问题讨论】:

您可以使用redirect('controller/function'); 将页面重定向到同一个控制器,如果您想显示消息,则可以使用附加的内容进行重定向,例如redirect('controller/function/?success');。然后在控制器if(isset($_GET['success'])) $data['success'] ="Your success message here"; 谢谢,在重定向到同一个控制器之前闪现消息有帮助。!! 【参考方案1】:

这对我有用。它可能会帮助某人

控制器文件:

public function success()

    $_SESSION['txnid'] = $this->input->post('txnid');
    $this->bind->set_order();
    $this->load->view('success');

模型文件:

public function set_order()

    $txnid = $_SESSION['txnid'];
    $qry = $this->db->query("SELECT * from orders where transaction_id = '$txnid'");
    $result = $qry->result_array();
    if($qry->num_rows() == 0 )
    
     //add to database here
    

    else
    
      // do nothing
    

我在提交时将 txnid 添加到数据库。因此,如果它尝试重新提交,它会检查 txnid 是否已经存在。

【讨论】:

【参考方案2】:

只需在插入函数后对同龄做一个redirect();即可。

【讨论】:

以上是关于在 codeigniter 中提交一次后,在每次刷新时停止表单提交的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ4590 [Shoi2015]自动刷题机

复制的电梯卡数据被改写,不是滚码原理

无法在数据库 PHP、Codeigniter 中搜索现有值

MySQL两阶段提交

无法在 codeigniter 中提交数据

每次提交时都会删除Composer包