求PHP+mysql分页如何实现

dllj 2005-05-25 11:24:16
偶是PHP初学者,不知如何进行分页显示,烦请各位大哥指教,数据库为dls,数据表为fx,内有(ID,name,lr,date)四个字段,(烦请加上注释)
...全文
248 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dllj 2005-05-31
  • 打赏
  • 举报
回复
谢谢各位大哥指教,小弟万分感激.
wy2000490 2005-05-30
  • 打赏
  • 举报
回复
<?php
连接数据库的地方就不要解释了吧!
if(!$page){ //$page是传的页数参数,如果是该参数还没有被传,就设成是1,就是当前页
$page=1;
}else{
if($page<1) $page=1;
}
$temp = ($page-1)*20; // $temp 显示每页的起点(数据库里面的记录起点,比方说从第11条显示)
$str = "select * from fx order by id DESC limit $temp,20"; //从上面的起点开始查询出20条数据
$query = mysql_query($str);
$num = mysql_num_rows($query); // 总的记录数
$numbers = ceil($num/20); 总的页数(每页显示20条,当然20你可以自己去改)
while($datarow=mysql_fetch_array($query)){ //开始循环输出,这个地方你只要用数组取出你想显示的字段值就可以了,比较简单,不说

?>



下面简单和你说一下“上一页”“下一页”“首页”“尾页”

<a href=index.php?page=1首页</a>
<a href=index.php?page=<?php echo $page-1;?>>上页</a> 
<a href=index.php?page=<?php echo $page+1;?>>下页</a> 
<a href=index.php?page=<?php echo $numbers;?>>尾页</a>

//page 是参数,上面的语句会根据这个值显示相应的记录 index.php这个根据你自己的需要改变




我上面写的比较简单,等你熟悉了,可以多加一下判断条件!
indexroot 2005-05-30
  • 打赏
  • 举报
回复
推荐学phplib/adodb
indexroot 2005-05-30
  • 打赏
  • 举报
回复
关键是
select语句的
limit $offset,20
第一个参数$offset 是(offset)偏移量
第二个参数20表示取记录个数

明白了原理后
推荐使用
antidestiny(周水水)的函数

function getpage($sql,$page_size=20)
{
global $page,$totalpage,$sums; //out param
...
}

function showbar($string="")
{
global $page,$totalpage;
...
}
使用
getpage()前保证程序使用?page=** 传递页数
showbar()显示分页链接

或着
erldy(我还是我) 的类功能更好

erldy实例部分可能用了phplib执行sql语句:
$sql = "select count(*) from $tbl";
$db->query($sql);
$db->next_record();
$recordcount = $db->f(0);
把$db->query换成传统的mysql_query()
总之提供了类需要的属性值就行
$page->PageSize = 20; //每页记录个数
$page->Total = $recordcount; //总记录个数
类的
$page->OffSet()得到limit的两个参数


dongdong7 2005-05-30
  • 打赏
  • 举报
回复
$result=$db->sql_query($sql);
$total=$db->sql_numrows($result);


if(empty($page)){$page=1;}
$pagesize=50;

if ($total<=$pagesize){ $totalpage=1;}

if($total % $pagesize)
{
$totalpage=(int)($total/$pagesize)+1;
}
else
{
$totalpage=$total/$pagesize;
}
$totalpage;



$page_string='';
if($page==1){
$page_string.='第一页|上一页|';
}
else{
$page_string.="<a href=a.php.php?page=1">第一页</a>|<a href=a.php.php?page=".($page-1).">上一页</a>|";
}
if(($page==$totalpage) || ($totalpage==0)){
$page_string.='下一页|末页';
}
else
{
$page_string.="<a href=a.php.php?page=".($page+1)."&detail=".$detail.">下一页</a>|<a href=a.php.php?page=".$totalpage."&detail=".$detail.">最后一页</a>";
}
$page_string;
$template->set_var("nowpage",$page);
$template->set_var('totalpage',$totalpage);
$template->set_var('uppage',$page_string);
indexroot 2005-05-30
  • 打赏
  • 举报
回复
wy2000490(军) 的程序是不是应该在程序开头用
$str = "select * from fx
$query = mysql_query($str);
$num = mysql_num_rows($query);
得到总记录数

而不是
$str = "select * from fx order by id DESC limit $temp,20";
$query = mysql_query($str);
$num = mysql_num_rows($query); // 总的记录数



hityyp 2005-05-30
  • 打赏
  • 举报
回复
其实可以用存储过程,性能会好一点
剑风 2005-05-26
  • 打赏
  • 举报
回复
上PCONLINE.com.cn,上面有一篇文章是分页的,一步一步教你怎么写.
dllj 2005-05-26
  • 打赏
  • 举报
回复
谢谢楼上各位的指教,但您们写得太复杂了,偶的基础很差,看不太懂,拜托各位前辈给加上注释,在下将万分感谢.拜托各位了!!!
erldy 2005-05-26
  • 打赏
  • 举报
回复

<?
/*
_________________________________
CLASS NAME:SHOWPAGE
_________________________________
Copyright(c): ERLDY(稻草人)
Author: Arvan [E-mail:erldy@126.com QQ:103808353]
Create date: 2004-09-27
________________________________
*/
/*****
实例:
$sql = "select count(*) from $tbl";
$db->query($sql);
$db->next_record();
$recordcount = $db->f(0); //记录总数

$page = new ShowPage;
$page->PageSize = 20;
$page->Total = $recordcount;
$page->LinkAry = array(); //使用array("id"=>$id)这样的数组传递url变量
$sql = "select * from $tbl order by sortid desc limit ".$page->OffSet();
$db->query($sql);
$showpage = $page->ShowLink();


*****/
class ShowPage {

var $PageSize; //每页显示的记录数

var $Total; //记录总数

var $LinkAry; //Url参数数组

//取得总页数
function PageCount() {
$TotalPage = ($this->Total % $this->PageSize == 0) ? floor($this->Total / $this->PageSize) : floor($this->Total / $this->PageSize)+1;
return $TotalPage;
}
//取得当前页
function PageNum() {
//if (isset($_GET['page']))
$page = (isset( $_GET['page'])!="") ? $_GET['page'] : $page = 1;
return $page;
}
//查询语句定位指针
function OffSet() {
if ($this->PageNum() > $this->PageCount()) {
//$this->PageNum = $this->PageCount();
$pagemin = max(0,$this->Total - $this->PageSize - 1);
}else if ($this->PageNum() == 1){
$pagemin = 0;
}else {
$pagemin = min($this->Total - 1,$this->PageSize * ($this->PageNum() - 1));
}
return $pagemin . "," . $this->PageSize;
}
//定位首页
function FristPage() {
$Frist = ($this->PageNum() <= 1) ? "首页 " : "<a href=\"?page=1".$this->Url($this->LinkAry)."\">首页</a> ";
return $Frist;
}
//定位上一页
function PrePage() {
$prepage=$this->PageNum() - 1;
$Previous = ($this->PageNum() >= 2) ? " <a href=\"?page=".$prepage.$this->Url($this->LinkAry)."\">上一页</a> " : "上一页 ";
return $Previous;
}
//定位下一页
function NextPage() {
$nextpage = $this->PageNum() + 1;
$Next = ($this->PageNum() <= $this->PageCount()-1) ? " <a href=\"?page=".$nextpage.$this->Url($this->LinkAry)."\">下一页</a> " : "下一页 ";
return $Next;
}
//定位最后一页
function LastPage() {
$Last = ($this->PageNum() >= $this->PageCount()) ? "尾页 " : " <a href=\"?page=".$this->PageCount().$this->Url($this->LinkAry)."\">尾页</a> ";
return $Last;
}
//下拉跳转页面
function JumpPage() {
$Jump = " 当前第 <b>".$this->PageNum()."</b> 页 共 <b>".$this->PageCount()."</b> 页 跳到 <select name=page onchange=\"javascript:location=this.options[this.selectedIndex].value;\">";
for ($i=1; $i<=$this->PageCount(); $i++) {
if ($i==$this->PageNum())
$Jump .= "<option value=\"?page=".$i.$this->Url($this->LinkAry)."\" selected>$i</option>";
else
$Jump .="<option value=\"?page=".$i.$this->Url($this->LinkAry)."\">$i</option> ";
}
$Jump .= "</select> 页 <b>[".$this->PageSize."条/页]</b>";
return $Jump;
}
//URL参数处理
function Url($ary) {
$Linkstr = "";
if (count($ary) > 0) {
foreach ($ary as $key => $val) {
$Linkstr .= "&".$key."=".$val;
}
}
return $Linkstr;
}
//生成导航条
function ShowLink() {
return $this->FristPage().$this->PrePage().$this->NextPage().$this->LastPage().$this->JumpPage();
}
}


?>
antidestiny 2005-05-26
  • 打赏
  • 举报
回复
不好意思,上面漏写了一句,在$re=getpage($sql);后加$re=mysql_query($re);
antidestiny 2005-05-25
  • 打赏
  • 举报
回复
很久以前用过

function getpage($sql,$page_size=20)
{
global $page,$totalpage,$sums; //out param
$page = $_GET["page"];
//$eachpage = $page_size;
$pagesql = strstr($sql," from ");
$pagesql = "select count(*) as ids ".$pagesql;
$result = mysql_query($pagesql);
if($rs = mysql_fetch_array($result)) $sums = $rs[0];
$totalpage = ceil($sums/$page_size);
if((!$page)||($page<1)) $page=1;
$startpos = ($page-1)*$page_size;
$sql .=" limit $startpos,$page_size ";
return $sql;
}

function showbar($string="")
{
global $page,$totalpage;
$out="共<font color='red'><b>".$totalpage."</b></font>页  ";
$linkNum =4;
$start = ($page-round($linkNum/2))>0 ? ($page-round($linkNum/2)) : "1";
$end = ($page+round($linkNum/2))<$totalpage ? ($page+round($linkNum/2)) : $totalpage;
$prestart=$start-1;
$nextend=$end+1;
if($page<>1)
$out .= "<a href='?page=1&&".$string."'title=第一页>第一页</a> ";
if($start>1)
$out.="<a href='?page=".$prestart."' title=上一页>..<<</a> ";
for($t=$start;$t<=$end;$t++)
{
$out .= ($page==$t) ? "<font color='red'><b>[".$t."]</b></font> " : "<a href='?page=$t&&".$string."'>$t</a> ";
}
if($end<$totalpage)
$out.="<a href='?page=".$nextend."&&".$string."' title=下一页>>>..</a>";
if($page<>$totalpage)
$out .= " <a href='?page=".$totalpage."&&".$string."' title=最后页>最后页</a>";
return $out;
}

?>

使用方法:$re=getpage($sql)
while($r=mysql_fetch_array($re))
{
.....
}
echo showbar();


显示为: 共10页 第一页 << [4] 5 [6] >> 最后页
itian 2005-05-25
  • 打赏
  • 举报
回复
$limit = 20;
$page = $page ? $page:1;
$limitstart = ($page-1)*$limit;
$sql = "select * from fx limit $limitstart,$limit";
$rs = mysql_query($sql);
while($rows=mysql_fetch_array($rs))
{
.....
}

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧