Welcome Guest, Not a member yet? Register   Sign In
How to set segment to view in codeigniter after form validation fails?
#1

[eluser]Unknown[/eluser]
I am validating a form on many views that are generated by the third URL segment.

The URL: http://example.com/listings/item/12 (The 12 will change based on item)

Both my functions are below, my question is, when the validation fails how to I refresh the page with the 3rd segment and show the validation errors?

P.S: I have already tried redirect() but the validation errors don't remain.

Thank You.

This is the "item" function

Code:
public function item()
{

    if ($this->session->userdata('is_logged_in'))
    {
        $id = $this->uri->segment(3);
        $this->load->model('listings_model');

        if ($data['things']= $this->listings_model->get_item($id))
        {
            $this->load->view('list/item_view',$data);
        }
    }
    else
    {
         $this->unauth();
    }
}


This is my validation.
Code:
public function get_email()
{

    $this->load->library('form_validation');


        $this->form_validation->set_rules('captcha', 'Captcha', 'required|trim|callback_check_captcha' );


        if ($this->form_validation->run() == FALSE)
        {
           $this->item();
        }
        else
        {
            $this->load->model('listings_model');

            if ($this->listings_model->update_listing())
            {
                echo "Good";
            }

        }
}
#2

[eluser]TheFuzzy0ne[/eluser]
Welcome to the CodeIgniter forums!

As soon as you redirect, the $_POST data is not submitted to the server, and this you lose your error messages. You shouldn't redirect until after validation has passed.

Your execution flow should be something like this:

Code:
function item($id = 0)
{
// You should also check that the item exists, and react accordingly if it doesn't.
$data['things'] = $this->listings_model->get_item($id);

// Load the form validation library.
$this->load->library('form_validation');

// Set the rules.
$this->form_validation->set_rules('captcha', 'Captcha', 'required|trim|callback_check_captcha' )

// Attempt to run validation.
if (true === $this->form_validation->run()) {
  // Save to the database and redirect.
  $this->listings_model->update_listing();
  redirect('wherever');
}

// Load the view. This will be displayed when the controller is first called,
// and when validation fails.
$this->load->view('list/item_view', $data);
}

I know that the above doesn't fit in to how you're doing things, but hopefully it'll help get you started.




Theme © iAndrew 2016 - Forum software by © MyBB