У меня есть такой алгоритм:
if ($this->form_validation->run() == FALSE) {
$this->load->view('costs/v_addcontainer', $data);
} elseif ($check_valid_qty == "error" || $this->form_validation->run() == FALSE) {
$this->session->set_flashdata('qty_error', 'Quantity not valid!');
redirect('Cost/add_container');
} elseif ($check_data_selling > 0) {
$this->session->set_flashdata('data_exist', 'Data already exists!');
redirect('Cost/add_container');
} else{
// insert data
}
Если данные уже существуют, система выдаст предупреждение «Данные уже существуют», но я хочу установить предыдущее значение в форме. Как это исправить?
Вы должны снова загрузить свое представление в случаях «сбоя» вместо перенаправления.
Появляется сообщение «Данные уже существуют», поскольку вы устанавливаете их как флэш-данные, которые сохраняются при перенаправлении, но все остальное по существу теряется, поэтому, если вы хотите заполнить форму с помощью set_value()
, вам нужно показать его в текущем запросе.
Это также означает, что вам не нужно связываться с данными сеанса, и вы можете просто передавать свои сообщения с предупреждениями в обычном режиме.
if ($this->form_validation->run() == FALSE) {
$this->load->view('costs/v_addcontainer', $data);
} elseif ($check_valid_qty == "error") {
$data['qty_error'] = 'Quantity not valid!';
$this->load->view('costs/v_addcontainer', $data);
} elseif ($check_data_selling > 0) {
$data['data_exist'] = 'Data already exists!';
$this->load->view('costs/v_addcontainer', $data);
} else{
// insert data
}
В идеале, однако, вы должны искать документацию для обратных вызовов проверки формы, так как они позволят вам вводить ваши дополнительные правила в класс проверки формы без необходимости в дополнительной логике.
Других решений пока нет …