как отобразить ошибку валидации под каждым полем ввода при перенаправлении в codeigniter

Я проверяю форму в 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. Есть ли другое решение этой проблемы ???

0

Решение

Под вашим местом ввода 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();?>
2

Другие решения

Вы должны избегать перенаправления после неудачной проверки.
У вас есть два варианта возврата ошибки валидации:

  1. Загрузите страницу:

    $ this-> load-> view (‘имя страницы);

  2. Вы можете загрузить вид страницы конкретной функции. Например, если у вас есть индексная функция для загрузки формы, то вы можете сделать это.

    $ This-> индекс ();

и чтобы заполнить ошибки проверки отдельно, вы можете показать их следующим образом:

<?= form_error('your input field name') ?>

или показывая все ошибки в верхней части формы. Вы можете сделать это следующим образом.

<?php echo validation_errors(); ?>

Надеюсь, это поможет.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector