2008-10-22 2 views
3

У меня есть форма поиска на каждой из моих страниц. Если я использую хелпер формы, он по умолчанию равен $_POST. Я хотел бы слово для поиска, чтобы показать в URI:Простой поиск: передача переменной формы в URI с помощью CodeIgniter

http://example.com/search/KEYWORD 

Я был на Google в течение примерно часа, но безрезультатно. Я только нашел статьи о том, как $_GET в основном отключен из-за родного соглашения URI. Я не могу быть первым, кто захочет такую ​​функциональность, не так ли? Заранее спасибо!

ответ

5

Лучшее решение, если вы имеете дело с людьми без JS.

Вид:

<?php echo form_open('ad/pre_search');?> 
    <input type="text" name="keyword" /> 
</form> 

Контроллер

<?php 
    function pre_search() 
    { 
     redirect('ad/search/.'$this->input->post('keyword')); 
    } 

    function search() 
    { 
     // do stuff; 
    } 
?> 

Я использовал это много раз прежде.

-2

Я мало знаю о CodeIgniter, но это PHP, поэтому не должно быть $_GET? Вы можете отформатировать свой URL так же, как это делает Google: mysite.com/search?q=KEYWORD и вытащить данные с помощью $_GET['q'].

Кроме того, форма поиска кажется плохим местом для использования POST; GET является закладок и не означает, что что-то меняется на стороне сервера.

+0

№. «GET» отключен в Codeigniter – jmccartie 2008-10-22 20:54:37

+0

, но вы можете включить его – 2008-11-26 01:41:30

3

Насколько я знаю, нет способа выполнить это с помощью простого POST. Однако вы можете получить доступ к форме через Javascript и обновить пункт назначения. Например:

<form id="myform" onsubmit="return changeurl();" method="POST"> 
<input id="keyword"> 
</form> 

<script> 
function changeurl() 
{ 
    var form = document.getElementById("myform"); 
    var keyword = document.getElementById("keyword"); 

    form.action = "http://mysite.com/search/"+escape(keyword.value); 

    return true; 
} 
</script> 
+0

здесь с Codeigniter - апострофа в строке поиска не будет принята библиотекой CI URI: «В URI, который вы отправили, были запрещены символы». – jmccartie 2009-04-22 21:40:45

0

Отметьте это сообщение о том, как включить строки запроса GET вместе с сегментированными URL-адресами.

http://codeigniter.com/forums/viewthread/56389/#277621

После включения, которые вы можете использовать следующий метод для получения дополнительных переменных.

// url = http://example.com/search/?q=text 
$this->input->get('q'); 

Это лучше, потому что вам не нужно изменять настройку конфигурации allowed_uri_chars. Вы можете получить сообщение об ошибке «URI, который вы отправили, отклонили символы», если вы просто поместите что-либо, что пользователь вводит в URI.

0

Вот лучшее решение:

$uri = $_SERVER['REQUEST_URI']; 

$pieces = explode("/", $uri); 

$uri_3 = $pieces[3]; 

erunways Спасибо!

Смежные вопросы