当前位置:Gxlcms > PHP教程 > php分页原理与php分页代码综合实例

php分页原理与php分页代码综合实例

时间:2021-07-01 10:21:17 帮助过:32人阅读

  1. /**
  2. * PHP分页代码
  3. * */
  4. /**
  5. * 链接数据库
  6. * bbs.it-home.org
  7. * @param string $strHost 数据库服务器主机地址
  8. * @param string $strAccount 数据库账号
  9. * @param string $strPassword 数据库密码
  10. * @return resource
  11. * */
  12. function mysqlConnect($strHost,$strAccount,$strPassword,$strDBname)
  13. {
  14. $strHost=trim($strHost);
  15. $strAcount=trim($strAccount);
  16. $strPassword=trim($strPassword);
  17. $resLink=mysql_connect($strHost,$strAccount,$strPassword);
  18. if(!$resLink)
  19. {
  20. return false;
  21. }
  22. else
  23. { //set names ... 根据数据库的编码进行设置
  24. mysql_query('set names utf8',$resLink);
  25. $isValidate=mysql_select_db($strDBname,$resLink);
  26. if($isValidate)
  27. {
  28. return $resLink;
  29. }
  30. else
  31. {
  32. return false;
  33. }
  34. }
  35. }
  36. /**
  37. *接受分页的当前页码,计算出相应的参数值
  38. *包括:开始页码$arrParameter['start']
  39. * 结束页码$arrParameter['end']
  40. * 总的记录数$arrParameter['all']
  41. * 每页显示的记录数$arrParameter['nums']
  42. * 页面中显示的链接数$arrParameter['links']
  43. * 待查询的sql语句$arrParameter['sql']
  44. * 分页条类型$arrParameter['tag']
  45. *
  46. int $intPage 当前页码值
  47. int $intNums 每页显示的记录数
  48. int $intLinks 页面中显示的链接数
  49. string $strTablename 分页显示数据表
  50. resource $resLink 数据连接句柄
  51. array
  52. * */
  53. function calculateParamester($intPage,$intNums,$intLinks,$strTablename,$resLink){
  54. $intPage=(int)$intPage;
  55. $intNums=(int)$intNums;
  56. $intLinks=(int)$intLinks;
  57. //显示的链接数不是奇数时调整为奇数
  58. if($intLinks % 2 == 0){
  59. $intLinks--;
  60. }
  61. //每页显示的记录数不大于0时调整为10
  62. if($intNums <= 0){
  63. $intNums=10;
  64. }
  65. //计算总的页数
  66. $strSql1="select count(*) as num from `{$strTablename}`";
  67. $resObj1=mysql_query($strSql1,$resLink);
  68. $arrObj1=mysql_fetch_assoc($resObj1);
  69. $intAllRecords=$arrObj1['num'];
  70. $intAllPage=ceil($intAllRecords/$intNums);
  71. //sql语句limit关键字的第一个参数
  72. $intOffset=($intPage-1)*$intNums;
  73. //只显示上一页下一页的情况即显示的链接数不大于0
  74. if($intLinks <= 0){
  75. $strSql2="select * from `{$strTablename}` limit {$intOffset},{$intNums}";
  76. $arrParameter['start']=null;
  77. $arrParameter['end']=null;
  78. $arrParameter['page']=$intPage;
  79. $arrParameter['nums']=$intNums;
  80. $arrParameter['links']=null;
  81. $arrParameter['all']=$intAllPage;
  82. $arrParameter['sql']=$strSql2;
  83. $arrParameter['tag']=1;
  84. //显示分页条码时的情况即显示的链接数大于0
  85. }else{
  86. //当总的记录大于0的情况
  87. if($intAllPage > 0){
  88. //确定当前页码的值
  89. if($intPage <= 0){
  90. $intPage=1;
  91. }
  92. if($intPage >= $intAllPage){
  93. $intPage=$intAllPage;
  94. }
  95. $intHalfLinks=floor($intLinks/2);
  96. //计算开始页码的值
  97. $intStartPage=$intPage-$intHalfLinks;
  98. if($intStartPage <= 0){
  99. $intStartPage=1;
  100. }
  101. if(($intAllPage-$intPage) < $intHalfLinks){
  102. //$intStartPage=$intPage-$intHalfLinks-($intHalfLinks-($intAllPage-$intPage));
  103. //$intStartPage=$intPage-$intHalfLinks-$intHalfLinks+$intAllPage-$intPage;
  104. $intStartPage=$intAllPage-2*$intHalfLinks;
  105. }
  106. //计算结束页码的值
  107. $intEndPage=$intPage+$intHalfLinks;
  108. if($intEndPage < $intLinks && $intAllPage >=$intLinks){
  109. $intEndPage=$intLinks;
  110. }
  111. if($intEndPage > $intAllPage){
  112. $intEndPage=$intAllPage;
  113. }
  114. //创建待执行的sql语句
  115. $strSql2="select * from `{$strTablename}` limit {$intOffset},{$intNums}";
  116. $arrParameter['start']=$intStartPage;
  117. $arrParameter['end']=$intEndPage;
  118. $arrParameter['page']=$intPage;
  119. $arrParameter['nums']=$intNums;
  120. $arrParameter['links']=$intLinks;
  121. $arrParameter['all']=$intAllPage;
  122. $arrParameter['sql']=$strSql2;
  123. $arrParameter['tag']=2;
  124. //当总的记录等于0的情况
  125. }else{
  126. $arrParameter['start']=null;
  127. $arrParameter['end']=null;
  128. $arrParameter['page']=null;
  129. $arrParameter['nums']=null;
  130. $arrParameter['links']=null;
  131. $arrParameter['all']=null;
  132. $arrParameter['sql']=null;
  133. $arrParameter['tag']=3;
  134. }
  135. }
  136. return $arrParameter;
  137. }
  138. /**
  139. * 创建分页条
  140. *
  141. * @param int $intPage 当前显示的页码值
  142. * @param int $intStartPage 开始页码
  143. * @param int $intEndPage 结束页码
  144. * @param int $intAllRecords 总的记录数
  145. * @param int $intTag 分页条类型标记
  146. * @return string
  147. * */
  148. function createPagingItem($intPage,$intStartPage,$intEndPage,$intAllPage,$intTag){
  149. $strPageItem='';
  150. //只显示上一页下一页的情况即显示的链接数不大于0
  151. if($intTag == 1){
  152. if($intAllPage <= 0){
  153. $strPageItem.='首页 尾页';
  154. }else{
  155. if($intPage == 1){
  156. $strPageItem.="首页 上一页";
  157. $strPageItem.=" ";
  158. }else{
  159. $strPageItem.="首页";
  160. $strPageItem.=" ";
  161. $strPageItem.="上一页";
  162. $strPageItem.=" ";
  163. }
  164. if($intPage == $intAllPage){
  165. $strPageItem.="下一页 尾页";
  166. }else{
  167. $strPageItem.="下一页";
  168. $strPageItem.=" ";
  169. $strPageItem.="尾页";
  170. }
  171. }
  172. }
  173. //显示分页条码时的情况即显示的链接数大于0
  174. if($intTag == 2){
  175. if($intPage == 1){
  176. $strPageItem.="首页 上一页";
  177. $strPageItem.=" ";
  178. }else{
  179. $strPageItem.="首页";
  180. $strPageItem.=" ";
  181. $strPageItem.="上一页";
  182. $strPageItem.=" ";
  183. }
  184. for($i=$intStartPage;$i<=$intEndPage;$i++){
  185. if($i == $intPage){
  186. $strPageItem.=$i;
  187. }else{
  188. $strPageItem.="[".$i."]";
  189. }
  190. $strPageItem.=" ";
  191. }
  192. if($intPage == $intAllPage){
  193. $strPageItem.="下一页 尾页";
  194. }else{
  195. $strPageItem.="下一页";
  196. $strPageItem.=" ";
  197. $strPageItem.="尾页";
  198. }
  199. }
  200. //当总的记录等于0的情况
  201. if($intTag == 3){
  202. $strPageItem.='首页 尾页';
  203. }
  204. return $strPageItem;
  205. }
  206. /**
  207. * 获取并输出数据
  208. *
  209. * @param string $strSql 查询的sql语句
  210. * @param array $arrFields 需要显示的字段所组成的一个数组
  211. * @param resource $resLink 数据连接句柄
  212. * @return string
  213. * */
  214. function outPutData($strSql,$arrFields,$resLink){
  215. $resObj=mysql_query($strSql,$resLink);
  216. $arrObj=array();
  217. $strOutPutData='';
  218. $arrFieldsCode=array_keys($arrFields);
  219. while(@$arrRow=mysql_fetch_assoc($resObj)){
  220. $arrObj[]=$arrRow;
  221. }
  222. $strOutPutData.="";
  223. $strOutPutData.='
  224. ';
  225. foreach($arrFieldsCode as $strVal){
  226. $strOutPutData.="
  227. ";
  228. }
  229. $strOutPutData.="
  230. ";
  231. foreach($arrObj as $arrVal){
  232. $strOutPutData.="
  233. ";
  234. foreach($arrFieldsCode as $strVal){
  235. $strOutPutData.="
  236. ";
  237. }
  238. $strOutPutData.="
  239. ";
  240. }
  241. $strOutPutData.="
  242. ".$arrFields[trim($strVal)]."
    ".$arrVal[trim($strVal)]."
    ";
  243. return $strOutPutData;
  244. }
  245. // 连接并选择数据库
  246. // 注意:你应该修改数据库账号和密码以及数据库名称
  247. $resLink=mysqlConnect('localhost','root','root','ztlibrary');
  248. // 求出分页参数 注意:你应该修改数据表名称
  249. $arrParameter=calculateParamester(@$_GET['page']?$_GET['page']:1,
  250. 10,5,'book_info',$resLink);
  251. //待显示的数据,由表的字段名为其键值,字段名的中文解释为其元素值
  252. //注意:你应该根据你的数据表修改下面这个数组
  253. $arrFields=array('Id_code'=>'图书编码', 'Book_name'=>'图书名称',
  254. 'Book_ISBN'=>'ISBN','Contribute_man'=>'来源','Issue_time'=>'出版时间','Storing_time'=>'入库时间');
  255. ?>
  256. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  257. php分页演示--www.yuju100.com
  258. //输出分页数据
  259. echo outPutData($arrParameter['sql'],$arrFields,$resLink);
  260. ?>
  261. //显示分页条
  262. echo createPagingItem($arrParameter['page'],$arrParameter['start'],$arrParameter['end'],
  263. $arrParameter['all'],$arrParameter['tag']);
  264. ?>

人气教程排行