Проверка формы Codeigniter ... повторное заполнение формы


Я нахожусь в процессе создания формы ввода на странице конкретной записи, например (property / rentals / rec_id). После представления данные должны быть вставлены, проверены и возвращены на исходную страницу, с которой они были отправлены с любыми соответствующими сообщениями.

  • Если проверка завершилась неудачно, перезагрузите страницу формы A повторно заполните форму
  • Эхо конкретной ошибки проверки-например, неверный адрес электронной почты и т. д.

  • В случае успеха вставьте данные, перезагрузите страницу и отобразите сообщение об успехе.

    Класс функций () {

    $this->load->library('form_validation');    
    $this->form_validation->set_rules('name','name','required|trim');
    $this->form_validation->set_rules('email','email','required|trim|valid_email');
    
    $fields['name'] = 'Name';
    $fields['email'] = 'Email Address';
    
    $this->validation->set_fields($fields);
    
    if ($this->form_validation->run() == FALSE) 
    {
        //failed - reload page and re-populate fields with any error messages
    }
    else
    {
         // display form with success message
    }
    

    }

Обычно это делается просто путем "загрузки представления" и передачи соответствующих данных для повторного заполнения страницы, полей или отображения сообщений. Но я должен использовать "редирект" обратно на страницу конкретного продукта. Есть ли какой-либо хороший способ сделать это, кроме использования данных сеанса для переноса ошибок проверки..?

Заранее спасибо, Майкл

5 3

5 ответов:

Взгляните на руководство CodeIgniter по сеансам и посмотрите, может ли "FlashData" быть полезной.

Вы можете использовать функцию set_value('field_name') для повторного заполнения формы. Пример использования в поле зрения:

<input type="text name="name" value="<?php echo set_value('name'); ?>" />"

Для отображения ошибок из form_validation можно использовать функцию validation_errors(). Пример использования в поле зрения:

<?php echo validation_errors(); ?>

Также смотрите текст ссылки для получения дополнительной информации.

   $insertData=array(
            'name'=>NULL,
            'email'=>NULL);
 //setting validation rules
    $this->form_validation->set_rules('name', 'Name', 'required');
    $this->form_validation->set_rules('email', 'Email', 'required|email');

//here you will get all data which user entered in form 
$insertData = $this->input->post(NULL, TRUE);

if ($this->form_validation->run() == FALSE) 
{
    //failed - reload page and re-populate fields with any error messages
    $this->load->view('view_name',$insertData)    

}
else
{
     //set flash data for displaying success message in redirected page
     $this->session->set_flashdata('success','Success message')
     redirect('controller_name');

}

Просмотр страницы

<?php if ($this->session->flashdata('succes_message')) { echo    $this->session->flashdata('succes_message'); ?> } ?>

<form action='action page url' method='post'>
<input type='text' name='name' value='<?php echo $name ?>'/>
<input type='text' name='email' value='<?php echo $email ?>'/>
<input type='submit' value='Save'/>

Данные сеанса будут самым простым и наиболее точным / эффективным способом отправки данных обратно в форму. Вы также можете использовать файлы cookie, но это будет менее безопасно (поскольку данные файлов cookie отправляются с каждым http-запросом).

Другой вариант-Сохранить данные в базе данных и извлечь их снова после перенаправления, но я чувствую, что это добавит ненужную сложность в ваше приложение.

Для действительно простого решения вы можете даже просто сбросить свой POST/GET данные в переменную SESSION затем быстро вызывают ее на странице, на которую перенаправляется, почти делая перенаправление прозрачным с точки зрения логики.

session_start();
$_SESSION['POST_DATA'] = $_POST;

Чтобы облегчить проблему, вы можете просто выполнить проверку на стороне клиента с помощью Javascript/jQuery. Таким образом, в принципе, вместо того, чтобы сразу перейти на новую страницу, действие Submit будет просто перенаправлено на вашу функцию javascript, которая решит, является ли форма допустимой. Затем вы можете использовать jQuery, чтобы сделать вещи красивыми для недопустимых элементов.