Поиск PHP не передает запрос по URL

1

У меня есть функция поиска на моем сайте PHP (CodeIgniter). Но я хочу передать условия запроса в URL-адресе, чтобы Google Analytics могла отслеживать эту информацию. Я думаю, что это довольно просто, но я просто изучаю код.

Это мой HTML:

<form class="navbar-form navbar-right mtop10 mright10 hidden-xs" role="search" method="post" action="<?php echo base_url('cursos/searchCourse'); ?>">
            <div class="form-group">
              <input class="form-control" type="text" name="search_course" placeholder="Busque um curso" />
              <input type="hidden" name="url" value="<?php echo current_url(); ?>" />
            </div>
            <button class="btn btn-md btn-default" type="submit" value="">
                <span class="glyphicon glyphicon-search"></span>
            </button>
            <?php if($this->session->flashdata('search_error')) : ?>
                    <?php $errors = $this->session->flashdata('search_error');echo $errors['search_course']; ?>
                    <?php endif; ?>
          </form>

Это функция searchCourse:

public function searchCourse(){
    $this->load->library('form_validation');
    $this->form_validation->set_error_delimiters('<p class="alert alert-danger mtop5" role="alert">', '</p>');
    $this->form_validation->set_rules('search_course', 'Busca', 'trim|required|min_length[2]|xss_clean');
    $this->form_validation->set_message('required', 'Campo de preenchimento obrigatório');
    $this->form_validation->set_message('min_length', 'O campo precisa conter pelo menos 2 caracteres');
    if ($this->form_validation->run()){
        $search = $this->curso_model->getCoursesBySearch($this->input->post('search_course'));
        if(!empty($search)){
            $this->index($search);
        }else{
            $this->set_flashdata('search_empty', 'search_empty', $this->input->get('url'));
        }
    }else{
        $errors = array('search_course'=>form_error('search_course'));
        $this->set_flashdata('search_error', $errors, $this->input->get('url'));
    }
}

И это моя модель:

public function getCoursesBySearch($search){
    $this->db->select('*');
    $this->db->from('curso');
    $this->db->group_by('curso_nome');
    $this->db->like('curso_nome', $search);
    //$this->db->or_like('curso.curso_descricao', $search);
    //$this->db->or_like('curso.curso_categoria', $search);
    $this->db->or_like('tags.tags_nome', $search);
    $this->db->join('curso_tags', 'curso_tags.curso_id = curso.curso_id');
    $this->db->join('tags', 'tags.tags_id = curso_tags.tags_id');
    //$this->db->where('curso_status', 1);
    //$this->db->distinct();
    $this->db->distinct();
    $query = $this->db->get();
    print_r($search);
    //exit;
    return $query->result();
    }

Может ли кто-нибудь дать мне подсказку?

Ура!

  • 0
    используйте метод get для этого. Изменить пост, чтобы получить в вашей форме
  • 0
    проверьте это в config.php $config['enable_query_strings'] = TRUE;
Показать ещё 3 комментария
Теги:
codeigniter

2 ответа

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

Используйте jquery для динамического изменения атрибута action. Назначить id attritube каждому из элементов формы, включая форму

HTML:

<form id="my_form"  method="post" action="dummy.html">
     <input id="search_text" type="text" name="search_course" placeholder="Busque um curso" />
     <input type="hidden" name="url" value="sdff" />
     <button id="my_button" type="submit" value="Submit"> </button>

</form>

JQuery: (Добавить ниже вашей формы)

 <script>
     $('#my_button').click(function(){
         var search_text = $("#search_text").val();
         // Replace my_search.php with actual landing page
         $('#my_form').attr('action', 'my_search.php' + '?search=' + search_text);
     });
 </script>

Примечание. Текст поиска будет декодирован по URL (в случае пробелов и т.д.), И вы расшифруете URL-адрес на целевой странице.

  • 0
    Я пробовал, и это работает! Спасибо @Makesh! С точки зрения передового опыта, было бы лучше использовать метод get или это тоже хорошо?
  • 0
    Предположим, у вас есть hidden поле ввода, в котором содержится некоторая конфиденциальная информация (пароль, идентификатор сеанса, приоритет), которая может понадобиться на целевой странице. В таком случае GET предоставит эту информацию в URL. Если вы хотите использовать POST и в то же время you want alter the URL , то это лучшее решение.
0

Измените метод из post, чтобы получить, поэтому значения будут в URL:

<form class="navbar-form navbar-right mtop10 mright10 hidden-xs" role="search" method="post" action="<?php echo base_url('cursos/searchCourse'); ?>">

заменить:

<form class="navbar-form navbar-right mtop10 mright10 hidden-xs" role="search" method="get" action="<?php echo base_url('cursos/searchCourse'); ?>">
  • 0
    Не рекомендуется . Обратите внимание на скрытый ввод в форме. Это также будет видно, если вы перейдете на GET
  • 0
    Спасибо, Херу! Но, видимо, после этого поиск перестал работать. Я перенаправлен на мою домашнюю страницу ...
Показать ещё 5 комментариев

Ещё вопросы

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