Проверка формы Codeigniter ... повторное заполнение формы - PullRequest
3 голосов
/ 13 июля 2009

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

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

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

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

    $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 ]

7 голосов
/ 17 июля 2009

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

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

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

<?php echo validation_errors(); ?>

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

3 голосов
/ 13 июля 2009

Взгляните на руководство CodeIgniter по сессиям и посмотрите, пригодится ли 'FlashData'.

1 голос
/ 06 сентября 2012
   $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'/>
0 голосов
/ 13 июля 2009

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

0 голосов
/ 13 июля 2009

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

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

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

session_start();
$_SESSION['POST_DATA'] = $_POST;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...