Простой Поиск:Передача переменной формы в URI с помощью CodeIgniter

StackOverflow https://stackoverflow.com/questions/227470

  •  03-07-2019
  •  | 
  •  

Вопрос

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

http://example.com/search/KEYWORD

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

Это было полезно?

Решение

Есть лучшее решение, если вы имеете дело с людьми без включенного 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;
    }
?>

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

Другие советы

Насколько я знаю, не существует способа добиться этого с помощью простого ПОСТА.Однако вы можете получить доступ к форме через 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>

Ознакомьтесь с этим сообщением о том, как включить ПОЛУЧЕНИЕ строк запроса вместе с сегментированными URL-адресами.

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

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

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

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

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

$uri = $_SERVER['REQUEST_URI'];

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

$uri_3 = $pieces[3];

Спасибо пути!

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top