早在做java EE项目的时候就意识到分页并不容易做,甚至项目有了分页功能就有了一个很大的卖点,通过今天下午的学习,理解并掌握了运用php+mysql实现分页的方法

先附上分页效果:

分页效果

首先要明确的一点是分页功能的实现主要借助于mysql的select limit语句;

这里的limit的功能就在于限定显示的记录数

如果limit后跟一个数x即限定显示的记录数,若跟两个数x,y 则x表示开始的记录数,y表示记录的个数

因此我们可以限定每页显示的记录数,然后设定一个参数p代表页数

我们用p来传递当前页面数值,从而实现分页功能

接下来就很简单了,制作按钮,当然这里有些细节要注意,例如

1、跳转到首页后,不能再选择跳转到上一页

2、页面过多时显示的页码数要随之而改变

下面直接附上代码及注释希望对有需要的朋友有所帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<style>
body {
font-size: 16px; font-family:verdana; width:100%;
}
div.page {
text-align:center;
}
div.content {
height: 300px;
}
div.page a{
border:#aaaadd 1px solid; text-decoration:none; padding: 2px 5px 2px 5px; margin:2px;
}
div.page span.current {
border:#0000099 1px solid; background-color:#000099; padding:4px 6px 4px 6px; margin:2px; color:#fff; font-weight:bold;
}
div.page span.disable {
border:#eee 1px solid; padding:2px 5px 2px 5px; margin:2px; color:#ddd;
}
div.page form {
display:inline;
}
</style>
</head>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<body>
<?php
//echo "<pre>";
//print_r($_SERVER);
$page = $_GET['p']; //page代表当前页面数
$host = "localhost";
$username = "root";
$password = "root";
$db = "test";
$pageSize = 10; //每页显示的记录数
$showPage = 5; //要显示的页码数
echo "<h1 align='center'>分页显示结果</h1><br/>";
//建立mysql连接
$conn = mysql_connect($host, $username, $password);
if(!$conn) {
echo "failed connect";
exit;
}
//选择数据库以及设置编码
mysql_select_db($db);
mysql_query("SET NAME UTF8");
//向数据库中添加数据
/*
for($i=2; $i<1000; ++$i) {
$name = "'name".$i."'";
$sql = "insert into page values (" .$i.", ".$name.")";
$result = mysql_query($sql);
}
*/
//限定从10的整数倍记录开始(如第0、10、20...条),并每页显示10条记录
$sql = "select * from page limit ".($pageSize*($page-1)).", ".$pageSize;
$result = mysql_query($sql);
//输出从数据库读取的结果
echo "<div class='content'>";
echo '<table align="center" border=1 cellspacing=0 width=40%>';
echo "<tr><td align='center'>ID</td><td align='center'>NAME</td></tr>";
while($row = mysql_fetch_assoc($result)) {
echo '<tr>';
echo "<td align='center'>{$row['id']}</td>";
echo "<td align='center'>{$row['name']}</td>";
echo "</tr>";
}
echo '</table>';
echo '</div>';
//num_sql : 总记录
//num_result : 总记录
//num : 按每页pageSize条记录显示可分num页
$num_sql = 'select count(*) from page';
$num_result = mysql_fetch_array(mysql_query($num_sql));
$num = $num_result[0];
$num = ceil($num/$pageSize); //页数需要向上取整,保证最后一页可以显示少于10条的记录
//释放并关闭连接
mysql_free_result($result);
mysql_close($conn);
$page_banner = "<div class='page'>";
//计算左右两侧偏移量
$pageOffset = ($showPage - 1) / 2;
//当前停留在第一页时隐藏首页以及上一页按钮
if($page > 1) {
$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=1'>首页</a>";
$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'><上一页</a>";
} else {
$page_banner .= "<span class='disable'>首页</a></span>";
$page_banner .= "<span class='disable'>上一页</a></span>";
}
//设置页面显示的左侧以及右侧
$start = 1;
$end = $num;
if($num > $showPage) {
if($page > $pageOffset+1) { //从pageOffset+2开始左侧要显示...
$page_banner .= '...';
}
if($page > $pageOffset) {//设定要显示的页码范围
$start = $page-$pageOffset;
$end = $num > $page+$pageOffset ? $page+$pageOffset : $num;
} else {
$start = 1;
$end = $num > $showPage ? $showPage : $num;
}
//确保显示合理页数
if($page + $pageOffset > $num) {
$start = $start - ($page + $pageOffset - $end);
}
}
//对当前页面页码做高亮处理
for($i=$start; $i<=$end; ++$i) {
if($page == $i) {
$page_banner .= "<span class='current' >{$i}</span>";
} else {
//为各个页码设置对应的超链接
$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=".($i)."'>".$i."</a>";
}
}
if($num > $showPage && $num > $page+$pageOffset) {
$page_banner .= "...";
}
if($page < $num) {
$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>下一页></a>";
$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=".($num)."'>尾页</a>";
} else {
$page_banner .= "<span class='disable'>下一页</a></span>";
$page_banner .= "<span class='disable'>尾页</a></span>";
}
echo $page_banner;
echo "共{$num}页";
//设置页面跳转,把输入的变量值传递给p即可
$page_banner = "<form action='mypage.php' method='get'>";
$page_banner .= "到第<input type='text' size='2' name='p'>";
$page_banner .= "<input type='submit' value='确定'>";
$page_banner .= "</form></div>";
echo $page_banner;
?>
</body>
</html>