1 <?php
2 /**
3 * PHP+Mysql实现分页
4 * **/
5 ?>
6 <html>
7 <head>
8 <meta http-equiv="Content-type" content="text/html;charset=utf-8">
9 </head>
10
11 <style>
12 /* <!-- 设置body体内的字体样式与大小--> */
13 body{
14 font-size:12px;FONT-FAMILY:verdana;width:100%;
15 }
16 /* <!-- 样式设计 page的div居中 --> */
17 div.page{
18 text-align:center;
19 }
20 /* <!-- 设置page的div下的a标签 --> */
21 div.page a{
22 border :#aaaadd 1px solid;text-decoration:none;padding:2px 5px 2px 5px;margin:2px;
23 }
24 /* <!-- 设置当前页中页码的样式 --> */
25 div.page span.current{
26 border:#000099 1px solid;background-color:#000099;padding:4px 6px 4px 6px;margin:2px;color:#fff;
27 font-weight:bold;
28 }
29 /* <!-- 当连接失效时的样式 --> */
30 div.page span.disable{
31 border:#eee 1px solid;padding:2px 5px 2px 5px;margin:2px;color:#ddd;
32 }
33 /* <!-- page的div中的form里的内容放在一行 --> */
34 div.page form{
35 display:inline;
36 }
37 /* <!-- 设置content块的高度 使内容与页码分离 --> */
38 div.content{
39 height:300px;
40 }
41 </style>
42
43 <body>
44 <?php
45 /* echo "<pre>";
46 print_r($_SERVER); */
47 /**1、传入页码**/
48 $page = $_GET['p'];//用GET方法得到页码
49 /**2、根据页码取出数据:php->mysql的处理**/
50 //配置项
51 $host = "localhost"; //数据库地址
52 $username = "root"; //登录用户名
53 $password = ""; //密码
54 $db = "test"; //所用数据库
55 $pageSize = 10; //每一页的内容数量
56 $showPage = 5; //能直接显示的页码数量
57 //连接数据库
58 $conn = mysql_connect($host,$username,$password);
59 if(!$conn){
60 echo "数据库连接失败";
61 }
62 //选择数据库
63 mysql_select_db($db);
64 //设置编码格式
65 mysql_query("SET NAMES UTF8");
66 //编写sql获取分页数据select *from 表名 limit 起始位置,显示条数
67 $sql = "SELECT * FROM page LIMIT ".(($page - 1) * $pageSize).", $pageSize";
68
69 //执行sql语句后得到资源句柄
70 $result = mysql_query($sql);
71 //var_dump($result);
72
73 //为一个div块,放置网页内容
74 echo "<div class='content'>";
75 echo "<table border = 1 cellspacing = 0 width = 40% align=center>";
76 echo "<tr><td>ID</td><td>NAME</td></tr>";
77 //通过循环将从数据库中的数据输出
78 while($row = mysql_fetch_assoc($result)){
79 echo "<tr>";
80 echo "<td>{$row['id']}</td>";
81 echo "<td>{$row['name']}</td>";
82 echo "</tr>";
83 }
84 echo "</table>";
85 echo "</div>";
86
87 //释放结果,关闭连接
88 mysql_free_result($result);
89 //获取数据总数
90 $total_sql = "SELECT COUNT(*) FROM page";
91 $total_result = mysql_fetch_array(mysql_query($total_sql));
92 $total = $total_result[0];
93 //计算出总的页码数
94 $total_pages = ceil($total/$pageSize);
95
96 mysql_close($conn);
97 /**3、显示数据 + 分页条 **/
98 //初始化分页条,并放入div块中
99 $page_banner = "<div class='page'>";
100 //计算偏移量
101 $pageOffset = ($showPage - 1)/2; //根据显示页码数计算偏移量
102
103 //如果在第一页则隐藏首页与上一页
104 if($page > 1){
105 $page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=1'>首页</a>";
106 $page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'><上一页</a>";
107 }else{
108 $page_banner .= "<span class='disable'>首页</a></span>";
109 $page_banner .= "<span class='disable'><上一页</a></span>";
110 }
111
112 //初始化数据
113 $start = 1; //能够直接选定的页码的首位
114 $end = $total_pages; //能够直接选定的页码的末位
115 //如果总页数大于显示的页数,进行隐藏,分两种情况
116 if($total_pages > $showPage) {
117 //头部省略
118 if($page > $pageOffset + 1){
119 $page_banner .= "...";
120 }
121
122 //分别讨论首末位页码的大小
123 if($page > $pageOffset){
124 $start = $page - $pageOffset;
125 //末尾页码需要分情况讨论
126 $end = $page + $pageOffset < $total_pages ? $page + $pageOffset : $total_pages;
127 }else{
128 $start = 1;
129 $end = $total_pages > $showPage ? $showPage : $total_pages;
130 }
131 //当前页加上偏移量大于总页码的情况
132 if($page + $pageOffset > $total_pages){
133 $start = $start - ($page + $pageOffset - $end);
134 }
135 }
136
137 //显示页码连接
138 for($i = $start;$i <= $end;$i ++){
139 if($page == $i){
140 $page_banner .= "<span class='current'>{$i}</span>";
141 }else{
142 $page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=".$i."'>{$i}</a>";
143 }
144 }
145
146 //尾部省略
147 if($total_pages > $showPage && $page + $pageOffset < $total_pages){
148 $page_banner .= "...";
149 }
150 //如果在最后一页则隐藏尾页与下一页
151 if($page < $total_pages){
152 $page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>下一页></a>";
153 $page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=".($total_pages)."'>尾页</a>";
154 }else{
155 $page_banner .= "<span class='disable'>下一页></a></span>";
156 $page_banner .= "<span class='disable'>尾页</a></span>";
157 }
158
159 //跳转页码的实现
160 $page_banner .= "共{$total_pages}页,";
161 $page_banner .= "<form action='mypage.php' method='get'>";
162 $page_banner .= "到<input type='text' size='2' name='p'>页";
163 $page_banner .= "<input type='submit' value='确定'>";
164 $page_banner .= "</form></div>";
165
166 //将分页条输出
167 echo $page_banner;
168
169
170
171
172
173
174
175
176
177
178
179 ?>
180 </body>
181 </html>