Проверка формы и повторное заполнение значений полей после ошибки перенаправления; Валидация работает, а значения - нет (CodeIgniter 3)

1

Я пытаюсь сохранить значения полей после ошибок проверки при перенаправлении. Ошибка проверки показывает штраф, но я продолжаю потерять значения поля

Форма:

<form>
<input name="v_item_title" placeholder="Property Title Goes Here.." value="<?php echo set_value('v_item_title'); ?>" />
<input type="submit" value="Submit">
</form>

контроллер:

$this->load->helper('security');
$this->load->library('form_validation');
$this->form_validation->set_rules('v_item_title', 'Property title', 'trim|required|xss_clean|max_length[100]');
if($this->form_validation->run() == FALSE)
{
$this->session->set_userdata('validation_errors', validation_errors());
$this->session->mark_as_flash('validation_errors'); // data will automatically delete themselves after redirect
$this->session->set_flashdata('v_item_title', $this->input->post());
$this->session->flashdata('v_item_title');
redirect('user/dashboard#new');
} else {

Перенаправления на

public function dashboard()
{
if($this->session->userdata('is_logged_in')){
$data['validation_errors'] = $this->session->userdata('validation_errors');
$data['v_item_title'] = $this->session->userdata('v_item_title');
$data['homepage'] = '../../templates/vacations/users/dashboard';
$this->load->view('template_users',$data);
}else{
Теги:
codeigniter
codeigniter-3

2 ответа

3
Лучший ответ

У вас неправильная проверка формы на контроллере. У вас есть информация о вашем успехе на ложной области, она должна быть в истинной области, например

http://www.codeigniter.com/user_guide/libraries/form_validation.html

Не уверен, что такое имя вашего контроллера, поэтому я назвал пример входа

приложения> контроллеры> Login.php

<?php

class Login extends CI_Controller {

    public function __construct() {
        parent::__construct();

        $this->load->helper('form');
        $this->load->helper('url');
        $this->load->helper('security');
        $this->load->library('session');
        $this->load->library('form_validation');
    }

    public function index() {

    $data['title'] = 'Login';

    $this->form_validation->set_rules('name_check_box', '', 'trim|required|callback_checkbox');
    $this->form_validation->set_rules('v_item_title', 'Property title', 'trim|required|xss_clean|max_length[100]');

    if($this->form_validation->run() == FALSE) {

        // Load the view
        $this->load->view('header', $data);
        $this->load->view('login', $data);
        $this->load->view('footer');


    } else {

        $data = array(
           'is_logged_in' => true,
           'validation_errors' => validation_errors(),
           'v_item_title' => $this->input->post('v_item_title')
        );

        $this->session->set_userdata($data);

        // data will automatically delete themselves after redirect

        $this->session->mark_as_flash('validation_errors'); 

        // You could set the title in session like above for example
        $this->session->set_flashdata('v_item_title', $this->input->post('v_item_title'));

        // Echo flash data on view file?
        // $this->session->flashdata('v_item_title');

        // Dashboard will be a separate controller
        // application > controllers > user > Dashboard.php
        redirect('user/dashboard');

    }

    public function checkbox() {

        if (isset($_POST['name_check_box']) {
            return true;
        } else {
            $this->form_validation->set_message('checkbox', 'Check box needs to be checked');
            return false;
        }
    }

}

Посмотреть

http://www.codeigniter.com/user_guide/helpers/form_helper.html

<?php echo form_open('login');?>

<input name="v_item_title" placeholder="Property Title Goes Here.." value="<?php echo set_value('v_item_title'); ?>" />

<input type="checkbox" name="name_check_box"> Something <br>

<input type="submit" value="Submit"> 

<?php echo form_close();?>

Примечание: вам может потребоваться настроить пользовательские маршруты в приложении> config> routes.php

http://www.codeigniter.com/user_guide/general/routing.html

  • 0
    Спасибо за подсказку wolfgang1983, сделал, как вы предлагали, кроме пользовательской маршрутизации. Также в соответствии с monace19, я добавил <? Php echo $ this-> session-> flashdata ('v_item_title'); ?> к форме. Но на самом деле это сработало после помещения v_item_title в $ this-> session-> set_flashdata ('v_item_title', $ this-> input-> post ('MISSED')); который я пропустил, когда я отправил вопрос.
  • 0
    Еще одна вещь, знаете ли вы, как сделать то же самое для select & checkbox в этом случае?
Показать ещё 1 комментарий
1

Попробуй это

ПОСМОТРЕТЬ

<form>
<input name="v_item_title" placeholder="Property Title Goes Here.." value="<?php echo $this->session->flashdata('v_item_title'); ?>" />
<input type="submit" value="Submit">
</form>

Убедитесь, что вы загружаете библиотеку сеанса и помогаете форме

  • 0
    Привет Monace19, после добавления '<? Php echo $ this-> session-> flashdata (' v_item_title '); ?> 'Я получаю значение = массив в поле. Любое предложение?
  • 0
    Спасибо, это сработало после того, как я поместил v_item_title в $ this-> session-> set_flashdata ('v_item_title', $ this-> input-> post ('MISSED')); который я пропустил, когда я отправил вопрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню