当前位置:首页 » 编程语言 » php怎么分页

php怎么分页

发布时间: 2022-02-15 20:21:53

php怎么实现分页

/**
* 获取分页的HTML内容
* @param integer $page 当前页
* @param integer $pages 总页数
* @param string $url 跳转url地址 最后的页数以 '&page=x' 追加在url后面
*
* @return string HTML内容;
*/
public static function getPageHtml($page, $pages, $url){
//最多显示多少个页码
$_pageNum = 5;
//当前页面小于1 则为1
$page = $page<1?1:$page;
//当前页大于总页数 则为总页数
$page = $page > $pages ? $pages : $page;
//页数小当前页 则为当前页
$pages = $pages < $page ? $page : $pages;

//计算开始页
$_start = $page - floor($_pageNum/2);
$_start = $_start<1 ? 1 : $_start;
//计算结束页
$_end = $page + floor($_pageNum/2);
$_end = $_end>$pages? $pages : $_end;

//当前显示的页码个数不够最大页码数,在进行左右调整
$_curPageNum = $_end-$_start+1;
//左调整
if($_curPageNum<$_pageNum && $_start>1){
$_start = $_start - ($_pageNum-$_curPageNum);
$_start = $_start<1 ? 1 : $_start;
$_curPageNum = $_end-$_start+1;
}
//右边调整
if($_curPageNum<$_pageNum && $_end<$pages){
$_end = $_end + ($_pageNum-$_curPageNum);
$_end = $_end>$pages? $pages : $_end;
}

$_pageHtml = '<ul class="pagination">';
/*if($_start == 1){
$_pageHtml .= '<li><a title="第一页">«</a></li>';
}else{
$_pageHtml .= '<li><a title="第一页" href="'.$url.'&page=1">«</a></li>';
}*/
if($page>1){
$_pageHtml .= '<li><a title="上一页" href="'.$url.'&page='.($page-1).'">«</a></li>';
}
for ($i = $_start; $i <= $_end; $i++) {
if($i == $page){
$_pageHtml .= '<li class="active"><a>'.$i.'</a></li>';
}else{
$_pageHtml .= '<li><a href="'.$url.'&page='.$i.'">'.$i.'</a></li>';
}
}
/*if($_end == $pages){
$_pageHtml .= '<li><a title="最后一页">»</a></li>';
}else{
$_pageHtml .= '<li><a title="最后一页" href="'.$url.'&page='.$pages.'">»</a></li>';
}*/
if($page<$_end){
$_pageHtml .= '<li><a title="下一页" href="'.$url.'&page='.($page+1).'">»</a></li>';
}
$_pageHtml .= '</ul>';
echo $_pageHtml;
}

② php接口实现分页 怎么弄

如果总共只有10条、20条,那么一般最佳办法是:全部都输出到页面上,可以没5条一个DIV,只显示其中一个,把其它的隐藏了,通过按钮点击显示不同的DIV出来。

如果总共数据成千上万条,那么页面一次就只输出5条,通过给PHP一个参数显示第几页,每次从总数据清单里面不同的位置开始显示5条。

③ PHP怎么制作分页

方法/步骤

首先要了解下分页的原理即
SELECT * FROM table …… limit 开始位置 , 操作条数
开始位置从0开始
SELECT * FROM table …… limit 0 , 20
取最前面20条
SELECT * FROM table …… limit 10 , 20
11条到20条
其次分页要用的公式
得到公式
(当前页数 - 1 )X 每页条数 , 每页条数
Select * from table limit ($Page- 1) * $PageSize, $PageSize

还要了解parse_url()解析URL函数
parse_url() 是讲URL解析成有固定键值的数组的函数
$ua=parse_url("http://username:password@hostname/path?arg=value#anchor");
print_r($ua);
结果:
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)

创建数据库bbs和表test有
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) character set gb2312 NOT NULL,
`sex` varchar(2) character set gb2312 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
然后插入十几条测试数据即可

写mysql数据库连接代码保存conn.php文件里
代码如下
<?php
$conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误");
mysql_select_db("bbs", $conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
function htmtocode($content) {
$content = str_replace("\n", "<br>", str_replace(" ", " ", $content));
return $content;
}
//$content=str_replace("'","'",$content);
//htmlspecialchars();
?>

写分页函数page.php
代码如下
<?php
function _PAGEFT($totle, $displaypg = 20, $url = '') {
global $page, $firstcount, $pagenav, $_SERVER;
$GLOBALS["displaypg"] = $displaypg;
if (!$page)
$page = 1;
if (!$url) {
$url = $_SERVER["REQUEST_URI"];
}
//URL分析:
$parse_url = parse_url($url);
$url_query = $parse_url["query"]; //单独取出URL的查询字串
if ($url_query) {
$url_query = ereg_replace("(^|&)page=$page", "", $url_query);
$url = str_replace($parse_url["query"], $url_query, $url);
if ($url_query)
$url .= "&page";
else
$url .= "page";
} else {
$url .= "?page";
}
$lastpg = ceil($totle / $displaypg); //最后页,也是总页数
$page = min($lastpg, $page);
$prepg = $page -1; //上一页
$nextpg = ($page == $lastpg ? 0 : $page +1); //下一页
$firstcount = ($page -1) * $displaypg;
//开始分页导航条代码:
$pagenav = "显示第 <B>" . ($totle ? ($firstcount +1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B> 条记录,共 $totle 条记录";
//如果只有一页则跳出函数:
if ($lastpg <= 1)
return false;
$pagenav .= " <a href='$url=1'>首页</a> ";
if ($prepg)
$pagenav .= " <a href='$url=$prepg'>前页</a> ";
else
$pagenav .= " 前页 ";
if ($nextpg)
$pagenav .= " <a href='$url=$nextpg'>后页</a> ";
else
$pagenav .= " 后页 ";
$pagenav .= " <a href='$url=$lastpg'>尾页</a> ";
//下拉跳转列表,循环列出所有页码:
$pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";
for ($i = 1; $i <= $lastpg; $i++) {
if ($i == $page)
$pagenav .= "<option value='$i' selected>$i</option>\n";
else
$pagenav .= "<option value='$i'>$i</option>\n";
}
$pagenav .= "</select> 页,共 $lastpg 页";
}
include("conn.php");
$result=mysql_query("SELECT * FROM `test`");
$total=mysql_num_rows($result);
//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉).
_PAGEFT($total,5);
echo $pagenav;
$result=mysql_query("SELECT * FROM `test` limit $firstcount,$displaypg ");
while($row=mysql_fetch_array($result)){
echo "<hr><b>".$row[name]." | ".$row[sex];
}
?>
调用数据和分页list.php
<?php
/**
* 爱微网 www.iiwnet.com/php/
*/
include("conn.php");
$pagesize=5;
$url=$_SERVER["REQUEST_URI"];
$url=parse_url($url);
$url=$url[path];
$numq=mysql_query("SELECT * FROM `test`");
$num = mysql_num_rows($numq);
if($_GET[page]){
$pageval=$_GET[page];
$page=($pageval-1)*$pagesize;
$page.=',';
}
if($num > $pagesize){
if($pageval<=1)$pageval=1;
echo "共 $num 条".
" <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>";
}
echo $SQL="SELECT * FROM `test` limit $page $pagesize ";
$query=mysql_query($SQL);
while($row=mysql_fetch_array($query)){
echo "<hr><b>".$row[name]." | ".$row[sex];
}
?>

注意事项

注意分页公式写法你只要记住即可;
(当前页数 - 1 )X 每页条数 , 每页条数;
Select * from table limit ($Page- 1) * $PageSize, $PageSize;
注意三个代码文件在同一个目录下;
主要是最后的list.php调用代码要细看很有用。

④ 用PHP如何实现分页并能够实现上一页,下一页,跳转到()页的功能

<html><head>
<title>分页示例(php</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<?php
$pagesize=10; //设定每一页显示的记录数

$conn=mysql_connect("localhost","root","jrq");
mysql_select_db("sj",$conn);
$rs = mysql_query( "select * from `dw_newsdata`",$conn); //这里有第二个可选参数,指定打开的连接
//-----------------------------------------------------------------------------------------------//
//分页逻辑处理
//-----------------------------------------------------------------------------------------------
$tmpArr = mysql_fetch_array($rs);
$numAL = mysql_num_rows($rs); //取得记录总数$rs
$pages=intval($numAL/$pagesize); //计算总页数

if ($numAL % $pagesize) $pages++;

//设置缺省页码
//↓判断“当前页码”是否赋值过
if (isset($_GET['page'])){ $page=intval($_GET['page']); }else{ $page=1; }//否则,设置为第一页

//↓计算记录偏移量
$offset=$pagesize*($page - 1);

//↓读取指定记录数
$rs=mysql_query("select * from `dw_newsdata` limit $offset,$pagesize",$conn);//取得—当前页—记录集!
$curNum = mysql_num_rows($rs); //$curNum - 当前页实际记录数,for循环输出用
?>
<table border="0" width="80%">
<tr>
<td width="50%" bgcolor="#E0E0E0">标题</td>
<td width="50%" bgcolor="#E0E0E0">发布时间</td>
</tr>

<?php
while ($tmpArr = mysql_fetch_array($rs)) //提取一行,并循环判断
{
$i=0;

// for($a=0;$a<$ColNum;$a++) //==for结束==
?>
<tr>
<td width="50%"><?= $tmpArr[1]; //$tmpArr["news_title"] ; ?></td>
<td width="50%"><?php echo $tmpArr[2]; //$tmpArr["news_cont"]; ?></td>
</tr>

<?php

}//==while结束==
?>
</table>

<?php
//============================//
// 翻页显示 一
//============================//
echo "<p>"; // align=center
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;

if ($page > 1)
{
echo "<a href='?page=".$first."'>首页</a> ";
echo "<a href='?page=".$prev."'>上一页</a> ";
}

if ($page < $pages)
{
echo "<a href='?page=".$next."'>下一页</a> ";
echo "<a href='?page=".$last."'>尾页</a> ";
}

//============================//
// 翻页显示 二
//============================//
echo " | 共有".$pages."页(".$page."/".$pages.")";

for ($i=1;$i< $page;$i++){echo "<a href='?page=".$i."'>[".$i ."]</a> ";} // 1-先输出当前页之前的

if ($page > 0) echo "[".$page."]";; // 2-再输出当前页

for ($i=$page+1;$i<=$pages;$i++){echo "<a href='?page=".$i."'>[".$i ."]</a> ";}// 3-接着输出当前页之后

echo "转到第 <INPUT maxLength=3 size=3 value=".($page+1)." name=gotox> 页 <INPUT hideFocus onclick=\"location.href='?page=gotox.value';\" type=button value=Go name=cmd_goto>";

echo "</p>";

?>

</body>
</html>

⑤ PHP如何实现分页显示

【文件名】: c_mysql_page.inc // 【作 用】: MySQL分页函数类 // 【作 者】: 天灰 // // 【最后修改日期】: 2001/07/16[cxx] // 【变量定义规则】:‘C_’=字符型,‘I_’=整型,‘N_’=数字型,‘L_’=布尔型,‘A_’=数组型 //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // ※c_mysql_page() 构造函数,设置分页初始参数 // ※page_standard() 分页显示函数(标准型) // ※GetRecordStartEnd() 获得取记录的开始结束位置 // ※getmaxpage() 获得记录集的最大页数 // ※checkpage() 检查当前页数是否在0和最大页数之间 //------------------------------------------------------------------------------------------ class c_mysql_page { //------------------------------------------------------------------------------------------ // 变量定义 //------------------------------------------------------------------------------------------ var $I_pagesize = 10; //每页记录数 var $C_width = '80%'; //表格宽度 //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // 函数名:c_mysql_page ($I_pagesize, $c_width) // 作 用:构造函数,设置分页初始参数 // 参 数:$I_pagesize, $c_width // 返回值:变量 // 备 注:构造函数随着类的建立而自动执行 //------------------------------------------------------------------------------------------ function c_mysql_page ($I_pagesize=10, $C_width='80%') { if (isset($I_pagesize)){$this -> I_pagesize = $I_pagesize;} if (isset($C_width)){$this -> C_width = $C_width;} } //------------------------------------------------------------------------------------------ // 函数名:page_standard($I_sumrecord,$C_page,$C_url="self",$C_otherpara="") // 作 用:分页显示函数(标准型) // 参 数:$I_sumrecord 记录总数 // $C_url URL // $C_page URL后的参数 // $C_otherpara URL后的参数2 // $bgcolor 表格的背景颜色 // 返回值:<table> // 备 注:无 //------------------------------------------------------------------------------------------ function page_standard($I_sumrecord,$C_page,$C_url="self",$C_otherpara="",$bgcolor="") { //检查参数 if ((!$I_sumrecord) || (!$C_page)){AlertExit("参数不全!");} global $PHP_SELF,$$C_page; //全局变量$C_page //检测$I_pagesize是否合法 if($this -> I_pagesize < 1){AlertExit("请设定每页的记录数!");} if($I_sumrecord < 1){return false;} //检测总记录数 if($C_url == "self"){$C_url = $PHP_SELF;} //设置URL $I_page = $$C_page; //重新赋当前页值 $I_maxpage = $this -> getmaxpage($I_sumrecord); //取出总页数 $I_page = $this -> checkPage($I_maxpage,$I_page); //检查当前页号 //显示表 echo "<table align=center width=". $this -> C_width ." bgcolor=". $bgcolor .">"; echo "<tr>"; echo "<td align=left>共<font color=red><b>" . $I_sumrecord. "</b></font>条主题 当前第<font color=red><b>" . $I_page . "/". $I_maxpage. "</b></font>页</td>"; if ($I_maxpage > 1) { echo "<td align=right>"; if($I_page > 1 && $I_page < $I_maxpage) { echo "<a href= $C_url?$C_page=1&$C_otherpara>首页</a>"; $pre=$I_page-1; echo "<a href=$C_url?$C_page=$pre&$C_otherpara>上页</a>"; $next=$I_page+1; echo "<a href=$C_url?$C_page=$next&$C_otherpara>下页</a>"; echo "<a href=$C_url?$C_page=$I_maxpage&$C_otherpara>末页</a>"; } elseif($I_page == 1) { $next = $I_page+1; echo "<a href=$C_url?$C_page=$next&$C_otherpara>下页</a>"; echo "<a href=$C_url?$C_page=$I_maxpage&$C_otherpara>末页</a>"; } elseif($I_page == $I_maxpage) { echo "<a href=$C_url?$C_page=1&$C_otherpara>首页</a>"; $pre=$I_page-1; echo "<a href=$C_url?$C_page=$pre&$C_otherpara>上页</a>"; } //显示select echo "转到"; echo "<SELECT style=font-size:9pt NAME=gopage class='ff' OnChange=".WindowLocation($C_url,$C_otherpara,$C_page).">";//OnChange=".WindowLocation($C_url,$C_otherpara,$C_page)." for($i=1;$i <= $I_maxpage;$i++) { //如$i==$I_page,此选项选中(selected) if($i == $I_page){echo "<option value=$i selected>$i</option>";} else{echo "<option value=$i>$i</option>";} } echo "</SELECT>页</td>"; } echo "</tr>"; echo "</table>"; } //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // 函数名:GetRecordStartEnd($I_page) // 作 用:获得取记录的开始结束位置 // 参 数:$I_page 当前页 // 返回值:全局变量$I_rowstart,$I_pagesize // 备 注:无 //------------------------------------------------------------------------------------------ function GetRecordStartEnd($I_page) { global $I_rowstart; global $I_pagesize; $I_rowstart = ($I_page-1)*$this -> I_pagesize; $I_pagesize = $this -> I_pagesize; } //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ // 函数名:getmaxpage($intRecordNum) // 作 用:获得记录集的最大页数 // 参 数:$I_sumrecord 记录总数 // 返回值:最大页数$I_maxpage(整型) // 备 注:无 //------------------------------------------------------------------------------------------ function getmaxpage($I_sumrecord) { if (!$I_sumrecord){AlertExit("参数不全!>

⑥ php怎么分页啊

楼主留个邮箱,我给你发

⑦ php这种分页怎么实现

其实就是根据查询的总页先分页后判断,具体的我贴段我经常用的分页代码吧.

functionmulti($count,$page_size,$curpage,$url,$showkbd=false,$shownum=true,$maxpages=0,$page=10,$autogoto=FALSE,$simple=FALSE){
$face=array('limit_start'=>0,'multipage'=>'');
$c0=$count;
$c0or$c0=1;
$page_sizeor$page_size=1;
$pnums=@ceil($c0/$page_size);
$curpage=intval($curpage);
$curr_page=min((empty($curpage)?1:$curpage),$pnums);
$face['start']=($curr_page-1)*$page_size;
$face['page']=multipage($count,$page_size,$curr_page,$url,$showkbd,$shownum,$maxpages,$page,$autogoto,$simple);
return$face;
}

functionmultipage($num,$perpage,$curpage,$mpurl,$showkbd,$shownum,$maxpages,$page,$autogoto,$simple){
global$_INPUT;//自己处理过的包含$_GET和$_POST的数组
$lang=array();
$hasajax=!empty($_INPUT['hasajax'])?"hasajax="".htmlspecialchars($_INPUT['hasajax']).""":'';

$a_name='';
if(strpos($mpurl,'#')!==FALSE){
$a_strs=explode('#',$mpurl);
$mpurl=$a_strs[0];
$a_name='#'.$a_strs[1];
}

$lang['prev']='&#171;上一页';
$lang['next']='下一页&#187;';

$multipage='';
$mpurl.=strpos($mpurl,'?')!==FALSE?'&amp;':'?';

$realpages=$pages=1;
$_INPUT['page_next']=0;
$page-=strlen($curpage)-1;
if($page<=0){
$page=1;
}
if($num>$perpage){

$offset=floor($page*0.5);

$realpages=@ceil($num/$perpage);
$pages=$maxpages&&$maxpages<$realpages?$maxpages:$realpages;

if($page>$pages){
$from=1;
$to=$pages;
}else{
$from=$curpage-$offset;
$to=$from+$page-1;
if($from<1){
$to=$curpage+1-$from;
$from=1;
if($to-$from<$page){
$to=$page;
}
}elseif($to>$pages){
$from=$pages-$page+1;
$to=$pages;
}
}
$_INPUT['page_next']=$to;

$multipage=($curpage>1?'<ahref="'.$mpurl.'page='.($curpage-1).$a_name.'"class="prev"'.$hasajax.'>'.$lang['prev'].'</a>':'').($curpage-$offset>1&&$pages>$page?'<ahref="'.$mpurl.'page=1'.$a_name.'"class="first"'.$hasajax.'>1</a>…':'');
for($i=$from;$i<=$to;$i++){
$multipage.=$i==$curpage?'<strong>'.$i.'</strong>':
'<ahref="'.$mpurl.'page='.$i.($hasajax&&$i==$pages&&$autogoto?'#':$a_name).'"'.$hasajax.'>'.$i.'</a>';
}

$multipage.=($to<$pages?'…<ahref="'.$mpurl.'page='.$pages.$a_name.'"class="last"'.$hasajax.'>'.$realpages.'</a>':'').
($curpage<$pages&&!$simple?'<ahref="'.$mpurl.'page='.($curpage+1).$a_name.'"class="next"'.$hasajax.'>'.$lang['next'].'</a>':'').
($showkbd&&!$simple&&$pages>$page&&!$hasajax?'&nbsp;转到<inputtype="text"class="custompage"size="3"onKeyDown="if(event.keyCode==13){window.location.href=''.$mpurl.'page='+this.value;returnfalse;}"title="单击回车跳转"/>':'');
$multipage=$multipage?'<divclass="mulitpage">'.($shownum&&!$simple?'<em>共'.$num.'条第'.$curpage.'/'.$pages.'页</em>':'').$multipage.'</div>':'';
}
$maxpage=$realpages;
if(empty($multipage)){$multipage='<divclass="mulitpage">'.($shownum&&!$simple?'<em>共'.$num.'条第'.$curpage.'/'.$pages.'页</em>':'').'<strong>1</strong></div>';}
return$multipage;
}

调用:

$multipage=multi(总条数, 每页行数, 当前页, 页码的URL(不含页码));

各参数你自己提供.

⑧ PHP分页怎么做

<?php
header("Content-type:text/html;charset=utf-8");
mysql_connect('localhost','root','');
mysql_select_db('1104javab');
mysql_query('set names utf8');
$sql = "select count(category_id) as total from sw_category";
$result = mysql_query($sql);
while($a = mysql_fetch_assoc($result)){
$arr = $a;
}
if($_GET['is_ajax']!=1){

echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo date('Y-d-m H:i:s',time());
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
}

$nowpage = !empty($_GET['p']) ? intval($_GET['p']) : 1;
$page_size = 3;//每页显示条数
$rowcount = $arr['total'];//总条数
$pages = ceil($rowcount/$page_size);//总页数
$prevpage = $nowpage-1 >0 ? $nowpage-1 : 1;
$nextpage = $nowpage+1 >$pages ? $pages : $nowpage+1;
$startpage = ($nowpage-1)*$page_size;
$sql = "select category_id,category_name,category_path from sw_category limit $startpage,$page_size";
$result = mysql_query($sql);
$array = array();
while($a = mysql_fetch_assoc($result)){
$array[] = $a;
}
echo "<script src='./jquery-1.4.2.min.js'></script>" ;
echo "<div id='listDiv'>";
echo "<table width=80% border=1><tr><th>category_id</th><th>category_name</th><th>category_path</th><tr>";
foreach($array as $value){
echo "<tr align=center><td>{$value['category_id']}</td><td>{$value['category_name']}</td><td>{$value['category_path']}</td></tr>";
}
echo "</table>";

echo "总共{$rowcount}条 当前为第{$nowpage}页 总共{$pages}页 <a href='javascript:gotopage(1)'>首页</a> <a href='javascript:gotopage($prevpage)'>上一页</a> <a href='javascript:gotopage($nextpage)'>下一页</a> <a href='javascript:gotopage($pages)'>尾页</a>";
echo "</div>";

if($_GET['is_ajax']!=1){
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo date('Y-d-m H:i:s',time());
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
}
?>
<script type="text/javascript">
function gotopage(p){
$.get("./index.php",'is_ajax=1&p='+p,function(msg){
$('#listDiv').html(msg);
});
}
</script>

⑨ php中的分页显示

1、前言

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解,力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解。本文适合初学者阅读,所有示例代码均使用php编写。

2、原理

所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:

每页多少条记录($PageSize)?
当前是第几页($CurrentPageID)?

现在只要再给我一个结果集,我就可以显示某段特定的结果出来。
至于其他的参数,比如:上一页($PreviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。
以mysql数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。

前10条记录:select * from table limit 0,10
第11至20条记录:select * from table limit 10,10
第21至30条记录:select * from table limit 20,10
……

这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:

select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize

拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。以下我将用具体代码加以说明。

3、简单代码
请详细阅读以下代码,自己调试运行一次,最好把它修改一次,加上自己的功能,比如搜索等等。

<?php
// 建立数据库连接
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Could not connect: " . mysql_error());
// 获取当前页数
if( isset($_GET['page']) ){
$page = intval( $_GET['page'] );
}
else{
$page = 1;
}
// 每页数量
$PageSize = 10;
// 获取总数据量
$sql = "select count(*) as amount from table";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$amount = $row['amount'];
// 记算总共有多少页
if( $amount ){
if( $amount < $page_size ){ $page_count = 1; } //如果总数据量小于$PageSize,那么只有一页
if( $amount % $page_size ){ //取总数据量除以每页数的余数
$page_count = (int)($amount / $page_size) + 1; //如果有余数,则页数等于总数据量除以每页数的结果取整再加一
}else{
$page_count = $amount / $page_size; //如果没有余数,则页数等于总数据量除以每页数的结果
}
}
else{
$page_count = 0;
}

// 翻页链接
$page_string = '';
if( $page == 1 ){
$page_string .= '第一页|上一页|';
}
else{
$page_string .= '<a href="/?page=1>";第一页</a>|<a href="/?page='."($page-1).'>上一页</a>|';
}
if( ($page == $page_count) || ($page_count == 0) ){
$page_string .= '下一页|尾页';
}
else{
$page_string .= '<a href="/?page='."($page+1).'>下一页</a>|<a href="/?page='."$page_count.'>尾页</a>';
}
// 获取数据,以二维数组格式返回结果
if( $amount ){
$sql = "select * from table order by id desc limit ". ($page-1)*$page_size .", $page_size";
$result = mysql_query($sql);

while ( $row = mysql_fetch_row($result) ){
$rowset[] = $row;
}
}else{
$rowset = array();
}
// 没有包含显示结果的代码,那不在讨论范围,只要用foreach就可以很简单的用得到的二维数组来显示结果
?>

4、OO风格代码
以下代码中的数据库连接是使用的pear db类进行处理

<?php
// FileName: Pager.class.php
// 分页类,这个类仅仅用于处理数据结构,不负责处理显示的工作
Class Pager
{
var $PageSize; //每页的数量
var $CurrentPageID; //当前的页数
var $NextPageID; //下一页
var $PreviousPageID; //上一页
var $numPages; //总页数
var $numItems; //总记录数
var $isFirstPage; //是否第一页
var $isLastPage; //是否最后一页
var $sql; //sql查询语句

function Pager($option)
{
global $db;
$this->_setOptions($option);
// 总条数
if ( !isset($this->numItems) )
{
$res = $db->query($this->sql);
$this->numItems = $res->numRows();
}
// 总页数
if ( $this->numItems > 0 )
{
if ( $this->numItems < $this->PageSize ){ $this->numPages = 1; }
if ( $this->numItems % $this->PageSize )
{
$this->numPages= (int)($this->numItems / $this->PageSize) + 1;
}
else
{
$this->numPages = $this->numItems / $this->PageSize;
}
}
else
{
$this->numPages = 0;
}

switch ( $this->CurrentPageID )
{
case $this->numPages == 1:
$this->isFirstPage = true;
$this->isLastPage = true;
break;
case 1:
$this->isFirstPage = true;
$this->isLastPage = false;
break;
case $this->numPages:
$this->isFirstPage = false;
$this->isLastPage = true;
break;
default:
$this->isFirstPage = false;
$this->isLastPage = false;
}

if ( $this->numPages > 1 )
{
if ( !$this->isLastPage ) { $this->NextPageID = $this->CurrentPageID + 1; }
if ( !$this->isFirstPage ) { $this->PreviousPageID = $this->CurrentPageID - 1; }
}

return true;
}

/***
*
* 返回结果集的数据库连接
* 在结果集比较大的时候可以直接使用这个方法获得数据库连接,然后在类之外遍历,这样开销较小
* 如果结果集不是很大,可以直接使用getPageData的方式获取二维数组格式的结果
* getPageData方法也是调用本方法来获取结果的
*
***/

function getDataLink()
{
if ( $this->numItems )
{
global $db;

$PageID = $this->CurrentPageID;

$from = ($PageID - 1)*$this->PageSize;
$count = $this->PageSize;
$link = $db->limitQuery($this->sql, $from, $count); //使用Pear DB::limitQuery方法保证数据库兼容性

return $link;
}
else
{
return false;
}
}

/***
*
* 以二维数组的格式返回结果集
*
***/

function getPageData()
{
if ( $this->numItems )
{
if ( $res = $this->getDataLink() )
{
if ( $res->numRows() )
{
while ( $row = $res->fetchRow() )
{
$result[] = $row;
}
}
else
{
$result = array();
}

return $result;
}
else
{
return false;
}
}
else
{
return false;
}
}

function _setOptions($option)
{
$allow_options = array(
'PageSize',
'CurrentPageID',
'sql',
'numItems'
);

foreach ( $option as $key => $value )
{
if ( in_array($key, $allow_options) && ($value != null) )
{
$this->$key = $value;
}
}

return true;
}
}
?>

<?php
// FileName: test_pager.php
// 这是一段简单的示例代码,前边省略了使用pear db类建立数据库连接的代码
require "Pager.class.php";
if ( isset($_GET['page']) )
{
$page = (int)$_GET['page'];
}
else
{
$page = 1;
}
$sql = "select * from table order by id";
$pager_option = array(
"sql" => $sql,
"PageSize" => 10,
"CurrentPageID" => $page
);
if ( isset($_GET['numItems']) )
{
$pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new Pager($pager_option);
$data = $pager->getPageData();
if ( $pager->isFirstPage )
{
$turnover = "首页|上一页|";
}
else
{
$turnover = "<a href='?page=1&numItems=".$pager->numItems."'>首页</a>|<a href="/?page=".$pager->PreviousPageID."&numItems=".$pager->numItems."'>上一页</a>|";
}
if ( $pager->isLastPage )
{
$turnover .= "下一页|尾页";
}
else
{
$turnover .= "<a href="/?page=".$pager->NextPageID."&numItems=".$pager->numItems."'>下一页</a>|<a href="/?page=".$pager->numPages."&numItems=".$pager->numItems."'>尾页</a>";
}
?>

需要说明的地方有两个:

这个类仅仅处理数据,并不负责处理显示,因为我觉得将数据的处理和结果的显示都放到一个类里边实在是有些勉强。显示的时候情况和要求多变,不如自己根据类给出的结果处理,更好的方法是根据这个Pager类继承一个自己的子类来显示不同的分页,比如显示用户分页列表可以:

<?php
Class MemberPager extends Pager
{
function showMemberList()
{
global $db;

$data = $this->getPageData();
// 显示结果的代码
// ......
}
}
/// 调用
if ( isset($_GET['page']) )
{
$page = (int)$_GET['page'];
}
else
{
$page = 1;
}
$sql = "select * from members order by id";
$pager_option = array(
"sql" => $sql,
"PageSize" => 10,
"CurrentPageID" => $page
);
if ( isset($_GET['numItems']) )
{
$pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new MemberPager($pager_option);
$pager->showMemberList();
?>

第二个需要说明的地方就是不同数据库的兼容性,在不同的数据库里截获一段结果的写法是不一样的。
mysql: select * from table limit offset, rows
pgsql: select * from table limit m offset n
......
所以要在类里边获取结果的时候需要使用pear db类的limitQuery方法。

ok,写完收功,希望花时间看完这些文字的你不觉得是浪费了时间。

⑩ php中怎么分页

<html>
<head>
<title>分页显示</title>
</head>
<script language="javascript">
function confirmDel()
{
var confirm=window.confirm("您确定要删除吗?");
if(confirm)
return true;
else
return false;
}
</script>
<body bgcolor="cce8cf">
<center>
<table border="1" width="90%" cellspacing="1">
<tr bgcolor="yellow">
<td>用户ID</td>
<td>用户名</td>
<td>密码</td>
<td>性别</td>
<td>年龄</td>
<td>电子邮件</td>
<td>操作</td>
</tr>
<?php
error_reporting(0);
//设置页大小,即每页显示几条数据
$pagesize=10;

//设置第一页
$page=1;

//数据库初始化操作
$link=mysql_connect("localhost","root","root");//连接数据库
$db=mysql_select_db("HibernateDemo",$link);//选择数据库
$sql="select count(*) from userinfo";//构造sql语句
$res=mysql_query($sql);//执行查询操作,结果为总记录数
$row=mysql_fetch_array($res);//取出一条记录
$rows=$row[0];//取出总记录数

//判断一共多少页
$pages=intval($rows/$pagesize);//取整数页,总页数
if($rows%$pagesize)
$pages=$pages+1;//如果还有余数的话,那么就再加一页来显示剩余的记录

//获取用户请求,即用户提交要去哪一页
$page=$_GET["ToPage"];

//整理用户输入
if($page<=0)
{
$page=1;//因为开始的时候没$page有值,所以是0,所以就让$page=1,这样后面的
//$page也就是1,见第97行
}
if($page>=$pages)
{
$page=$pages;
}
session_start();
echo "<div align='right' top='0'><a href='logout.php'>注销".$_SESSION['username']."</a></div>";

echo "当前第".$page."页,每页10个记录,总".$rows."条记录,一共".$pages."页";//显示页数信息
//计算偏移量
$offset=$pagesize*($page-1);

//构造sql语句
$sqlx="select * from userinfo limit 10 offset ".$offset;

$result=mysql_query($sqlx);//执行查询操作
$ok=mysql_fetch_array($result);
while($ok)
{
?>
<tr>
<td bgcolor="#DEB887"><?php echo $ok[0] ?></td>
<td><?php echo $ok[1] ?></td>
<td><?php echo $ok[2] ?></td>
<td><?php echo $ok[3]==male?"男":"女" ?></td>
<td><?php echo $ok[4] ?></td>
<td><?php echo $ok[5] ?></td>
<td><a href="updateInfo.php?userid=<?php echo $ok[0] ?>">修改</a>
<a href="deleteInfo.php?userid=<?php echo $ok[0] ?>"
onclick="return confirmDel();">删除</a>
</td>
</tr>
<?php
$ok=mysql_fetch_array($result);
}
?>
</table>
<table>
<?php
//判断当前是否是第一页,不是,则显示'第一页'和'上一页'
if($page!=1)
{
?>
<tr>
<td align="center">
<a href="pageSelect.php?ToPage=1">第一页</a>
<a href="pageSelect.php?ToPage=<?php echo ($page-1) ?>">上一页</a>
</td>
<?php
}
//如果不是最后一页,则显示‘最后一页’和‘下一页’
if($page!=$pages)
{
?>
<td align="center" colspan="6">
<a href="pageSelect.php?ToPage=<?php echo ($page+1) ?>">下一页</a>
<a href="pageSelect.php?ToPage=<?php echo ($pages) ?>">最后一页</a>
</td>
<?php
}
?>
<table>
<form action="pageSelect.php" method="get" name="form1">
<tr>
<td colspan="6" align="center">
<input type="text" value="<?php echo ($page) ?>" name="ToPage"
size="3" />
<a href="javascript:window.document.form1.submit();">GO</a>
</td>
</tr>
</form>
</table>
</center>
</body>
</html>

热点内容
电脑怎么看网络密码 发布:2025-01-10 14:56:40 浏览:108
java调用shell脚本参数 发布:2025-01-10 14:43:51 浏览:52
php数组计数 发布:2025-01-10 14:23:03 浏览:474
s盒算法 发布:2025-01-10 14:16:42 浏览:643
c语言用二分法求方程 发布:2025-01-10 14:15:45 浏览:220
广场舞加密 发布:2025-01-10 14:13:21 浏览:521
网络密码显示低安全性是什么意思 发布:2025-01-10 14:11:49 浏览:782
耻辱2博士保险箱密码是多少 发布:2025-01-10 14:11:41 浏览:101
如何把服务器搭在自己电脑 发布:2025-01-10 14:10:57 浏览:585
水晶可以存储 发布:2025-01-10 14:09:35 浏览:391