批改状态:未批改
老师批语:
主题:
写一个分页函数,封装常用操作,分页显示一张人员信息表。
使用PDO技术编写代码,封装函数。并将性别值转化成字符串,实现下拉菜单跳转并高亮显示当前页码。
运行效果:

<?php
/*
* 分页函数
*/
if (!function_exists('func_page'))
{
function func_page ($pdo, $table, $page=1, $num=5)
{
//设置分页偏移量$offset及显示条数$num
//计算偏移量公式
$offset = ($page-1) * $num;
//准备sql语句
$sql = "SELECT * FROM {$table} LIMIT {$offset}, {$num};";
//创建pdo预处理对象
$stmt = $pdo->prepare($sql);
//执行查询操作
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
//定义结果集变量(数组)
$rows = $stmt->fetchAll();
//获取查询记录总行数
$result = $pdo->query("SELECT COUNT(*) FROM {$table};");
//定义结果行数变量
$number = $result->fetch();
//获取行数值
$rowCount = $number[0];
//计算页数值(只要结果有余数则增加一页)
$pages = ceil($rowCount / $num);
//返回当前的分页结果集和总页数
return ['rows'=>$rows, 'pages'=>$pages];
}
}点击 "运行实例" 按钮查看在线实例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>信息表格页面</title>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css"/>
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.bootcss.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<style type="text/css">
a:hover, .active {
background-color:skyblue;
color:white;
}
form {
display:inline;
}
</style>
</head>
<body>
<?php
//加载函数文件
require 'lib/func_pre_page.php';
//连接数据库并创建PDO对象
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
//页面请求值判断
$page = isset($_GET['p']) ? $_GET['p'] : 1;
$num = 5;
$table = 'staff';
//调用分页函数
$data = func_page ($pdo, $table, $page, $num);
//当前分页数
$rows = $data['rows'];
//总页数
$pages = $data['pages'];
//上一页判断
$page = ($page == 0) ? 1 : $page;
//下一页判断
$page = ($page > $pages) ? $pages : $page;
?>
<h5 align="center">表格标题</h5>
<table class="table table-bordered table-hover" style="max-width:80%;text-align:center;margin:10px auto;">
<tr>
<th>ID</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>工资</th>
</tr>
<?php foreach ($rows as $row): ?>
<tr>
<td><?php echo $row['staff_id']; ?></td>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['sex'] == 0 ? '男' : '女'; ?></td>
<td><?php echo $row['age']; ?></td>
<td><?php echo $row['salary']; ?></td>
</tr>
<?php endforeach; ?>
</table>
<div align="center">
<!--判断如果是第一页就不显示上一页和首页-->
<?php if($page != 1) : ?>
<!--首页-->
<a href="http://www.php.io/work/0427/pages.php?p=1">首页</a>
<!--上一页-->
<a href="http://www.php.io/work/0427/pages.php?p=<?php echo $page-1; ?>">上一页</a>
<?php endif; ?>
<!--循环生成中间页码-->
<?php for($i=1; $i<=$pages; $i++) : ?>
<a class="<?php if($page == $i) : ?><?php echo 'active'; ?><?php endif; ?>" href="http://www.php.io/work/0427/pages.php?p=<?php echo $i; ?>"><?php echo $i; ?></a>
<?php endfor; ?>
<!--如果到最后一页就不显示下一页和尾页-->
<?php if ($page != $pages) : ?>
<!--下一页-->
<a href="http://www.php.io/work/0427/pages.php?p=<?php echo $page+1; ?>">下一页</a>
<!--尾页-->
<a href="http://www.php.io/work/0427/pages.php?p=<?php echo $pages; ?>">尾页</a>
<?php endif; ?>
<!--选择页码跳转-->
<form action="" method="get">
<span>页码</span>
<select name="p" id="p">
<?php for($i=1; $i<=$pages; $i++) : ?>
<option value="<?php echo $i; ?>" <?php if($i==$page) : ?><?php echo 'selected'; ?><?php endif ?>><?php echo $i; ?></option>
<?php endfor; ?>
</select>
<button class="btn btn-sm btn-primary">跳转</button>
</form>
</div>
</body>
</html>点击 "运行实例" 按钮查看在线实例
总结:
参考老师mysqli源代码使用PDO技术编写代码,注意代码编写过程中混编时尽量不用花括号,改写复用函数时需要注意变量替代值后的业务逻辑。记得函数要返回结果。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号