gpt4 book ai didi

php - 在 CodeIgniter 中插入重复数据

转载 作者:可可西里 更新时间:2023-10-31 23:52:44 25 4
gpt4 key购买 nike

我只是在 pastebin 的 codeigniter Controller 部分插入数据 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

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

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

最佳答案

这就是双重提交问题

有几种处理方法:

  1. The Post / Redirect / Get pattern :打破后退按钮,它不会阻止您的用户返回足够远以再次提交。不处理多次点击。

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

  3. Store a token in the session :如果您在浏览器中打开了多个选项卡,则存储在 session 中的 token 可能会混淆。 (注意:使用javascript可能可以create browser tab specific cookies,但我自己没试过。)

  4. 修改数据库不允许重复:最好的方案,也是最费力的。如果它检测到一组重复数据,则忽略第二个请求。

  5. Unique transaction id:描述于此PHP hacks page , 和 this answer .

  6. session 中的多个 token :选项 3 的变体。如果将所有生成的 token 存储在 session 中,则不需要涉及数据库。鉴于 token 在 session 中是唯一的,重复的可能性要低得多。可能的问题包括 token 集增长失控。也许可以使用有限大小的堆栈来修复,您可以在其中添加到堆栈的顶部,并且额外的标记会从底部掉落。未经测试。

--

我喜欢unique transaction id 方法。它是这样工作的:

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

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

  3. 如果表中id不存在,则进行事务处理,将transaction_id插入表中。

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

您还应该搜索 [double-submit-prevention]看看您是否能找到更好的解决方案。

关于php - 在 CodeIgniter 中插入重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8165018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com