<?php
require __DIR__ . '/mysql.php';

// 获取前端传递的页码
$page = isset($_POST['page']) ? intval($_POST['page']) : 1;

// 获取搜索关键词
$name = isset($_POST['name']) ? $_POST['name'] : '';

// 启动会话
session_start();

// 检查用户是否登录
if(!isset($_SESSION['userInfo'])){
    echo json_encode(['type' => -1]);
    die;
}

// 计算分页起始位置
$offset = ($page - 1) * 10;

// 构造SQL查询语句
if(!empty($name)){
    $sql = 'SELECT a.*,b.major_name FROM student as a join major as b on a.major_id=b.id  where a.name like '%'. $name .'%' order by a.id desc limit '. $offset .',10';
    $countSql = 'SELECT count(*) as count FROM student where name like '%'. $name .'%'';
}else{
    $sql = 'SELECT a.*,b.major_name FROM student as a join major as b on a.major_id=b.id order by a.id desc limit '. $offset .',10';
    $countSql = 'SELECT count(*) as count FROM student';
}

// 执行查询
$result = @mysqli_query($link,$sql);
$list = @mysqli_fetch_all($result,MYSQLI_ASSOC);

// 获取数据总数
$result = @mysqli_query($link, $countSql);
$count = mysqli_fetch_assoc($result);

// 计算总页数
$totalPage = ceil($count['count']/10);

// 关闭数据库连接
mysqli_close($link);

// 组装返回数据
$data = [
    'list' => $list,
    'page' => $totalPage,
    'type' => 1
];

// 返回JSON格式数据
echo json_encode($data);
die;

以下是分页的关键代码解析:

  1. 获取页码并计算偏移量:
$page = isset($_POST['page']) ? intval($_POST['page']) : 1;
$offset = ($page - 1) * 10;
  • 首先,我们使用 $_POST['page'] 获取前端传递的页码,并使用 intval() 函数将其转换为整数类型。
  • 然后,我们计算出分页的起始位置 $offset,即 (页码 - 1) * 每页显示条数
  1. 构建分页查询语句:
$sql = 'SELECT a.*,b.major_name FROM student as a join major as b on a.major_id=b.id order by a.id desc limit '. $offset .',10';
  • 在查询语句中,我们使用 limit 关键字限制查询结果的数量和起始位置。
  • $offset 表示起始位置,10 表示每页显示的条数。
  1. 计算总页数:
$totalPage = ceil($count['count']/10);
  • 我们使用 ceil() 函数向上取整,计算出总页数。

安全注意事项:

  • 使用预处理语句或参数化查询来防止SQL注入攻击。
  • 对用户输入进行验证和过滤,确保数据的安全性。
  • 不要将敏感信息(如数据库密码)直接暴露在代码中,可以使用配置文件或环境变量来存储。

希望这篇博客文章能够帮助你理解如何在PHP中实现分页功能。如果你有任何问题或建议,请随时留言。

PHP+MySQL实现分页功能 - 从入门到精通

原文地址: https://www.cveoy.top/t/topic/f1Mr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录