简单的PHP+Mysql实现分页

  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>
View Code

 

posted @ 2016-03-24 21:42  banshaohuan  阅读(390)  评论(0编辑  收藏  举报