2014-10-19 5 views
0

У меня есть форма поиска кода, которая включает раскрывающийся список (Car) и массив флажков (типы автомобилей). Я использовал метод POST для получения значений из базы данных, но столбец конфликтует с разбиением на страницы, поэтому я решил использовать метод GET. Но теперь мой оператор «if» не работает и возвращает сценарий «else» (например, «search_nok» с сообщением «Пожалуйста, выберите варианты поиска»). Не могли бы вы проверить мой код и помочь мне найти ошибку.Codeigniter paginate search results using get method

Вот мой контроллер

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);   
       }    
      } 
+0

возможный дубликат [CodeIgniter Validation: возможность для проверки строки GET запроса ?] (http://stackoverflow.com/questions/10883949/codeigniter-validation-possible-to-validate-get-query-strings) – Alex

+0

нет это другой вопрос – EducateYourself

+0

такой же вопрос. Вы пытаетесь проверить форму, полученную через '$ _GET'. На SO есть как минимум 3 одинаковых вопроса. – Alex

ответ

1

Это происходит потому, что класс проверки в CodeIgniter не проверяет $_GET параметров и пытается проверить POST поля и не находит car или types.

В дополнение к этому с быстрым исправлением для проверки $_GET параметров вы отправляете (и так как у вас нет POST) вы можете установить POST массив, чтобы быть таким же, как GET поэтому передавая параметры класса валидации.

$_POST = $_GET; 

это должно быть до того, как проверка выполняется:

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

Чтобы сохранить search parameters across pages

+0

Спасибо за помощь. Я очень ценю это. Я просто добавил $ _POST = $ _GET; и теперь код работает точно так же, как и в прошлом, т.е. он отображает первую страницу правильно, но когда я нажимаю на вторую страницу, параметры поиска исчезают из URL-адреса, и я получаю оператор «else» – EducateYourself

+0

Это означает, что по вашему мнению ваша ссылка делает не включайте смещение или страницу, на которой вы сейчас находитесь, чтобы она могла рассчитать «следующую» страницу, когда контроллер снова вызван. Это либо то, или если у вашего представления есть это, чем проблема в вашей '$ this-> model_x-> did_search', не отправляющей правильные' $ data' в вид – Kypros

+0

при первой загрузке результатов URL: ** http: // localhost/abc/cont/search? country = Mazda & types% 5B% 5D = sedan & filterSearch = Поиск ** При попытке загрузить вторую страницу URL-адрес ** http: // localhost/abc/cont/search/5 ** Интересно, почему автомобиль и типы не включены в url для следующей страницы. – EducateYourself