You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复CodeIgniter分页跳转错误:点击第2页显示第3页数据

CodeIgniter分页跳转数据错误修复方案

问题原因

你设置了$config["use_page_numbers"] = true;,此时URI中传递的是页码数(比如第2页就是2),但你直接将这个页码数作为数据库查询的OFFSET偏移量使用。当点击第2页时,偏移量传入2,数据库会从第3条记录开始取1条,导致显示第3页的数据。

修复步骤

  1. 正确计算数据库查询的偏移量:将页码转换为(页码-1)*每页条数的偏移值
  2. 确保模型方法使用偏移值进行查询

修改后的控制器代码

$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:40:08