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

[已解决] 表单验证类不能跟分页类存在於同一个控制器方法中?

[复制链接]
发表于 2012-6-17 22:35:07 | 显示全部楼层 |阅读模式
Contrller代码
PHP复制代码
 
        public function search_form($page=0)
        {
                        $this->load->library('session');
                        $this->load->helper(array('form', 'url'));
                        $this->load->library('form_validation');
                        $data['user_name']=$this->session->userdata('user_name');
                        $data['board_name']=$this->data_title_real;
                        $data['realname']=$this->data_title_index;
                        $data['title']=$this->data_title_search;
                        $data['description']=$this->data_description;
                        $data['more']=$this->data_more;
                        $this->form_validation->set_rules('search', '搜寻内容', 'required|trim|xss_clean|htmlspecialchars');
                        $this->form_validation->set_message('required', '<font color="red">对不起,%s栏位属於必填栏位,请重新检查。</font>');
                        $this->form_validation->set_error_delimiters('<div class="alert alert-error"><img src="img/error.png">&nbsp', '</div>');
                        if ($this->form_validation->run() == FALSE)
                                {
                        $this->load->view('header_view',$data);
                        $this->load->view('search_view');
                        $this->load->view('footer_view');
                                }
                        else
                                {
                        if(!is_numeric($page)){
                        exit;
                        }
                        $this->load->model('Question_model');
                        $this->load->database();
                        //Pagination
                        $this->load->library('pagination');
                        $config['base_url'] = '/index.php/question/search_form/';
                        $config['total_rows'] = $this->Question_model->count_search($this->input->post('search'));
                        $config['per_page'] = 10;
                        $config['first_link'] = '第一页';
                        $config['last_link'] = '最後一页';
                        $config['full_tag_open'] = '<li>';
                        $config['full_tag_close'] = '</li>';
                        $config['cur_tag_open'] = '<li><a>';
                        $config['cur_tag_close'] = '</li></a>';
                        $config['num_tag_open'] = '<li>';
                        $config['num_tag_close'] = '</li>';
                        $config['next_link'] = '下一页&raquo;';
                        $config['prev_link'] = '&laquo;上一页';
                        $data['result']=$this->Question_model->search_question($this->input->post('search'),$page,$page+10);
                        $this->pagination->initialize($config);
                        $data['pagelink'] = $this->pagination->create_links();
                        //Pagination
                        $this->load->view('header_view',$data);
                        $this->load->view('searchResult_view',$data);
                        $this->load->view('footer_view');
                                }
        }
 
复制代码


问题所在::当进入搜索结果页面时,只要点击分页类产生出来的分页连结,又会回到一开始的搜索页面,估计跟表单验证类有关,要怎麽用简洁的方法解决?
发表于 2012-6-18 19:36:29 | 显示全部楼层
如果是post 搜索,想这么分页麻烦点。

简单点用GET或者用url分段,

将get参数 存到翻页链接的segment
 楼主| 发表于 2012-6-18 20:30:24 | 显示全部楼层
loveinlove 发表于 2012-6-18 19:36
如果是post 搜索,想这么分页麻烦点。

简单点用GET或者用url分段,

CI不是一开始就把$_GET初始化了吗,用参数带过去的话中文字符会被编码,变成类似%E5%90%B3%E8%BE%B0%E6%A8%BA的东西,SQL查询自然没结果了
发表于 2012-6-19 00:28:13 | 显示全部楼层
貝殼 发表于 2012-6-18 20:30
CI不是一开始就把$_GET初始化了吗,用参数带过去的话中文字符会被编码,变成类似%E5%90%B3%E8%BE%B0%E6%A ...

CI 不会处理 $_GET,如果你用的是 2.0.0 以上的版本的话。
另外,你如果用 GET 传参,URL编码是会自动解码的,这是 PHP 的特性。
 楼主| 发表于 2012-6-19 17:20:54 | 显示全部楼层
Hex 发表于 2012-6-19 00:28
CI 不会处理 $_GET,如果你用的是 2.0.0 以上的版本的话。
另外,你如果用 GET 传参,URL编码是会自动解 ...

安全不?有木有XSS問題?
发表于 2012-6-19 17:59:20 | 显示全部楼层
貝殼 发表于 2012-6-19 17:20
安全不?有木有XSS問題?

XSS要你自己处理,或者你打开全局 XSS 过滤。
 楼主| 发表于 2012-6-19 18:52:32 | 显示全部楼层
Hex 发表于 2012-6-19 17:59
XSS要你自己处理,或者你打开全局 XSS 过滤。

表单类form_open生成出的是POST,自己寫form也可以,就怕CSRF問題
发表于 2012-6-19 19:05:15 | 显示全部楼层
貝殼 发表于 2012-6-19 18:52
表单类form_open生成出的是POST,自己寫form也可以,就怕CSRF問題

CI 可以防 CSRF 攻击,前提是你用 form_open()
 楼主| 发表于 2012-6-19 19:13:49 | 显示全部楼层
Hex 发表于 2012-6-19 19:05
CI 可以防 CSRF 攻击,前提是你用 form_open()

form_open()不能生成GET...
发表于 2012-6-19 19:17:01 | 显示全部楼层
你用个bool变量保存一下结果好了 其实验证通过了 不用每次都验证了

本版积分规则