дублирование вставки данных в CodeIgniter

Я просто вставляю данные в часть контроллера codeigniter в 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

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

моя проблема после перенаправления, если я нажимаю ctrl + F5 или F5, чем данные вставляют. Я новичок в кодеригере. Помоги мне, пожалуйста. Любая помощь будет оценена.

Это проблема с двойным отправкой .

Существует несколько способов борьбы с ним:

  1. Шаблон Post / Redirect / Get : прерывает кнопку «Назад», и это не позволяет вашему пользователю вернуться достаточно далеко, чтобы отправить его снова. Не обрабатывает несколько кликов.

  2. Отключить кнопку отправки : несколько раз обрабатывает несколько кликов, но не исправляет возврат пользователя и отправку его снова.

  3. Храните токен в сеансе : если в браузере открыто несколько вкладок, токен, хранящийся в сеансе, может быть запутан. (Примечание. Возможно создание чатов с вкладками в браузере с помощью javascript, но я сам не пробовал.)

  4. Измените базу данных, чтобы не допускать дубликатов : лучшее решение, но и самое большое усилие. Если он обнаруживает набор повторяющихся данных, игнорируйте второй запрос.

  5. Уникальный идентификатор транзакции : Описан на этой странице PHP hacks и на этом ответе .

  6. Несколько токенов в сеансе : вариант варианта 3. Если вы сохраняете все сгенерированные токены в сеансе, вам не нужно привлекать базу данных. Вероятность дублирования намного ниже, учитывая, что токены уникальны внутри сеанса. Возможные проблемы включают набор токенов, которые выходят из-под контроля. Может быть, исправлена ​​с ограниченным размером стека, где вы добавляете в верхнюю часть стека, а дополнительные жетоны падают снизу. Непроверенные.

Мне нравится уникальный метод идентификатора транзакции . Он работает следующим образом:

  1. Создайте случайный transaction_id и поместите его в свою веб-форму. Это происходит, когда пользователь нажимает submit .

  2. Когда вы получите запрос на добавление продукта, проверьте transaction_id в таблице транзакций.

  3. Если идентификатор не существует в таблице, выполните транзакцию и вставьте transaction_id в таблицу.

  4. Если идентификатор существует в таблице, транзакция уже выполнена.

Вы также должны искать [double-submit-prevent], чтобы узнать, можете ли вы найти еще лучшее решение.

Theres простое решение, вы можете перенаправить на другую страницу после добавления продукта, например:

 redirect (base_url (). "yourcontrollername / index");

Это приведет к удалению почтовых данных, и данные не будут повторно добавлены в базу данных.