简单搜索:使用 CodeIgniter 将表单变量传递给 URI


Simple Search: Passing Form Variable to URI Using CodeIgniter

我的每个页面上都有一个搜索表单。如果我使用表单助手,它默认为 $_POST .我希望搜索词显示在 URI 中:

http://example.com/search/KEYWORD

我已经在谷歌上呆了大约一个小时,但无济于事。由于本机 URI 约定,我只找到了关于如何基本上禁用$_GET的文章。我不可能是第一个想要这种功能的人,对吗?提前感谢!

如果您正在与未启用 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;
    }
?>

我以前用过很多次。

据我所知,没有方法可以通过简单的 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>

查看这篇文章,了解如何启用 GET 查询字符串和分段 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不应该仍然对你可用吗?您可以像Google一样格式化URL格式:mysite.com/search?q=KEYWORD并使用$_GET['q']提取数据。

此外,搜索表单似乎是使用 POST 的坏地方;GET是可添加书签的,并不意味着服务器端正在更改某些内容。