<?php
require_once('db.php');
$sql = "select count(*) from goods";//数据总数
$totalRows = get_one($sql);//总行数,get_one,自己封装的函数:查询一个数据 $totalRows值为31
$pageStr = '';
$listRows = 5;//每页显示5行数据
$totalPages = ceil($totalRows/$listRows);//全部页数
$nowPage = isset($_GET['p']) && intval($_GET['p']) > 0 ? intval($_GET['p']):1;
//获取当前页
//isset()函数用于检测变量是否已设置并且非NULL。
//intval取整,如果用户不是点击下一页,而是自己在搜索框中输入负数或者字母,直接跳转到首页
//但是如果输入的数字超过总页数的话,这行代码不能跳转到首页,所以在下面判断:
//如果当前页码大于总页数,就跳转到尾页$totalPages,如果不大于,就留在本页
//$nowPage = $nowPage > $totalPages?$totalPages:$nowPage;
$nowPage = min($nowPage, $totalPages);
//min()函数返回一个数组中的最小值,或者几个指定值中的最小值。
//这一种和上面$nowPage = $nowPage > $totalPages?$totalPages:$nowPage;都能实现
//通过上面的三目运算和这里的两种方法中的一种,可以保证用户无论是输入过大过小的数字还是字母都不会出错
//$prevPage = $nextPage = $nowPage;下面的两个if判断,也可以不写else
//但是要先初始化(写)这一句,如果 上一页 = 下一页 = 当前页,就留在当前页(不作任何操作)
//判断,如果是尾页,点击上一页就留在当前页面
//当$nowPage > 1 $nowPage < $totalPages时,首页、上一页、下一页、尾页全部输出,因为全部满足条件
if($nowPage > 1){
$prevPage = $nowPage-1;
$pageStr .= '<a href="?p=1">首页</a>';// .=将右边参数附加到左边的参数之后
$pageStr .= '<a href="?p='.$prevPage.'">上一页</a>';
//将$pageStr在下方页面中输出
//如果到达尾页,将只显示首页和上一页按钮
}else{
$prevPage = $nowPage;
}
/*
页码分页显示效果设计:
1 [2] 3 4
1 2 [3] 4 5 ==> 3-2 3-1 [3] 3+1 3+2
2 3 [4] 5 6 ==> 4-2 4-1 [4] 4+1 4+2
4 5 [6] 7
*/
//页码分页显示效果设计:前半部分
for($i=2; $i>0; $i--){
$page = $nowPage - $i;
if($page > 0){
$pageStr .= '<a href="?p='.$page.'">'.$page.'</a>';
}
}
$pageStr .= "<a class='current'>{$nowPage}</a>";
//页码分页显示效果设计:后半部分
for($i=1; $i<=2; $i++){
$page = $nowPage + $i;
if($page <= $totalPages){
$pageStr .= '<a href="?p='.$page.'">'.$page.'</a>';
}
}
//判断,如果是第一页,点击下一页就留在当前页面
if($nowPage < $totalPages){
$nextPage = $nowPage+1;//下一页
$pageStr .= '<a href="?p='.$nextPage.'">下一页</a>';
$pageStr .= '<a href="?p='.$totalPages.'">尾页</a>';
}else{
$nextPage = $nowPage;
}
$firstRow = ($nowPage-1)*$listRows;//起始行从0开始
$sql = "select goods_id, goods_name, shop_price, goods_number from goods limit $firstRow,$listRows";
//这里用函数设置起始行和每页显示数量,如果直接给数字就写死了
$list = get_all($sql);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>商品列表</title>
<style>
.page a{
text-decoration: none;
color: #333;
display: inline-block;
height: 24px;
line-height: 24px;
padding: 0 5px; /* 撑开边距 */
font-family: "微软雅黑";
font-size: 12px;
border: 1px solid orange;
margin-right: 5px;
background: skyblue;
}
.page a.current, /* 给当前页设置颜色 高亮显示当前页码*/
.page a:hover{
color: orange;
background: white;
}
</style>
</head>
<body>
<h3 align="center">商品列表</h3>
<hr size="10" color="gray" />
<table align="center" width="100%" border="1" cellspacing="0" cellspadding="3"><!-- cellspacing单元格间距 cellpadding单元格边距 -->
<tr>
<th>ID</th>
<th>名称</th>
<th>本店价格</th>
<th>库存</th>
</tr>
<?php
foreach($list as $v){
?>
<tr align="center">
<td><?php echo $v['goods_id'];?></td>
<td><?php echo $v['goods_name'];?></td>
<td><?php echo $v['shop_price'];?></td>
<td><?php echo $v['goods_number'];?></td>
</tr>
<?php
}
?>
<tr height="36">
<td colspan="4" align="right">
<div class="page"><?php echo $pageStr; ?></div>
</td>
</tr>
</table>
</body>
</html>
![](https://img.haomeiwen.com/i10629340/f6e3b2f3e9cfddc1.png)
//自定义函数库
function page($totalRows, $listRows=5){//封装分页函数
$pageStr = '';
$totalPages = ceil($totalRows/$listRows);//全部页数
if($totalPages <= 1){
//如果数据一页就够显示,就不再输出页码和首页、尾页
return ['firstRow' => 0, 'listRows' => $listRows, 'pageStr' => $pageStr];
}
$nowPage = isset($_GET['p']) && intval($_GET['p']) > 0 ? intval($_GET['p']):1;
//获取当前页
//isset()函数用于检测变量是否已设置并且非NULL。
//intval取整,如果用户不是点击下一页,而是自己在搜索框中输入负数或者字母,直接跳转到首页
//但是如果输入的数字超过总页数的话,这行代码不能跳转到首页,所以在下面判断:
//如果当前页码大于总页数,就跳转到尾页$totalPages,如果不大于,就留在本页
//$nowPage = $nowPage > $totalPages?$totalPages:$nowPage;
$nowPage = min($nowPage, $totalPages);
//min()函数返回一个数组中的最小值,或者几个指定值中的最小值。
//这一种和上面$nowPage = $nowPage > $totalPages?$totalPages:$nowPage;都能实现
//通过上面的三目运算和这里的两种方法中的一种,可以保证用户无论是输入过大过小的数字还是字母都不会出错
//$prevPage = $nextPage = $nowPage;下面的两个if判断,也可以不写else
//但是要先初始化(写)这一句,如果 上一页 = 下一页 = 当前页,就留在当前页(不作任何操作)
//判断,如果是尾页,点击上一页就留在当前页面
//当$nowPage > 1 $nowPage < $totalPages时,首页、上一页、下一页、尾页全部输出,因为全部满足条件
if($nowPage > 1){
$prevPage = $nowPage-1;
$pageStr .= '<a href="?p=1">首页</a>';// .=将右边参数附加到左边的参数之后
$pageStr .= '<a href="?p='.$prevPage.'">上一页</a>';
//将$pageStr在下方页面中输出
//如果到达尾页,将只显示首页和上一页按钮
}else{
$prevPage = $nowPage;
}
/*
页码分页显示效果设计:
1 [2] 3 4
1 2 [3] 4 5 ==> 3-2 3-1 [3] 3+1 3+2
2 3 [4] 5 6 ==> 4-2 4-1 [4] 4+1 4+2
4 5 [6] 7
*/
//页码分页显示效果设计:前半部分
for($i=2; $i>0; $i--){
$page = $nowPage - $i;
if($page > 0){
$pageStr .= '<a href="?p='.$page.'">'.$page.'</a>';
}
}
$pageStr .= "<a class='current'>{$nowPage}</a>";
//页码分页显示效果设计:后半部分
for($i=1; $i<=2; $i++){
$page = $nowPage + $i;
if($page <= $totalPages){
$pageStr .= '<a href="?p='.$page.'">'.$page.'</a>';
}
}
//判断,如果是第一页,点击下一页就留在当前页面
if($nowPage < $totalPages){
$nextPage = $nowPage+1;//下一页
$pageStr .= '<a href="?p='.$nextPage.'">下一页</a>';
$pageStr .= '<a href="?p='.$totalPages.'">尾页</a>';
}else{
$nextPage = $nowPage;
}
$firstRow = ($nowPage-1)*$listRows;//起始行从0开始
return ['firstRow' => $firstRow, 'listRows' => $listRows, 'pageStr' => $pageStr];//return返回多个值就用数组返回
}
<?php
require_once('db.php');
require_once('function.php');
$sql = "select count(*) from goods";//数据总数
$totalRows = get_one($sql);//总行数,get_one,自己封装的函数:查询一个数据 $totalRows值为31
$page = page($totalRows);//调用函数中才会起作用
$sql = "select goods_id, goods_name, shop_price, goods_number from goods limit {$page['firstRow']}, {$page['listRows']}";
//这里用函数设置起始行和每页显示数量,如果直接给数字就写死了
$list = get_all($sql);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>商品列表</title>
<style>
.page a{
text-decoration: none;
color: #333;
display: inline-block;
height: 24px;
line-height: 24px;
padding: 0 5px; /* 撑开边距 */
font-family: "微软雅黑";
font-size: 12px;
border: 1px solid orange;
margin-right: 5px;
background: skyblue;
}
.page a.current, /* 给当前页设置颜色 高亮显示当前页码*/
.page a:hover{
color: orange;
background: white;
}
</style>
</head>
<body>
<h3 align="center">商品列表</h3>
<hr size="10" color="gray" />
<table align="center" width="100%" border="1" cellspacing="0" cellspadding="3"><!-- cellspacing单元格间距 cellpadding单元格边距 -->
<tr>
<th>ID</th>
<th>名称</th>
<th>本店价格</th>
<th>库存</th>
</tr>
<?php
foreach($list as $v){
?>
<tr align="center">
<td><?php echo $v['goods_id'];?></td>
<td><?php echo $v['goods_name'];?></td>
<td><?php echo $v['shop_price'];?></td>
<td><?php echo $v['goods_number'];?></td>
</tr>
<?php
}
?>
<tr height="36">
<td colspan="4" align="right">
<div class="page"><?php echo $page['pageStr']; ?></div>
</td>
</tr>
</table>
</body>
</html>
<?php
//自定义函数库
//之前的函数把样式写死了,可以写的更灵活
//分页函数封装
function page($totalRows, $listRows=5, $config=[]){//把要灵活使用的几个样式封成一个数组传过来
$pageStr = '';
$totalPages = ceil($totalRows/$listRows);//取最小整数
if($totalPages <= 1){//在第一页时不显示分页
return ['firstRow'=>0, 'listRows'=>$listRows, 'pageStr'=>$pageStr];//return后面的代码不会被执行,所以只要return就可以了,不要else
}
$header = !empty($config['header'])?$config['header']:'首页';
$prev = !empty($config['prev'])?$config['prev']:'上一页';
$next = !empty($config['next'])?$config['next']:'下一页';//使用文字显示下一页还是自定义设置下一页的样式
$end = !empty($config['end'])?$config['end']:'尾页';
$theme = !empty($config['theme'])?$config['theme']:'%header% %upPage% %linkPage% %downPage% %end%';//%是占位,最终生成的样式就是这样的,替换之后在调用这个函数之后,可以随意更换5个元素位置达到作为一个模板的作用
$nowPage = isset($_GET['p']) && intval($_GET['P'])>0?intval($_GET['p']):1;//当前页码
//$nowPage = $nowPage > $totalPages;?$totalPages:$nowPage;这种写法和下面的写法一样
$nowPage = min($nowPage, $totalPages);//返回最小值
$firstRow = ($nowPage-1)* $listRows;//起始行数
$headerPage = $linkPage = $upPage = $downPage = $endPage = '';//赋初值,不赋值的话会报notice错误
if($nowPage > 1)
{
$prevPage = $nowPage-1;
$headerPage = '<a href="?p=1">'.$header.'</a>';
$upPage = '<a href="?p='.$prevPage.'">'.$prev.'</a>';
}
$linkPage = '';
/*
页码分页显示效果设计:
1 [2] 3 4
1 2 [3] 4 5 ==> 3-2 3-1 [3] 3+1 3+2
2 3 [4] 5 6 ==> 4-2 4-1 [4] 4+1 4+2
4 5 [6] 7
*/
//页码分页显示效果设计:前半部分
for($i=2; $i>0; $i--){
$page = $nowPage - $i;
if($page > 0){
$pageStr .= '<a href="?p='.$Page.'">'.$page.'</a>';
}
}
$linkPage .= "<a class='current'>{$nowPage}</a>";
//页码分页显示效果设计:后半部分
for($i=1; $i<=2; $i++){
$page = $nowPage + $i;
if($page <= $totalPages){
$linkPage .= '<a href="?p='.$Page.'">'.$page.'</a>';
}
}
if($nowPage < $totalPages)
{
$nextPage = $nowPage+1;//下一页
$downPage = '<a href="?p='.$nextPage.'">'.$next.'</a>';
$endPage = '<a href="?p='.$totalPages.'">'.$end.'</a>';
}
//'%header% %upPage% %linkPage% %downPage% %end%'
$pageStr = str_replace(['%header%', '%upPage%', '%linkPage%', '%downPage%', '%end%'], [$headerPage, $upPage, $linkPage, $downPage, $endPage], $theme);
//这样写可以将这5个元素随机设置显示顺序
//将5个带有占位符的元素和5个变量一一对应起来,这样在调用这个函数的时候,他就是一个模板的作用5个元素的位置可以随便改而不会出错,
return ['firstRow'=>$firstRow, 'listRows'=>$listRows, 'pageStr'=>$pageStr];
}
//以上代码是分页函数封装
?>
<?php
require_once('study.php');
require_once('function.php');//加载封装好的分页函数库
$sql = "select count(*) from goods";
$totalRows = get_one($sql);//获取总行数
$config = ['next'=>'>>', 'prev'=>'<<', 'theme' = '%header% %upPage% %linkPage% %downPage% %end%'];//调用封装好的函数,给定要修改的样式参数,上一页下一页不用文字,用符号显示,不给这个参数的话,就使用默认参数
//theme就是模板,这5个元素可以随意调换位置,直接改参数就可以
$page = page($totalRows, 5, $config);//调用封装好的函数
$sql = "select goods_id, goods_name, sop_price, goods_number from goods limit {$page['firstRow']}, {$page['listRows']}";//查询;每页显示条数
$list = get_all($sql);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>商品列表</title>
<style>
.page a{
text-decoration: none;
color: #fff;
display: inline-block;
height: 24px;
line-height: 24px;
padding: 0 5px;
font-family: "微软雅黑";
font-size: 12px;
border: 1px solid #dfdfdf;
margin-right: 5px;
background: #f5f5f5;
}
.page a.current, /* 给当前页设置颜色 高亮显示当前页码*/
.page a:hover{
color: orange;
background: #00cc00;
}
</style>
</head>
<body>
<h3 align="center">商品列表</h3>
<hr size="10" color="gray" />
<table align="center" width="1200" border="1" cellspacing="0" cellpadding="3"><!-- cellspacing单元格间距 cellpadding单元格边距 -->
<tr>
<th>ID</th>
<th>名称</th>
<th>本店价格</th>
<th>库存</th>
</tr>
<?php
foreach($list as $v){
?>
<tr align="center">
<td><?php echo $v['goods_id'];?></td>
<td><?php echo $v['goods_name'];?></td>
<td><?php echo $v['shop_price'];?></td>
<td><?php echo $v['goods_number'];?></td>
</tr>
<?php
}
?>
<tr height="36">
<td colspan="4" align="right">
<div class="page"><?php echo $page['pageStr']]; ?></div>
</td>
</tr>
</table>
</body>
</html>
网友评论