使用codeigniter的分页索引从sql错误中搜索结果

时间:2013-05-04 06:21:12

标签: codeigniter pagination

我有一张pagination的表格。首先,我从我的数据库中选择所有数据,pagination完美无缺。

然后,我开始过滤数据(搜索某些数据,例如:在SQL中使用WHERE)。分页的第一个索引工作正常(仅显示某些数据),但是当我点击下一个索引(第二个,第三个)时,数据将恢复为默认值(过滤器WHERELIKE正在工作。

这是用于分页的model我认为我在这里犯了错误):

public function get_umat() {
        $this->db->select('*')->from('msumat')->limit(10, $this->uri->segment(3));
        $this->db->join('mskelas', 'msumat.kelas_id = mskelas.kelas_id');

        $search = $this->input->post('ddl_search');
        $kelas = $this->input->post('ddl_kelas');
        $kelas1 = $this->input->post('ddl_kelas1');
        $kelas2 = $this->input->post('ddl_kelas2');
        $nama = $this->input->post('txt_nama');
        $alamat = $this->input->post('txt_alamat');
        $bulan = $this->input->post('ddl_bulan');
        $bulan1 = $this->input->post('ddl_bulan1');
        $bulan2 = $this->input->post('ddl_bulan2');

        if($this->input->post('btn_search')) 
        {
            if($search === 'nama')
                $this->db->like('nama', $nama);

            else if($search === 'kelas')
                $this->db->where('mskelas.kelas_id', $kelas);

            else if($search === 'range_kelas')
                $this->db->where("mskelas.kelas_id BETWEEN $kelas1 AND $kelas2");

            else if($search === 'alamat')
                $this->db->like('alamat', $alamat);

            else if($search === 'bulan_lahir')
                $this->db->where("MONTH(tanggal_lahir) = $bulan");

            else if($search === 'range_tanggal_lahir')
                $this->db->where("MONTH(tanggal_lahir) BETWEEN $bulan1 AND $bulan2");
        }

        return $this->db->get()->result();
    }

public function count_umat(){
        return $this->db->count_all('msumat');
    }

然后这是我pagination controller(我想我需要修改$config['total_rows']):

$config['base_url'] = site_url('/backend_umat/index');
        $config['total_rows'] = $this->umat_m->count_umat();
        $config['per_page'] = 10; 
        $config['uri_segment'] = 3;
        $config['full_tag_open'] = '<div id="pagination">';
        $config['full_tag_close'] = '</div>';

        $this->pagination->initialize($config); 

        $data['pagination'] = $this->pagination->create_links();

我认为问题是:

  1. 我需要COUNT $config['total_rows']
  2. 的搜索结果(针对每次搜索)
  3. 不知何故,我需要修改modelget_umat())才能让事情顺利进行
  4. 感谢任何帮助。谢谢:D

1 个答案:

答案 0 :(得分:1)

如果您想要使用多个过滤器应用搜索,它适用于第一页,ci始终查找网址段,对于第2或第3页,您需要发送您为第一页发送的所有搜索参数表单,表示您的网址应包含网址段,然后您可以过滤搜索记录,因为您没有提交第2页和第3页的表单。我建议你看一下这个教程,它有很好的方法来使用带有多个过滤器的搜索记录,并且可以完美地进行分页

CI Search on Tutorial Nettuts