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

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

Форма:

<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{

person CodeIgniter_Learner    schedule 10.12.2015    source источник


Ответы (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();?>

Примечание. Возможно, вам потребуется установить собственные маршруты в application > config > route.php.

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

person Mr. ED    schedule 10.12.2015
comment
Спасибо за подсказку wolfgang1983, сделал как вы посоветовали, кроме пользовательской маршрутизации. Также согласно monace19 я добавил ‹?php echo $this-›session-›flashdata('v_item_title'); ?› к форме. Но на самом деле это сработало после помещения v_item_title в $this-›session-›set_flashdata('v_item_title', $this-›input-›post('MISSED')); который я пропустил, когда разместил вопрос. - person CodeIgniter_Learner; 10.12.2015
comment
Еще одна вещь, знаете ли вы, как сделать то же самое для выбора и флажка в этом случае? - person CodeIgniter_Learner; 10.12.2015
comment
Голосование будет показано, когда я достигну 15 репутации. Кстати, я уже разобрался, stackoverflow.com/questions/34207957/ - person CodeIgniter_Learner; 11.12.2015

Попробуй это

ПОСМОТРЕТЬ

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

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

person momouu    schedule 10.12.2015
comment
Привет, Monace19, после добавления '‹?php echo $this-›session-›flashdata('v_item_title'); ?›' Я получаю Value=Array в поле. Любое предложение? - person CodeIgniter_Learner; 10.12.2015
comment
Спасибо, это сработало после того, как я поместил v_item_title в $this-›session-›set_flashdata('v_item_title', $this-›input-›post('MISSED')); который я пропустил, когда разместил вопрос. - person CodeIgniter_Learner; 10.12.2015

у меня такая же проблема. я применил эту логику, и она работает для меня. Измените метод добавления и редактирования следующим образом...

public function add(){
        $college = $this->session->flashdata('data');
        $this->load->view("college_add", compact('college'));
    }
    public function edit(){
        $college_id = $this->uri->segment(3);
        if($college_id)
        {
            $college = $this->session->flashdata('data');
            if(empty($college))
            $college = $this->college->get_college_details_secure($college_id);             
            $this->load->view('college_add', compact('college'));
        }
        else
            redirect('college/add');
    }

И ваш метод сохранения перенаправляется так.

if ($this->form_validation->run() != TRUE)
{               
    $this->set_flashdata("message","Ooopps... form validation failed.".validation_errors());
    $this->session->set_flashdata('data', $this->input->post());
    if($college_id == '')
        redirect("college/add");
    else
        redirect("college/edit/$college_id");                       
}
person Kaushal Sachan    schedule 26.07.2019