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

发布时间:2020-10-20编辑:脚本学堂
分享一个php分页代码,用来学习下php分页原理,非常不错的php分页程序,需要的朋友参考下。

例子,php分页原理及php分页程序

专题推荐:php分页代码大全

代码:
复制代码 代码示例:
<?php
/**
* PHP分页代码
* */
/**
* 链接数据库
* www.jb200.com
* @param string $strHost 数据库服务器主机地址
* @param string $strAccount 数据库账号
* @param string $strPassword 数据库密码
* @return resource
* */
function mysqlConnect($strHost,$strAccount,$strPassword,$strDBname)
{
 $strHost=trim($strHost);
 $strAcount=trim($strAccount);
 $strPassword=trim($strPassword);
 $resLink=mysql_connect($strHost,$strAccount,$strPassword);
 if(!$resLink)
 {
  return false;
 }
 else
 {   //set names ... 根据数据库的编码进行设置
  mysql_query('set names utf8',$resLink);
  $isValidate=mysql_select_db($strDBname,$resLink);
  if($isValidate)
  {
   return $resLink;
  }
  else
  {
   return false;
  }
 }
}
/**
*接受分页的当前页码,计算出相应的参数值
*包括:开始页码$arrParameter['start']
*     结束页码$arrParameter['end']
*     总的记录数$arrParameter['all']
*     每页显示的记录数$arrParameter['nums']
*     页面中显示的链接数$arrParameter['links']
*     待查询的sql语句$arrParameter['sql']
*    分页条类型$arrParameter['tag']
*
int $intPage 当前页码值
int $intNums 每页显示的记录数
int $intLinks 页面中显示的链接数
string $strTablename 分页显示数据表
resource $resLink 数据连接句柄
array
* */
function calculateParamester($intPage,$intNums,$intLinks,$strTablename,$resLink){
 $intPage=(int)$intPage;
 $intNums=(int)$intNums;
 $intLinks=(int)$intLinks;
 //显示的链接数不是奇数时调整为奇数
 if($intLinks % 2 == 0){
  $intLinks--;
 }
 //每页显示的记录数不大于0时调整为10
 if($intNums <= 0){
  $intNums=10;
 }
 //计算总的页数
 $strSql1="select count(*) as num  from `{$strTablename}`";
 $resObj1=mysql_query($strSql1,$resLink);
 $arrObj1=mysql_fetch_assoc($resObj1);
 $intAllRecords=$arrObj1['num'];
 $intAllPage=ceil($intAllRecords/$intNums);
 //sql语句limit关键字的第一个参数
 $intOffset=($intPage-1)*$intNums;
 //只显示上一页下一页的情况即显示的链接数不大于0
 if($intLinks <= 0){
  $strSql2="select * from `{$strTablename}` limit {$intOffset},{$intNums}";
  $arrParameter['start']=null;
  $arrParameter['end']=null;
  $arrParameter['page']=$intPage;
  $arrParameter['nums']=$intNums;
  $arrParameter['links']=null;
  $arrParameter['all']=$intAllPage;
  $arrParameter['sql']=$strSql2;
  $arrParameter['tag']=1;
  //显示分页条码时的情况即显示的链接数大于0
 }else{
  //当总的记录大于0的情况
  if($intAllPage > 0){
   //确定当前页码的值
   if($intPage <= 0){
    $intPage=1;
   }
   if($intPage >= $intAllPage){
    $intPage=$intAllPage;
   }
   $intHalfLinks=floor($intLinks/2);
   //计算开始页码的值
   $intStartPage=$intPage-$intHalfLinks;
   if($intStartPage <= 0){
    $intStartPage=1;
   }
   if(($intAllPage-$intPage) < $intHalfLinks){
    //$intStartPage=$intPage-$intHalfLinks-($intHalfLinks-($intAllPage-$intPage));
    //$intStartPage=$intPage-$intHalfLinks-$intHalfLinks+$intAllPage-$intPage;
    $intStartPage=$intAllPage-2*$intHalfLinks;
   }
   //计算结束页码的值
   $intEndPage=$intPage+$intHalfLinks;
   if($intEndPage < $intLinks && $intAllPage >=$intLinks){
    $intEndPage=$intLinks;
   }
   if($intEndPage > $intAllPage){
    $intEndPage=$intAllPage;
   }
   //创建待执行的sql语句
   $strSql2="select * from `{$strTablename}` limit {$intOffset},{$intNums}";
   $arrParameter['start']=$intStartPage;
   $arrParameter['end']=$intEndPage;
   $arrParameter['page']=$intPage;
   $arrParameter['nums']=$intNums;
   $arrParameter['links']=$intLinks;
   $arrParameter['all']=$intAllPage;
   $arrParameter['sql']=$strSql2;
   $arrParameter['tag']=2;
   //当总的记录等于0的情况
  }else{
   $arrParameter['start']=null;
   $arrParameter['end']=null;
   $arrParameter['page']=null;
   $arrParameter['nums']=null;
   $arrParameter['links']=null;
   $arrParameter['all']=null;
   $arrParameter['sql']=null;
   $arrParameter['tag']=3;
  }
 }
 return $arrParameter;
}
/**
* 创建分页条
*
* @param int $intPage 当前显示的页码值
* @param int $intStartPage 开始页码
* @param int $intEndPage 结束页码
* @param int $intAllRecords 总的记录数
* @param int $intTag 分页条类型标记
* @return string
* */
function createPagingItem($intPage,$intStartPage,$intEndPage,$intAllPage,$intTag){
 $strPageItem='';
 //只显示上一页下一页的情况即显示的链接数不大于0
 if($intTag == 1){
  if($intAllPage <= 0){
   $strPageItem.='首页&nbsp;&nbsp;尾页';
  }else{
   if($intPage == 1){
    $strPageItem.="首页&nbsp;&nbsp;上一页";
    $strPageItem.="&nbsp;&nbsp;";
   }else{
    $strPageItem.="<a href='?page=1'>首页</a>";
    $strPageItem.="&nbsp;&nbsp;";
    $strPageItem.="<a href='?page=".($intPage-1)."'>上一页</a>";
    $strPageItem.="&nbsp;&nbsp;";
   }
   if($intPage == $intAllPage){
    $strPageItem.="下一页&nbsp;&nbsp;尾页";
   }else{
    $strPageItem.="<a href='?page=".($intPage+1)."'>下一页</a>";
    $strPageItem.="&nbsp;&nbsp;";
    $strPageItem.="<a href='?page=".($intAllPage)."'>尾页</a>";
   }
  }
 }
 //显示分页条码时的情况即显示的链接数大于0
 if($intTag == 2){
  if($intPage == 1){
   $strPageItem.="首页&nbsp;&nbsp;上一页";
   $strPageItem.="&nbsp;&nbsp;";
  }else{
   $strPageItem.="<a href='?page=1'>首页</a>";
   $strPageItem.="&nbsp;&nbsp;";
   $strPageItem.="<a href='?page=".($intPage-1)."'>上一页</a>";
   $strPageItem.="&nbsp;&nbsp;";
  }
  for($i=$intStartPage;$i<=$intEndPage;$i++){
   if($i == $intPage){
    $strPageItem.=$i;
   }else{
    $strPageItem.="<a href='?page={$i}'>[".$i."]</a>";
   }
   $strPageItem.="&nbsp;&nbsp;";
  }
  if($intPage == $intAllPage){
   $strPageItem.="下一页&nbsp;&nbsp;尾页";
  }else{
   $strPageItem.="<a href='?page=".($intPage+1)."'>下一页</a>";
   $strPageItem.="&nbsp;&nbsp;";
   $strPageItem.="<a href='?page=".($intAllPage)."'>尾页</a>";
  }
 }
 //当总的记录等于0的情况
 if($intTag == 3){
  $strPageItem.='首页&nbsp;&nbsp;尾页';
 }
 return $strPageItem;
}
/**
* 获取并输出数据
*
* @param string $strSql 查询的sql语句
* @param array $arrFields 需要显示的字段所组成的一个数组
* @param resource $resLink 数据连接句柄
* @return string
* */
function outPutData($strSql,$arrFields,$resLink){
 $resObj=mysql_query($strSql,$resLink);
 $arrObj=array();
 $strOutPutData='';
 $arrFieldsCode=array_keys($arrFields);
 while(@$arrRow=mysql_fetch_assoc($resObj)){
  $arrObj[]=$arrRow;
 }
 $strOutPutData.="<table class='showdata'>";
 $strOutPutData.='<tr>';
 foreach($arrFieldsCode as $strVal){
  $strOutPutData.="<td>".$arrFields[trim($strVal)]."</td>";
 }
 $strOutPutData.="</tr>";
 foreach($arrObj as $arrVal){
  $strOutPutData.="<tr>";
  foreach($arrFieldsCode as $strVal){
   $strOutPutData.="<td>".$arrVal[trim($strVal)]."</td>";
  }
  $strOutPutData.="</tr>";
 }
 $strOutPutData.="</table>";
 return $strOutPutData;
}
// 连接并选择数据库
// 注意:你应该修改数据库账号和密码以及数据库名称
$resLink=mysqlConnect('localhost','root','root','ztlibrary');
// 求出分页参数 注意:你应该修改数据表名称
$arrParameter=calculateParamester(@$_GET['page']?$_GET['page']:1,
10,5,'book_info',$resLink);
//待显示的数据,由表的字段名为其键值,字段名的中文解释为其元素值
//注意:你应该根据你的数据表修改下面这个数组
$arrFields=array('Id_code'=>'图书编码', 'Book_name'=>'图书名称',
'Book_ISBN'=>'ISBN','Contribute_man'=>'来源','Issue_time'=>'出版时间','Storing_time'=>'入库时间');
?>

 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>php分页演示--www.yuju100.com</title>
<meta http-equiv="content-type" content="text/html;chraset=utf-8"/>
</head>
<style text='text/css'>
table{
margin:0px;
padding:0px;
border-collapse:collapse;
border:1px solid #ff0000;
}
table td{
margin:0px;
padding:0px;
border-collapse:collapse;
border:1px solid #ff0000;
}
</style>
<body>
<div>
<?php
//输出分页数据
echo outPutData($arrParameter['sql'],$arrFields,$resLink);
?>
</div>
<div>
<?php
//显示分页条
echo createPagingItem($arrParameter['page'],$arrParameter['start'],$arrParameter['end'],
$arrParameter['all'],$arrParameter['tag']);
?>
</div>
</body>
</html>