Я просто вставляю данные в часть контроллера 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, чем данные вставляют. Я новичок в кодеригере. Помоги мне, пожалуйста. Любая помощь будет оценена.
Это проблема с двойным отправкой .
Существует несколько способов борьбы с ним:
Шаблон Post / Redirect / Get : прерывает кнопку «Назад», и это не позволяет вашему пользователю вернуться достаточно далеко, чтобы отправить его снова. Не обрабатывает несколько кликов.
Отключить кнопку отправки : несколько раз обрабатывает несколько кликов, но не исправляет возврат пользователя и отправку его снова.
Храните токен в сеансе : если в браузере открыто несколько вкладок, токен, хранящийся в сеансе, может быть запутан. (Примечание. Возможно создание чатов с вкладками в браузере с помощью javascript, но я сам не пробовал.)
Измените базу данных, чтобы не допускать дубликатов : лучшее решение, но и самое большое усилие. Если он обнаруживает набор повторяющихся данных, игнорируйте второй запрос.
Уникальный идентификатор транзакции : Описан на этой странице PHP hacks и на этом ответе .
Несколько токенов в сеансе : вариант варианта 3. Если вы сохраняете все сгенерированные токены в сеансе, вам не нужно привлекать базу данных. Вероятность дублирования намного ниже, учитывая, что токены уникальны внутри сеанса. Возможные проблемы включают набор токенов, которые выходят из-под контроля. Может быть, исправлена с ограниченным размером стека, где вы добавляете в верхнюю часть стека, а дополнительные жетоны падают снизу. Непроверенные.
–
Мне нравится уникальный метод идентификатора транзакции . Он работает следующим образом:
Создайте случайный transaction_id
и поместите его в свою веб-форму. Это происходит, когда пользователь нажимает submit
.
Когда вы получите запрос на добавление продукта, проверьте transaction_id
в таблице транзакций.
Если идентификатор не существует в таблице, выполните транзакцию и вставьте transaction_id в таблицу.
Если идентификатор существует в таблице, транзакция уже выполнена.
Вы также должны искать [double-submit-prevent], чтобы узнать, можете ли вы найти еще лучшее решение.
Theres простое решение, вы можете перенаправить на другую страницу после добавления продукта, например:
redirect (base_url (). "yourcontrollername / index");
Это приведет к удалению почтовых данных, и данные не будут повторно добавлены в базу данных.