【问题标题】:Codeigniter pagination - Array variable get empty on page 2Codeigniter 分页 - 数组变量在第 2 页为空
【发布时间】:2026-02-16 22:55:02
【问题描述】:

我正在处理搜索页面,因为搜索基于数组$s_id。一旦我使用一些输入值进行搜索,搜索结果将与分页链接一起完美显示。(分页链接也很完美。如果我有 6 个结果并且 per_page 是 2,那么它显示 3 页链接 )。

现在我的问题是,一旦我点击第 2 页显示空白页,我尝试在第 2 页打印 $s_id 然后数组显示为 Array ( [0] => ),这意味着在第 2 页上 $s_id 有一些其他值.

控制器

public function index()
        {        
        $s_id = array();
        $skills = $this->input->post('skills');
        //pagination settings
        $config['per_page'] = 2;
        $config['base_url'] = site_url('search');
        $config['first_url'] = site_url('search/').'1';
        $config['use_page_numbers'] = TRUE;
        $config['num_links'] = 3;
        $config['uri_segment'] = 2;
        $config['cur_tag_open'] = "<li><span><b>";
        $config['cur_tag_close'] = "</b></span></li>";
        $config['full_tag_open'] = '<ul class="pagination pagination-large">';
        $config['full_tag_close'] = '</ul>';
        $config['prev_tag_open'] = '<li>'; 
        $config['prev_tag_close'] = '</li>';
        $config['next_tag_open'] = '<li>';
        $config['next_tag_close'] = '</li>';
        $config['num_tag_open'] = '<li>';
        $config['num_tag_close'] = '</li>';
        $config['cur_tag_open'] = '<li class="active"><a>';
        $config['cur_tag_close'] = '</a></li>';

        $page = $this->uri->segment(2);

        $limit_end = ($page * $config['per_page']) - $config['per_page'];
        if ($limit_end < 0){
            $limit_end = 0;
        }

        if($skills == TRUE || $this->uri->segment(2) == TRUE){
            $s_id = explode(',', $skills[0]);
            if($s_id){
              $filter_session_data['skill_id_selected'] = $s_id;
            }else{
              $s_id = $this->session->userdata('skill_id_selected');
            }
            $data['skill_id_selected'] = $s_id;
            if(isset($filter_session_data)){
                $this->session->set_userdata($filter_session_data);
            }

            // print_r($s_id); exit();                     //commented
            // $s_id = array('2D Design','3D Design');     //commented

            $data['count_user'] =  $this->m_results->count_users($s_id);
            $config['total_rows'] = $data['count_user'];
            $data['freelancers'] = $this->m_results->search_people($s_id,$config['per_page'],$limit_end);
            $this->pagination->initialize($config);
            $this->load->view('include/header');
            $this->load->view('search',$data);
            $this->load->view('include/footer');
        }else{  
            $this->load->view('include/header');
            $this->load->view('search');
            $this->load->view('include/footer');
        }
}  

型号

public function search_people($s_id,$limit_start,$limit_end)
{

    $this->db->from('search_result');
    if($s_id){
        $this->db->where("FIND_IN_SET('$s_id[0]', skills) != ", 0);
        for($x=1; $x < count($s_id); $x++) {
            $this->db->or_where("FIND_IN_SET('$s_id[$x]', skills) != ", 0);
        } 
    }

    $this->db->limit($limit_start, $limit_end);
    $query = $this->db->get();
    return $query->result_array();
}


public function count_users($s_id=null)
{

    if($s_id){
        $this->db->where("FIND_IN_SET('$s_id[0]', skills) != ", 0);
        for($x=1; $x < count($s_id); $x++) {
            $this->db->or_where("FIND_IN_SET('$s_id[$x]', skills) != ", 0);
        } 
    }
    $query = $this->db->get();
    return $query->num_rows();
}  

请帮我解决这个问题。

【问题讨论】:

  • 给出第一页和第二页搜索结果的示例url(你在浏览器中看到的)
  • 首页:http://localhost:8888/codeigniter/search。第二页:http://localhost:8888/codeigniter/search/2。我认为 URL 一切正常。
  • 网址看起来不错。但是$skills = $this-&gt;input-&gt;post('skills'); - 是第 2 页的问题。看看下面我的答案

标签: php arrays codeigniter pagination


【解决方案1】:

$skills = $this-&gt;input-&gt;post('skills'); - 很重要。当您使用 post 方法提交表单时,您将获得此值。对于next page,您必须使用skills 和页码输入提交表单,而不仅仅是重定向网址。

或者

将表单提交方式改为GET。因此,您可以轻松地为下一页和上一页轻松重定向带有搜索字段值的 url。

【讨论】:

  • 如果我再添加一个输入字段(不是数组输入)并执行相同的步骤,它对所有页面的工作都是完美的。
  • 我也在使用会话用户数据。但我认为它不会影响该数组。
  • 还有一个输入字段是skills 对吗?那么应该没问题。
  • 关键字(搜索字符串)没有编号。
  • 基本上我有 3 个输入字段(关键字、技能、位置)。在这些关键字和位置工作正常但不是技能,这就是我在这里发布问题的原因。 注意:我只是从我在这里发布的整个代码中跳过关键字和位置搜索的代码。