自己写的mysql分页展示。
比较简单。传智韩老师的思想、可以直接拿来用哈。分层思想的。还没学习MVC,在这里先记录一下。
首先。把分页需要的信息都封装到一个类里面,ApartPage.class.php
<?php class ApartPage{ public $rowCount; //总共有多少行 public $pageCount; //总共有多少页 public $pageNow=1; //当前页 public $pageSize=5; //每页显示多少行 public $res_array; //select之后取回来的结果集等价的数组。 public $page_whole=10; //导航条一共有多少页,1 2 3 4 5 6 7 8 9 10 public $navigator; //页面下方的导航条字符串。 } ?>
最底层对数据库操作的函数。
<?php public function execute_dql_apartpage($sql1,$sql2,$apartPage){ $res=$this->conn->query($sql1) or die($this->conn->error);//返回执行select count(id)得到的结果集 if($row=$res->fetch_row()){ $apartPage->rowCount=$row[0];//利用sql1取出rowCount } $res->free();//释放结果集 // var_dump($sql2); // die(); $res2=$this->conn->query($sql2) or die($this->conn->error);//返回执行查询之后得到的结果集;, $arr=array(); while ($row=$res2->fetch_row()) { $arr[]=$row;//利用sql2取出所有的行数以及内容,并赋值给一个数组,方便直接释放资源。 }
$res2->free();//释放结果集 $apartPage->res_array=$arr; $apartPage->pageCount=ceil($apartPage->rowCount/$apartPage->pageSize); //以下内容显示导航条区域。 if($apartPage->pageNow>1){ $prePage=$apartPage->pageNow-1; $apartPage->navigator="<a href='emplist.php?pageNow=$prePage'>上一页</a>"; } if ($apartPage->pageNow<$apartPage->pageCount) { $nextPage=$apartPage->pageNow+1; $apartPage->navigator.= "<a href='emplist.php?pageNow=$nextPage'>下一页</a>"; } $start=floor(($apartPage->pageNow-1)/$apartPage->page_whole)*$apartPage->page_whole+1;//这个数字就是下面的超链接数字排列的第一个数字的值。 $index=$start;// for(;$start<$index+$apartPage->page_whole;$start++){ $apartPage->navigator.= "<a href='emplist.php?pageNow={$start}'>[$start] </a>"; //如果start增长到和页数一样了就跳出循环。 if ($start==$apartPage->pageCount) { break; } } if ($apartPage->pageNow<$apartPage->pageCount){ $apartPage->navigator.= "  <a href='emplist.php?pageNow=$start'>>></a>";//翻到下一个page_whloe页 } // $page_whloe=;//底下的数字栏一共有多少个数字显示出来。 if($apartPage->pageNow>$apartPage->page_whole){ $preRow=(floor($apartPage->pageNow/$apartPage->page_whole)-1)*$apartPage->page_whole+1;//这里是确定 $apartPage->navigator.= "  <a href='emplist.php?pageNow=$preRow'><<</a>  ";//翻到上一个page_whole页。 } //return $apartPage; } ?>
在数据库操作的上一层,封装一个service类,调用底层的这个execute_dql_apartpage函数。EmpService.class.php
<?php public function getApartPage($apartPage){ $sqliHelper=new SqliHelper(); $sql1="select count(id) from myemp"; $rowBegin=$apartPage->pageSize*($apartPage->pageNow-1); $sql2="select * from myemp limit {$rowBegin},{$apartPage->pageSize}"; $sqliHelper->execute_dql_apartpage($sql1, $sql2, $apartPage); } ?>
上面的函数调用之后,$apartPage对象里面就保存了所有分页需要的信息。
具体调用。
<?php
require_once 'EmpService.class.php'; require_once 'ApartPage.class.php'; $apartPage=new ApartPage(); $empService=new EmpService(); //在getApartPage函数执行之前给pageNow赋值。 if(isset($_GET['pageNow'])){ $apartPage->pageNow=$_GET['pageNow']; } $empService->getApartPage($apartPage); for($i=0;$i<$apartPage->pageSize;$i++) { echo "<tr>"; $row=@$apartPage->res_array[$i]; if(isset ($row)){//判断$row是否为空,不为空才进行下面的语句 foreach ($row as $k=>$val){ echo "<td>$val</td>"; } echo "</tr>"; } } echo "</table>"; //不能使用自增自减,会使得pageNow数据发生变化。用prePage和nextPage代替即可实现。 echo $apartPage->navigator;//这里显示导航条 上一页 下一页 1 2 3 4 5 << >>等 ?>
至此,分层模式的分页就完成了,其中最底层的execute_dql_apartpage,适用于对所有的数据库进行分页的操作,需要的参数就是一个查询数据库有多少条记录的语句,一个查询要显示的数据的语句。
这些内容都在具体的要服务的页面进行编写