EducateYourself
EducateYourself

Reputation: 979

Codeigniter paginate search results using get method

I have a codeigniter search form which includes a dropdown list (Car) and a checkbox array (Car types). I was using POST method to get values from database but post method conflicts with pagination so I decided to use GET method. But now my 'if' statement does not work and it returns me 'else' scenario (i.e. 'search_nok' page with a message "Please select your search options"). Could you please check my code and help me to find the mistake.

Here is my controller

   public function search($offset = 0) {
                $limit = 5;

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

                $this->form_validation->set_rules('car', 'Car','required');
                $this->form_validation->set_rules('types', 'Car Type','required');

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

        $car= $this->input->get('car');
        $types = $this->input->get('types'); 

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

        $config['base_url'] = 'http://localhost/abc/cont/search/'; 

        // 'http://localhost/abc' is my base url

        $config['total_rows'] = 14;
        $config['per_page'] = 5; 

        $data['pagination'] = $this->pagination->initialize($config);

                if ($this->model_x->did_search($car, $types, $limit, $offset)){

                $data["results"] = $this->model_x->did_search($car, $types, $limit, $offset); 
                $this->load->view("search_ok",$data);           
                }          
                }
                else
                {
                $data['message'] = 'Please select your options.';   

                $this->load->view("search_nok",$data);          
                 }              
           }

Upvotes: 0

Views: 1143

Answers (1)

Kypros
Kypros

Reputation: 2986

That is because the validation class in CodeIgniter does not check for $_GET parameters and tries to validate the POST fields and finds no car or types.

To complement this with a quick fix to validate the $_GET parameters you are sending (and since you have no POST) you could set the POST array to be the same as GET therefore passing the parameters to the validation class.

$_POST = $_GET;

this should be before the validation is run:

$_POST = $_GET;
$this->form_validation->set_rules('car', 'Car','required');
$this->form_validation->set_rules('types', 'Car Type','required');

if($this->form_validation->run()) {
    // ....
}

UPDATE

To keep the search parameters across pages

Upvotes: 1

Related Questions