在 CodeIgniter 中插入重复数据 [英] duplicate data insert in CodeIgniter

查看:28
本文介绍了在 CodeIgniter 中插入重复数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是在 pastebin http://pastebin.com/KBtqrAkZ的codeigniter控制器部分插入数据>

I am just inserting data in codeigniter controller part at pastebin http://pastebin.com/KBtqrAkZ

  public function add_product()
  {
    $this->lang->load('log_in', 'english');
        log_in_check($this->lang->line('log_in_authentication_error'), 'admin/log_in');
        $this->lang->load('common', 'english');
        $data['title'] = $this->lang->line('admin_index_title');
        $this->load->view('admin_template/header', $data);
        $this->load->view('admin_template/left_menu');
    $data['error_msg'] = '';
        if ($this->form_validation->run('add_product') === TRUE)
        {
      $this->admin_model->add_product($this->input->post());
            $this->session->set_flashdata('status_msg', $this->lang->line('add_product_success'));
            redirect(uri_string(), 'refresh');
      exit ;
          $data['error_msg'] = $this->lang->line('add_product_invalid_data');
        }
        $this->load->view('admin/add_product');
        //$this->load->view('admin_template/notification');
        $this->load->view('admin_template/footer');  
  }

比我的模型部分简单添加到 pastebin http://pastebin.com/WiLHV2sr

Than my model part is simple add at pastebin http://pastebin.com/WiLHV2sr

  public function add_product($data = array())
  {
    $this->db->insert('ishop_product', $data);
    return $this->db->insert_id();
  }

我的问题是在重定向之后,如果我按下 ctrl + F5 或 F5 而不是插入数据.我是 codeigniter 的新手.请帮帮我.任何帮助将不胜感激.

my problem is after redirecting if I press ctrl + F5 or F5 than the data is inserting. I am a new in codeigniter. Help me please. Any help will be greatly appreciated.

推荐答案

这是双重提交问题.

有几种处理方法:

  1. 发布/重定向/获取模式:打破后退按钮,它不会阻止您的用户返回足够远以再次提交.不处理多次点击.

  1. The Post / Redirect / Get pattern: Breaks the back button, and it does not keep your user from going back far enough to submit again. Does not handle multiple clicks.

禁用提交按钮:有时会处理多次点击,但不会解决用户返回并再次提交的问题.

Disable the submit button: Handles multiple clicks some of the time, but does not fix the user going back and submitting again.

在会话中存储令牌:如果您在浏览器中打开了多个选项卡,会话中存储的令牌可能会混淆.(注意:可以创建浏览器标签特定的cookie 使用 javascript,但我自己没有尝试过.)

Store a token in the session: If you have multiple tabs open in the browser, the token stored in the session may get mixed up. (Note: It may be possible to create browser tab specific cookies using javascript, but I have not tried it myself.)

将数据库更改为不允许重复:最好的解决方案,也是最努力的.如果检测到一组重复数据,则忽略第二个请求.

Change the database to not allow duplicates: The best solution, but also the most effort. If it detects a set of duplicate data, ignore the second request.

唯一交易 ID:在此描述 PHP 黑客页面,以及这个答案.

会话中的多个令牌:选项 3 的变体.如果您将所有生成的令牌存储在会话中,则不需要涉及数据库.考虑到令牌在会话中是唯一的,重复的概率要低得多.可能的问题包括失去控制的令牌集.也许可以通过添加到堆栈顶部的有限大小堆栈来修复,并且额外的令牌从底部掉下来.未经测试.

Multiple tokens in the session: A variation on option 3. If you store all generated tokens in the session, you don't need to involve the database. The probability of a duplicate is much lower, given that tokens are unique inside a session. Possible problems include the set of tokens growing out of control. Maybe fixable with a limited size stack where you add to the top of the stack, and extra tokens fall off the bottom. Untested.

--

我喜欢唯一交易 ID 方法.它是这样工作的:

I like the unique transaction id method. It works like this:

  1. 生成一个随机的 transaction_id 并将其放入您的网络表单中.当用户点击submit时,它会继续.

  1. Generate a random transaction_id and put it in your web form. It goes along when the user clicks submit.

当您收到添加产品的请求时,检查交易表中的transaction_id.

When you receive the request to add a product, check for the transaction_id in the transaction table.

如果id在表中不存在,则进行事务,并将transaction_id插入到表中.

If the id does not exist in the table, do the transaction, and insert the transaction_id into the table.

如果表中的id确实存在,则交易已经完成.

If the id does exist in the table, the transaction is already done.

您还应该搜索 [double-submit-prevention] 以查看是否可以找到一个更好的解决方案.

You should also search for [double-submit-prevention] in to see if you can find an even better solution.

这篇关于在 CodeIgniter 中插入重复数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆