用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3629|回复: 6
收起左侧

搜索表单如何传递input的值?

[复制链接]
发表于 2013-10-13 19:18:40 | 显示全部楼层 |阅读模式
我写了这个一个搜索的表单

HTML复制代码
<form id="search" method="post" action="<?php echo base_url()."search/"; ?>">    <div style="margin-top:10px;">
        <input type="text" name="s" class="text" size="60">
        <input type="submit" class="submit" value="Search">
    </div>
</form>
复制代码


现在我点击搜索打开的是地址是:http://d.hbdx.cc/search/

没有把input里面的内容传递到URL中

我希望的是搜索“音乐”,就打开http://d.hbdx.cc/search/音乐



 楼主| 发表于 2013-10-13 19:38:07 | 显示全部楼层
我将method="post"改为method="get"后打开的URL是:http://d.hbdx.cc/search/?s=音乐

怎么才可以设置成http://d.hbdx.cc/search/音乐
发表于 2013-10-13 19:54:56 | 显示全部楼层
本帖最后由 dren_a 于 2013-10-13 21:55 编辑

稍微写下:

PHP复制代码
 
//search方法有双重用途:显示搜索页面和显示搜索结果
public function search($keyword="fuck_you") //应该没有人搜这个带着下划线的奇葩词吧
//如果url传过来的参数中有后面那个参数:“/search/xxxx”,将这个值赋给$keyword;若没有参数,即“/search”,赋予$keyword值“fuck_you”
{
    if ($keyword == "fuck_you") { //
        $this->load->view('search'); //若$keyword的值是"fuck_you",显示搜索前界面
    } else { //若不是
        $data['result'] = $this->_search_keyword($keyword); //调用下面那个私有方法,返回搜索结果,赋予$data['result']。如果看不懂建议看文档。
        $this->load->view('search_result',$data); //将数据传给search_result视图,显示出搜索结果
    }
}
 
private function _search_keyword($keyword)
{
    ........... //搜索功能代码
    return "xxxx"; //进行搜索过程,返回搜索结果
}
 
复制代码


前端使用js:

JS复制代码
 
//此段需要jQuery
$('#button').click(function(){
    $('#button').attr('href','http://d.hbdx.cc/search/'+$('input#keyword').text);
});
 
复制代码


放弃自带表单功能,自己构建。当然,别忘了xss过滤哦。

**以上结果纯手打,如果错误,自己改吧......**
**2013-10-13 21:54:58 改**

评分

参与人数 1威望 +3 收起 理由
Hex + 3 赞一个!

查看全部评分

 楼主| 发表于 2013-10-13 20:04:07 | 显示全部楼层
dren_a 发表于 2013-10-13 19:54
稍微写下:

我没有看的很懂啊 大侠

意思是自带的表单实现不了我要的功能 是么?

在search的视图里面  自己写一个INPUT 和 一个BUTTON

然后BUTTON的单击调用你写的JS  去修改返回的URL  从而调用控制器么?

那在这个视图里是不是要引用JQuery库啊
 楼主| 发表于 2013-10-13 20:49:11 | 显示全部楼层
解决了 谢谢楼上的大侠提供思路

最后的做法是
HTML复制代码
<center>
<div style="margin-top:10px;">
<?php
        $this->load->helper('form');
        $input = array('name' => 's','size' => '60','class' => 'text','value' => '','id' =>'input');
        echo form_input( $input );
 
        $search = 'onClick="Search()"';
        echo form_button('Search', 'Search', $search);
?>
</div>
<script>
        function Search()
        {
                var home  = "<?php echo base_url(); ?>";
                var input = document.getElementById("input");
                window.location.href = home + "search/" + input.value;
        }
</script>
 
</center>
复制代码
发表于 2013-10-13 21:42:42 | 显示全部楼层
dolphin 发表于 2013-10-13 20:04
我没有看的很懂啊 大侠

意思是自带的表单实现不了我要的功能 是么?

对,使用jQuery。

自带的表单是不通过url提交的。

其实还有其他思路:表单提交以后,在输出搜索结果的时候,在url中输出这个查询词就可以了,这就需要一个单独的function用于显示页面、在url中显示查询词。
发表于 2013-10-13 21:44:53 | 显示全部楼层
dolphin 发表于 2013-10-13 20:49
解决了 谢谢楼上的大侠提供思路

最后的做法是

你这个混写的手法好奇葩啊。。。应该不符合MVC规范吧。。。貌似在控制器中直接就输出了HTML?

建议看视频学习,学的很快的。

我把我的那段代码加上注释吧,估计你就明白了。

本版积分规则