如何修复CodeIgniter分页跳转错误:点击第2页显示第3页数据
CodeIgniter分页跳转数据错误修复方案
问题原因
你设置了$config["use_page_numbers"] = true;,此时URI中传递的是页码数(比如第2页就是2),但你直接将这个页码数作为数据库查询的OFFSET偏移量使用。当点击第2页时,偏移量传入2,数据库会从第3条记录开始取1条,导致显示第3页的数据。
修复步骤
- 正确计算数据库查询的偏移量:将页码转换为
(页码-1)*每页条数的偏移值 - 确保模型方法使用偏移值进行查询
修改后的控制器代码
$config = []; $config["base_url"] = base_url() . "news/page/"; $config["total_rows"] = $this->newsmodel->getNewsCount(); $config["per_page"] = 1; $config['uri_segment'] = 3; $config["use_page_numbers"] = true; $config["page_query_string"] = false; // 分页样式配置保持不变 $config["first_tag_open"] = '<li class="page-item">'; $config["first_tag_close"] = "</li>"; $config["prev_tag_open"] = '<li class="page-item">'; $config["prev_tag_close"] = "</li>"; $config["num_tag_open"] = '<li class="page-item">'; $config["num_tag_close"] = "</li>"; $config["prev_link"] = '<i class="fas fa-arrow-left"></i>'; $config["next_link"] = '<i class="fas fa-arrow-right"></i>'; $config["cur_tag_open"] = '<li class="page-item active"><a class="page-link active">'; $config["cur_tag_close"] = "</a></li>"; $config["next_tag_open"] = '<li class="page-item">'; $config["next_tag_close"] = "</li>"; $choice = $config["total_rows"] / $config["per_page"]; $config["num_links"] = round($choice); $this->pagination->initialize($config); // 修正页码与偏移量的转换逻辑 $page = $this->uri->segment(3, 1); // 默认页码为1,而非0 $offset = ($page - 1) * $config["per_page"]; $data["links"] = $this->pagination->create_links(); if ($data["links"] != "") { $data["pagermessage"] = "Showing " . (($this->pagination->cur_page - 1) * $this->pagination->per_page + 1) . " to " . $this->pagination->cur_page * $this->pagination->per_page . " of " . $config["total_rows"]; } // 传入偏移量而非页码到模型方法 $data["newsDetails"] = $this->newsmodel->newsList($config["per_page"], $offset); $this->load->view("news_details", $data);
确认模型方法(newsmodel.php)
确保newsList方法正确使用limit和offset参数:
public function newsList($per_page, $offset) { return $this->db->select('*') ->from('your_news_table_name') // 替换为你的实际新闻表名 ->limit($per_page, $offset) ->get() ->result(); }
验证效果
修改后:
- 初始加载(页码1):偏移量0,取第1条记录
- 点击第2页:偏移量1,取第2条记录
- 点击第3页:偏移量2,取第3条记录
- 点击第4页:偏移量3,取第4条记录
内容的提问来源于stack exchange,提问作者Vipul
相关产品推荐
相关产品推荐

