Codeigniter分页搜索结果从第2页开始不起作用

Codeigniter分页搜索结果从第2页开始不起作用,codeigniter,search,paginate,Codeigniter,Search,Paginate,我无法实现对搜索页面的CI分页,我的分页链接类似http://localhost/ci/search/2(第2页)等等,但是我的查询在第一次加载时可以填充搜索结果,当我在第2页之后单击时,它显示数据库中没有项目,我尝试了echo$this->db->last_query()来检查第2页中的查询,它显示了SELECT*FROM('products'),其中匹配(名称、制造商)与(“”)限制2、3如果缺少要搜索的关键字且限制值不正确,有人能告诉我代码中的错误吗 型号: public function

我无法实现对搜索页面的CI分页,我的分页链接类似
http://localhost/ci/search/2
(第2页)等等,但是我的查询在第一次加载时可以填充搜索结果,当我在第2页之后单击时,它显示数据库中没有项目,我尝试了echo
$this->db->last_query()
来检查第2页中的查询,它显示了
SELECT*FROM('products'),其中匹配(名称、制造商)与(“”)限制2、3
如果缺少要搜索的关键字且限制值不正确,有人能告诉我代码中的错误吗

型号:

public function do_search_count($keywords)
{
    $sql = "SELECT COUNT(*) AS cnt FROM products WHERE MATCH (name, manufacturer) AGAINST ('".$keywords."')";
    $q = $this->db->query($sql);
    $row = $q->row();
    return $row->cnt;
}

public function do_search($keywords, $limit, $per_page)
{
    $this->db->escape($keywords);
    $this->db->where('MATCH (name, manufacturer) AGAINST ("'.$keywords.'") LIMIT '.$limit.', '.$per_page, NULL, FALSE);
    $query = $this->db->get('products');

    if($query->num_rows() > 0){
        return $query->result();
    }else{
        return false;
    }
}

public function searchterm_handler($searchterm)
{
    if($searchterm)
    {
        $this->session->set_userdata('searchterm', $searchterm);
        return $searchterm;
    }
    elseif($this->session->userdata('searchterm'))
    {
        $searchterm = $this->session->userdata('searchterm');
        return $searchterm;
    }
    else
    {
        $searchterm = '';
        return $searchterm;
    }
}
function search()
{
    $keywords = $this->input->post('search');

    $searchterm = $this->db_model->searchterm_handler($this->input->get_post('search', TRUE));
    $limit = ($this->uri->segment(2) > 0) ? $this->uri->segment(2) : 0;

    $config['base_url'] = base_url('search');
    $config['total_rows'] = $this->db_model->do_search_count($searchterm);
    $config['per_page'] = 3;
    $config['uri_segment'] = 2;
    $config['use_page_numbers'] = TRUE;
    $choice = $config['total_rows'] / $config['per_page'];
    $config['num_links'] = round($choice);  

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

    $data['results'] = $this->db_model->do_search(trim($keywords), $limit, $config['per_page']);
    $data['pagination'] = $this->pagination->create_links();
    $data['searchterm'] = $searchterm;

    $data['total'] = count($data['results']);
    $data['title'] = 'Search';

    $this->load->view('header', $data);
    $this->load->view('search', $data);
    $this->load->view('footer', $data);
}
<div class="page-header"><h2>Search Result(s): <?php echo $total ?></h2></div>
<div>
<?php
if(is_array($results)){
    echo $this->db->last_query();
?>
<table width="40%" class="table table-hover">
    <thead>
        <tr>
            <th>Name</th>
            <th>Manufacturer</th>
            <th>Price</th>
        </tr>
    </thead>
    <?php
    foreach($results as $item){
    ?>
        <tr>
            <td><?php echo $item->name ?></td>
            <td><?php echo $item->manufacturer ?></td>
            <td><?php echo $item->price ?></td>
        </tr>
    <?php
    }
    ?>
</table>
<?php
}else{
    echo 'No items in database! '.$this->db->last_query();;
}
?>
</div>

<div><?php echo $pagination ?></div>
<div class="header-search">
            <?php
            if($this->uri->segment(1) != 'search'){
                $this->session->unset_userdata('searchterm');
                $searchterm = '';
            }

            $form_attr = array('class' => 'form-wrapper cf');
            echo form_open('search', $form_attr);
            $search_attr = array('name'=>'search', 'id'=>'search', 'value'=>$searchterm, 'placeholder'=>'company, place, keywords etc...', 'required'=>'required');
            echo form_input($search_attr);
            $btn_attr = array('name' => 'btn_search', 'id' => 'btn_search', 'type' => 'submit', 'content' => 'search');
            echo form_button($btn_attr);
            echo form_close(); ?>
            </div>
        </div>
控制器:

public function do_search_count($keywords)
{
    $sql = "SELECT COUNT(*) AS cnt FROM products WHERE MATCH (name, manufacturer) AGAINST ('".$keywords."')";
    $q = $this->db->query($sql);
    $row = $q->row();
    return $row->cnt;
}

public function do_search($keywords, $limit, $per_page)
{
    $this->db->escape($keywords);
    $this->db->where('MATCH (name, manufacturer) AGAINST ("'.$keywords.'") LIMIT '.$limit.', '.$per_page, NULL, FALSE);
    $query = $this->db->get('products');

    if($query->num_rows() > 0){
        return $query->result();
    }else{
        return false;
    }
}

public function searchterm_handler($searchterm)
{
    if($searchterm)
    {
        $this->session->set_userdata('searchterm', $searchterm);
        return $searchterm;
    }
    elseif($this->session->userdata('searchterm'))
    {
        $searchterm = $this->session->userdata('searchterm');
        return $searchterm;
    }
    else
    {
        $searchterm = '';
        return $searchterm;
    }
}
function search()
{
    $keywords = $this->input->post('search');

    $searchterm = $this->db_model->searchterm_handler($this->input->get_post('search', TRUE));
    $limit = ($this->uri->segment(2) > 0) ? $this->uri->segment(2) : 0;

    $config['base_url'] = base_url('search');
    $config['total_rows'] = $this->db_model->do_search_count($searchterm);
    $config['per_page'] = 3;
    $config['uri_segment'] = 2;
    $config['use_page_numbers'] = TRUE;
    $choice = $config['total_rows'] / $config['per_page'];
    $config['num_links'] = round($choice);  

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

    $data['results'] = $this->db_model->do_search(trim($keywords), $limit, $config['per_page']);
    $data['pagination'] = $this->pagination->create_links();
    $data['searchterm'] = $searchterm;

    $data['total'] = count($data['results']);
    $data['title'] = 'Search';

    $this->load->view('header', $data);
    $this->load->view('search', $data);
    $this->load->view('footer', $data);
}
<div class="page-header"><h2>Search Result(s): <?php echo $total ?></h2></div>
<div>
<?php
if(is_array($results)){
    echo $this->db->last_query();
?>
<table width="40%" class="table table-hover">
    <thead>
        <tr>
            <th>Name</th>
            <th>Manufacturer</th>
            <th>Price</th>
        </tr>
    </thead>
    <?php
    foreach($results as $item){
    ?>
        <tr>
            <td><?php echo $item->name ?></td>
            <td><?php echo $item->manufacturer ?></td>
            <td><?php echo $item->price ?></td>
        </tr>
    <?php
    }
    ?>
</table>
<?php
}else{
    echo 'No items in database! '.$this->db->last_query();;
}
?>
</div>

<div><?php echo $pagination ?></div>
<div class="header-search">
            <?php
            if($this->uri->segment(1) != 'search'){
                $this->session->unset_userdata('searchterm');
                $searchterm = '';
            }

            $form_attr = array('class' => 'form-wrapper cf');
            echo form_open('search', $form_attr);
            $search_attr = array('name'=>'search', 'id'=>'search', 'value'=>$searchterm, 'placeholder'=>'company, place, keywords etc...', 'required'=>'required');
            echo form_input($search_attr);
            $btn_attr = array('name' => 'btn_search', 'id' => 'btn_search', 'type' => 'submit', 'content' => 'search');
            echo form_button($btn_attr);
            echo form_close(); ?>
            </div>
        </div>
查看:

public function do_search_count($keywords)
{
    $sql = "SELECT COUNT(*) AS cnt FROM products WHERE MATCH (name, manufacturer) AGAINST ('".$keywords."')";
    $q = $this->db->query($sql);
    $row = $q->row();
    return $row->cnt;
}

public function do_search($keywords, $limit, $per_page)
{
    $this->db->escape($keywords);
    $this->db->where('MATCH (name, manufacturer) AGAINST ("'.$keywords.'") LIMIT '.$limit.', '.$per_page, NULL, FALSE);
    $query = $this->db->get('products');

    if($query->num_rows() > 0){
        return $query->result();
    }else{
        return false;
    }
}

public function searchterm_handler($searchterm)
{
    if($searchterm)
    {
        $this->session->set_userdata('searchterm', $searchterm);
        return $searchterm;
    }
    elseif($this->session->userdata('searchterm'))
    {
        $searchterm = $this->session->userdata('searchterm');
        return $searchterm;
    }
    else
    {
        $searchterm = '';
        return $searchterm;
    }
}
function search()
{
    $keywords = $this->input->post('search');

    $searchterm = $this->db_model->searchterm_handler($this->input->get_post('search', TRUE));
    $limit = ($this->uri->segment(2) > 0) ? $this->uri->segment(2) : 0;

    $config['base_url'] = base_url('search');
    $config['total_rows'] = $this->db_model->do_search_count($searchterm);
    $config['per_page'] = 3;
    $config['uri_segment'] = 2;
    $config['use_page_numbers'] = TRUE;
    $choice = $config['total_rows'] / $config['per_page'];
    $config['num_links'] = round($choice);  

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

    $data['results'] = $this->db_model->do_search(trim($keywords), $limit, $config['per_page']);
    $data['pagination'] = $this->pagination->create_links();
    $data['searchterm'] = $searchterm;

    $data['total'] = count($data['results']);
    $data['title'] = 'Search';

    $this->load->view('header', $data);
    $this->load->view('search', $data);
    $this->load->view('footer', $data);
}
<div class="page-header"><h2>Search Result(s): <?php echo $total ?></h2></div>
<div>
<?php
if(is_array($results)){
    echo $this->db->last_query();
?>
<table width="40%" class="table table-hover">
    <thead>
        <tr>
            <th>Name</th>
            <th>Manufacturer</th>
            <th>Price</th>
        </tr>
    </thead>
    <?php
    foreach($results as $item){
    ?>
        <tr>
            <td><?php echo $item->name ?></td>
            <td><?php echo $item->manufacturer ?></td>
            <td><?php echo $item->price ?></td>
        </tr>
    <?php
    }
    ?>
</table>
<?php
}else{
    echo 'No items in database! '.$this->db->last_query();;
}
?>
</div>

<div><?php echo $pagination ?></div>
<div class="header-search">
            <?php
            if($this->uri->segment(1) != 'search'){
                $this->session->unset_userdata('searchterm');
                $searchterm = '';
            }

            $form_attr = array('class' => 'form-wrapper cf');
            echo form_open('search', $form_attr);
            $search_attr = array('name'=>'search', 'id'=>'search', 'value'=>$searchterm, 'placeholder'=>'company, place, keywords etc...', 'required'=>'required');
            echo form_input($search_attr);
            $btn_attr = array('name' => 'btn_search', 'id' => 'btn_search', 'type' => 'submit', 'content' => 'search');
            echo form_button($btn_attr);
            echo form_close(); ?>
            </div>
        </div>
搜索结果:
名称
制造商
价格
位于头文件中的搜索表单视图:

public function do_search_count($keywords)
{
    $sql = "SELECT COUNT(*) AS cnt FROM products WHERE MATCH (name, manufacturer) AGAINST ('".$keywords."')";
    $q = $this->db->query($sql);
    $row = $q->row();
    return $row->cnt;
}

public function do_search($keywords, $limit, $per_page)
{
    $this->db->escape($keywords);
    $this->db->where('MATCH (name, manufacturer) AGAINST ("'.$keywords.'") LIMIT '.$limit.', '.$per_page, NULL, FALSE);
    $query = $this->db->get('products');

    if($query->num_rows() > 0){
        return $query->result();
    }else{
        return false;
    }
}

public function searchterm_handler($searchterm)
{
    if($searchterm)
    {
        $this->session->set_userdata('searchterm', $searchterm);
        return $searchterm;
    }
    elseif($this->session->userdata('searchterm'))
    {
        $searchterm = $this->session->userdata('searchterm');
        return $searchterm;
    }
    else
    {
        $searchterm = '';
        return $searchterm;
    }
}
function search()
{
    $keywords = $this->input->post('search');

    $searchterm = $this->db_model->searchterm_handler($this->input->get_post('search', TRUE));
    $limit = ($this->uri->segment(2) > 0) ? $this->uri->segment(2) : 0;

    $config['base_url'] = base_url('search');
    $config['total_rows'] = $this->db_model->do_search_count($searchterm);
    $config['per_page'] = 3;
    $config['uri_segment'] = 2;
    $config['use_page_numbers'] = TRUE;
    $choice = $config['total_rows'] / $config['per_page'];
    $config['num_links'] = round($choice);  

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

    $data['results'] = $this->db_model->do_search(trim($keywords), $limit, $config['per_page']);
    $data['pagination'] = $this->pagination->create_links();
    $data['searchterm'] = $searchterm;

    $data['total'] = count($data['results']);
    $data['title'] = 'Search';

    $this->load->view('header', $data);
    $this->load->view('search', $data);
    $this->load->view('footer', $data);
}
<div class="page-header"><h2>Search Result(s): <?php echo $total ?></h2></div>
<div>
<?php
if(is_array($results)){
    echo $this->db->last_query();
?>
<table width="40%" class="table table-hover">
    <thead>
        <tr>
            <th>Name</th>
            <th>Manufacturer</th>
            <th>Price</th>
        </tr>
    </thead>
    <?php
    foreach($results as $item){
    ?>
        <tr>
            <td><?php echo $item->name ?></td>
            <td><?php echo $item->manufacturer ?></td>
            <td><?php echo $item->price ?></td>
        </tr>
    <?php
    }
    ?>
</table>
<?php
}else{
    echo 'No items in database! '.$this->db->last_query();;
}
?>
</div>

<div><?php echo $pagination ?></div>
<div class="header-search">
            <?php
            if($this->uri->segment(1) != 'search'){
                $this->session->unset_userdata('searchterm');
                $searchterm = '';
            }

            $form_attr = array('class' => 'form-wrapper cf');
            echo form_open('search', $form_attr);
            $search_attr = array('name'=>'search', 'id'=>'search', 'value'=>$searchterm, 'placeholder'=>'company, place, keywords etc...', 'required'=>'required');
            echo form_input($search_attr);
            $btn_attr = array('name' => 'btn_search', 'id' => 'btn_search', 'type' => 'submit', 'content' => 'search');
            echo form_button($btn_attr);
            echo form_close(); ?>
            </div>
        </div>


谢谢。

这是因为您正在从$\u POST数组获取查询数据。使用链接导航到第二页时,不会再次发布搜索数据。理想情况下,您需要将搜索词保存到cookie中,并在未发布任何内容时使用它

您还可以使用函数$this->uri->assoc_to_uri($_POST)将搜索词存储在URL中,并附加到基本URL,然后使用$this->uri->uri_to_assoc()检索回数据


您还可以在

处通过分页生成搜索代码。您的代码似乎有几个问题:

首先,您的
$keywords
变量取自post数据,一旦重定向到分页页面,post数据将被清除。您需要在url字符串中传递此值,或者将其保存到会话中

其次,将post数据传递到模型
searchterm\u handler()
方法中。如上所述,在分页页面上没有要发送到方法的post数据

如果希望不将数据作为参数发送,则需要为该参数设置默认值:

public function searchterm_handler($searchterm = null)
{

}
如果不这样做,将出现如下错误:

Warning: Missing argument 1 in call to searchterm_handler() in ...

当您使用分页url时,是否可以调试控制器
search()
方法中的
$searchterm
变量?它可能没有返回值。