Я проверяю форму в codeigniter. Если пользователь неправильно заполнил форму, страница не должна перенаправляться на любую другую страницу, а отображать ошибки в каждом поле ввода. Вот мой код формы:
<?php echo $this->session->flashdata('errors');?>
<form action="<?php echo base_url() ?>detail/travel" method="post">
<input type="text" name="departure">
<input type="text" name="destination">
<input type="text" name="name">
<input type="text" name="cell">
</form>
и вот мой код метода:
function search_travel(){
if($_POST){
$config = array(
array(
'field'=>'departure',
'label'=>'departure',
'rules'=>'trim|required|alpha'
),
array(
'field'=>'destination',
'label'=>'destination',
'rules'=>'trim|required|alpha'
),
array(
'field'=>'name',
'label'=>'name',
'rules'=>'trim|required|alpha'
),
array(
'field'=>'cell',
'label'=>'cell no',
'rules'=>'trim|required'
)
);
$this->load->library('form_validation');
$this->load->helper(array('form', 'url'));
$this->form_validation->set_rules($config);
if($this->form_validation->run() == FALSE){
$this->session->set_flashdata('errors', validation_errors());
redirect(base_url());
}
}
}
Проблема в том, что с помощью set_flashdata я не могу использовать функцию form_error и функцию set_value. Есть ли другое решение этой проблемы ???
Под вашим местом ввода form_error () вам нужно загрузить помощник по форме, хотя
Вы можете автоматически загружать библиотеки и т.д. config / autoload.php
$autoload['helper'] = array('form', 'html', 'url');
Пример ошибки формы
<input type="text" name="departure">
<?php echo form_error('departure', '<div class="error">', '</div>'); ?>
<input type="text" name="destination">
<?php echo form_error('destination', '<div class="error">', '</div>'); ?>
<input type="text" name="name">
<?php echo form_error('name', '<div class="error">', '</div>'); ?>
<input type="text" name="cell">
<?php echo form_error('cell', '<div class="error">', '</div>'); ?>
Как показано здесь https://www.codeigniter.com/userguide3/libraries/form_validation.html#changing-the-error-delimiters
Имя файла контроллера Detail.php только первая буква должна быть заглавным классом и именем файла
<?php
class Detail extends CI_Controller {
// You can autoload helpers and libraries etc if you need to,
public function __construct() {
parent::__construct();
$this->load->helper('form');
$this->load->library('form_validation');
}
public function index() {
$this->load->view('your_form_view');
}
function search_travel() {
$this->form_validation->set_rules('departure', 'departure', 'trim|required');
$this->form_validation->set_rules('destination', 'destination', 'trim|required');
$this->form_validation->set_rules('name', 'name', 'trim|required');
$this->form_validation->set_rules('cell', 'cell', 'trim|required');
if ($this->form_validation->run() == FALSE) {
// Error
$this->load->view('your_form_view');
} else {
// Success
redirect(base_url('another/controller'));
}
}
}
Посмотреть
<?php echo form_open('detail/search_travel');?>
<input type="text" name="departure">
<?php echo form_error('departure', '<div class="error">', '</div>'); ?>
<input type="text" name="destination">
<?php echo form_error('destination', '<div class="error">', '</div>'); ?>
<input type="text" name="name">
<?php echo form_error('name', '<div class="error">', '</div>'); ?>
<input type="text" name="cell">
<?php echo form_error('cell', '<div class="error">', '</div>'); ?>
// Submit button
<?php echo form_close();?>
Вы должны избегать перенаправления после неудачной проверки.
У вас есть два варианта возврата ошибки валидации:
Загрузите страницу:
$ this-> load-> view (‘имя страницы);
Вы можете загрузить вид страницы конкретной функции. Например, если у вас есть индексная функция для загрузки формы, то вы можете сделать это.
$ This-> индекс ();
и чтобы заполнить ошибки проверки отдельно, вы можете показать их следующим образом:
<?= form_error('your input field name') ?>
или показывая все ошибки в верхней части формы. Вы можете сделать это следующим образом.
<?php echo validation_errors(); ?>
Надеюсь, это поможет.