Codeigniter Form Validationform re-наполнение

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

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

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

    function class () {

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

    }

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

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


person Michael Bradley    schedule 13.07.2009    source источник


Ответы (5)


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

person amr    schedule 13.07.2009
comment
Flashdata - отличное предложение. Простой в использовании, чистый код. codeigniter.com/user_guide/libraries/sessions.html - person GloryFish; 14.07.2009

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

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

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

<?php echo validation_errors(); ?>

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

person Randell    schedule 17.07.2009
comment
Я думаю, что это на самом деле самый CI способ сделать это, но по какой-то причине все, включая меня, всегда заканчивают тем, что используют методы сеанса. - person stef; 07.12.2009
comment
ИМО, использование методов сеанса приводит к беспорядку в коде. - person Randell; 19.03.2010

   $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'/>
person shihabudheen    schedule 06.09.2012

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

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

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

session_start();
$_SESSION['POST_DATA'] = $_POST;
person TJ L    schedule 13.07.2009
comment
Умм, вот что я подумал. Это все еще довольно обходной путь, но, тем не менее, самое простое решение. Было бы удобно, если бы массив можно было передать через редирект ... спасибо tj111 - person Michael Bradley; 13.07.2009

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

person Peter    schedule 13.07.2009
comment
Проблема в том, что проверку на стороне клиента легко обойти. Вы должны всегда проверять данные на сервере, даже если вы предварительно проверяете их на клиенте. Никогда не доверяйте данным, которые вы не контролируете. - person TJ L; 13.07.2009