<?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.='首页 尾页';
}else{
if($intPage == 1){
$strPageItem.="首页 上一页";
$strPageItem.=" ";
}else{
$strPageItem.="<a href='?page=1'>首页</a>";
$strPageItem.=" ";
$strPageItem.="<a href='?page=".($intPage-1)."'>上一页</a>";
$strPageItem.=" ";
}
if($intPage == $intAllPage){
$strPageItem.="下一页 尾页";
}else{
$strPageItem.="<a href='?page=".($intPage+1)."'>下一页</a>";
$strPageItem.=" ";
$strPageItem.="<a href='?page=".($intAllPage)."'>尾页</a>";
}
}
}
//显示分页条码时的情况即显示的链接数大于0
if($intTag == 2){
if($intPage == 1){
$strPageItem.="首页 上一页";
$strPageItem.=" ";
}else{
$strPageItem.="<a href='?page=1'>首页</a>";
$strPageItem.=" ";
$strPageItem.="<a href='?page=".($intPage-1)."'>上一页</a>";
$strPageItem.=" ";
}
for($i=$intStartPage;$i<=$intEndPage;$i++){
if($i == $intPage){
$strPageItem.=$i;
}else{
$strPageItem.="<a href='?page={$i}'>[".$i."]</a>";
}
$strPageItem.=" ";
}
if($intPage == $intAllPage){
$strPageItem.="下一页 尾页";
}else{
$strPageItem.="<a href='?page=".($intPage+1)."'>下一页</a>";
$strPageItem.=" ";
$strPageItem.="<a href='?page=".($intAllPage)."'>尾页</a>";
}
}
//当总的记录等于0的情况
if($intTag == 3){
$strPageItem.='首页 尾页';
}
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>