本文實例講述了PHP分頁顯示的方法。分享給大家供大家參考,具體如下:
- <?php
- header("content-type:text/html;charset=utf-8");
- $currentpage = 1;
- if(isset($_GET['page']))
- $currentpage = $_GET['page'];
- //連接數據庫
- $link = mysql_connect("localhost","root","") or die('連接失敗');
- mysql_select_db('myschool');
- mysql_query('set names utf8');
- $sql ="SELECT count(*) as 'count' from student";//查詢記錄的sql語句
- $result = mysql_query($sql);
- $arr = mysql_fetch_array($result);
- $count = $arr['count'];
- $pagesize = 3;
- $pages = ceil($count/$pagesize);//共多少頁
- $prepage = $currentpage -1;
- if($prepage<=0)
- $prepage=1;
- $nextpage = $currentpage+1;
- if($nextpage >= $pages){
- $nextpage = $pages;
- }
- $start =($currentpage-1) * $pagesize;//起始位置
- $sql = "SELECT * from student limit $start,$pagesize";
- echo $sql;
- // $sql = "select * from student";
- $result = mysql_query($sql);
- ?>
- <!-- html部分 -->
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Document</title>
- </head>
- <body>
- <table border="1">
- <tr>
- <td>學號</td>
- <td>姓名</td>
- <td>性別</td>
- <td>年齡</td>
- </tr>
- <?php while($arr=mysql_fetch_array($result)){ ?>
- <td><?php echo $arr['number']; ?></td>
- <td><?php echo $arr['name']; ?></td>
- <td><?php echo $arr['sex']; ?></td>
- <td><?php echo $arr['age']; ?></td>
- </tr> //Vevb.com
- <?php } ?>
- </table>
- <a href="<?php echo $_SERVER['PHP_SELF'].'?page='.$prepage; ?>" rel="external nofollow" >上一頁</a> <a href="<?php echo $_SERVER['PHP_SELF'].'?page='.$nextpage; ?>" rel="external nofollow" >下一頁</a>
- </body>
- </html>
注:當一個文件中有php和html兩種時,php文件必須有結束標記
附:php通用分頁類與用法:
Page.class.php文件:
- <?php
- /**
- * 分頁類
- *
- * 調用方式:
- * $p=new Page(總條數,顯示頁數,當前頁碼,每頁顯示條數,[鏈接]);
- * print_r($p->getPages()); //生成一個頁碼數組(鍵為頁碼,值為鏈接)
- * echo $p->showPages(1); //生成一個頁碼樣式(可添加自定義樣式)
- *
- */
- /*
- 總條數,需要顯示的頁數,當前頁,每頁顯示的條數,連接
- 生成一個一維數組,鍵為頁碼 值為連接
- 返回一個生成好樣式的頁碼(并且可以根據自己需要添加樣式)
- 默認樣式 共45條記錄,每頁顯示10條,當前第1/4頁 [首頁] [上頁] [1] [2] [3] .. [下頁] [尾頁]
- */
- class Page{
- protected $count; //總條數
- protected $showPages; //需要顯示的頁數
- protected $countPages; //總頁數
- protected $currPage; //當前頁
- protected $subPages; //每頁顯示條數
- protected $href; //連接
- protected $page_arr=array(); //保存生成的頁碼 鍵頁碼 值為連接
- /**
- * __construct 構造函數(獲取分頁所需參數)
- * @param int $count 總條數
- * @param int $showPages 顯示頁數
- * @param int $currPage 當前頁數
- * @param int $subPages 每頁顯示數量
- * @param string $href 連接(不設置則獲取當前URL)
- */
- public function __construct($count,$showPages,$currPage,$subPages,$href=''){
- $this->count=$count;
- $this->showPages=$showPages;
- $this->currPage=$currPage;
- $this->subPages=$subPages;
- //如果鏈接沒有設置則獲取當前連接
- if(emptyempty($href)){
- $this->href=htmlentities($_SERVER['PHP_SELF']);
- }else{
- $this->href=$href;
- }
- $this->construct_Pages();
- }
- /**
- * getPages 返回頁碼數組
- * @return array 一維數組 鍵為頁碼 值為鏈接
- */
- public function getPages(){
- return $this->page_arr;
- }
- /**
- * showPages 返回生成好的頁碼
- * @param int $style 樣式
- * @return string 生成好的頁碼
- */
- public function showPages($style=1){
- $func='pageStyle'.$style;
- return $this->$func();
- }
- /**
- * pageStyle1 分頁樣式(可參照這個添加自定義樣式 例如pageStyle2())
- * 樣式 共45條記錄,每頁顯示10條,當前第1/4頁 [首頁] [上頁] [1] [2] [3] .. [下頁] [尾頁]
- * @return string
- */
- protected function pageStyle1(){
- /* 構造普通模式的分頁
- 共4523條記錄,每頁顯示10條,當前第1/453頁 [首頁] [上頁] [1] [2] [3] .. [下頁] [尾頁]
- */
- $pageStr='共'.$this->count.'條記錄,每頁顯示'.$this->subPages.'條';
- $pageStr.='當前第'.$this->currPage.'/'.$this->countPages.'頁 ';
- $_GET['page'] = 1;
- $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >首頁</a>] </span>';
- //如果當前頁不是第一頁就顯示上頁
- if($this->currPage>1){
- $_GET['page'] = $this->currPage-1;
- $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >上頁</a>] </span>';
- }
- foreach ($this->page_arr as $k => $v) {
- $_GET['page'] = $k;
- $pageStr.='<span>[<a href="'.$v.'" rel="external nofollow" >'.$k.'</a>] </span>';
- }
- //如果當前頁小于總頁數就顯示下一頁
- if($this->currPage<$this->countPages){
- $_GET['page'] = $this->currPage+1;
- $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >下頁</a>] </span>';
- }
- $_GET['page'] = $this->countPages;
- $pageStr.='<span>[<a href="'.$this->href.'?'.http_build_query($_GET).'" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >尾頁</a>] </span>';
- return $pageStr;
- }
- /**
- * construct_Pages 生成頁碼數組
- * 鍵為頁碼,值為鏈接
- * $this->page_arr=Array(
- * [1] => index.php?page=1
- * [2] => index.php?page=2
- * [3] => index.php?page=3
- * ......)
- */
- protected function construct_Pages(){
- //計算總頁數
- $this->countPages=ceil($this->count/$this->subPages);
- //根據當前頁計算前后頁數
- $leftPage_num=floor($this->showPages/2);
- $rightPage_num=$this->showPages-$leftPage_num;
- //左邊顯示數為當前頁減左邊該顯示的數 例如總顯示7頁 當前頁是5 左邊最小為5-3 右邊為5+3
- $left=$this->currPage-$leftPage_num;
- $left=max($left,1); //左邊最小不能小于1
- $right=$left+$this->showPages-1; //左邊加顯示頁數減1就是右邊顯示數
- $right=min($right,$this->countPages); //右邊最大不能大于總頁數
- $left=max($right-$this->showPages+1,1); //確定右邊再計算左邊,必須二次計算
- for ($i=$left; $i <= $right; $i++) {
- $_GET['page'] = $i;
- $this->page_arr[$i]=$this->href.'?'.http_build_query($_GET);
- }
- }
- }
- ?>
用法示例demo.php:
- /**
- * demo
- */
- header("content-type:text/html;charset=utf8");
- include('Page.class.php'); //引入類
- //$p=new Page(總條數,顯示頁數,當前頁碼,每頁顯示條數,[鏈接]);
- //連接不設置則為當前鏈接
- $page=isset($_GET['page']) ? $_GET['page'] : 1;
- $p=new Page(100,4,$page,8);
- //生成一個頁碼數組(鍵為頁碼,值為鏈接)
- echo "<pre>";
- print_r($p->getPages());
- //樣式 共45條記錄,每頁顯示10條,當前第1/4頁 [首頁] [上頁] [1] [2] [3] .. [下頁] [尾頁]
- echo $p->showPages(1);
新聞熱點
疑難解答