php分页系统的实现原理分析

php分页系统的实现原理分析

首先我们来研究一下PHP分页的效果,再联想一下所需要的参数:

  一般网站有这样的分页: 首页 上一页 1 2 3 4 5 下一页 末页,当然有些网站还有像跳转到哪一页的表单,还有类似于2/10这样的效果,当然还有总共有?条新闻,您现在所在的是第?页等等,但所需要的参数可以概况为以下几个:

  1:总记录数 2:每页显示的记录数 3:可以分为多少页 4:偏移量 5:当前页码编号

  下面我们就要得到这几个参数:

  总记录数可以通过以下方式取得:
  1、mysql_query("SELECT COUNT(*) AS 自定义字段名 FROM 表名"),这条语句的作用是查询指定条件的记录,统计出记录条数放在一个查询结果中,对应的字段名是自定义字段名,然后再通过mysql_fetch_array()取得查询结果,再通过数组取值得到总记录数。
  2、当然也可以通过执行mysql_query()之后再用mysql_num_rows()也可以取得查询的总记录数。

  每页显示的记录数是自己自定义的,你可以每页显示5条或者10条等。

  可以分为多少页通过以下方式计算:
  可想而知道用总记录数除每页记录数便可得每页显示的记录数是吧,但有一个问题是如果总记录数是32,每页显示10条,那得到的结果会是3.2,不会显示3.2页吧,所以我们要通过ceil函数对结果进一取整,那么3.2便会变成4了。这样就OK了。

  偏移量是这么个原理:
  我们用mysql_query()的时候可以在后面跟上LIMIT '从第几条取','共取几条',这个偏移量就是从第几条取的意思,我们可以假设如果有32条记录,每页显示10条,那么第一页肯定是从第0条取共取10条,就到第9条,那么点击下一页时会从第9条取取到19条,呵呵。就是这么个规律,我们需要的是在点下一页时要传递一个$_GET['page'],这样我们就可以通过这个$_GET['page']计算出从第几条取,那么可以通过$_GET['page']-1再乘以每页显示的记录数便可得到这个偏移量,可见这个偏移量是动态变换的,所在我们要用一个变量,让它点下一页或上一页的时候会变。

  当前页码编号就很简单了:
  我们可以用一个for循环实现的:
  for($i=1;$i<=$totalpage;$i++) //这个$totalpage是我们总共的分页数
  {
    echo $i . "  ";
  }
  当然我们还有上一页下一页,上一页我们可以通过当前页的$_GET['page']-1,下一页当然就是加1了,为了使我们的程序更友好,我们可以加上更多的判断,比如如果在第一页的时候我们可以上一页这个超连接取消或者不显示,当然还有下一页,包括当前页面等等,这些就在于自己了。


好了,闲余之时,留此一笔,希望不懂的可以瞅瞅,可能有错误或疏漏之处,肯请指正:my qq:345606509


以下的代码可以作为参考:


[复制到剪切板]
CODE:
<?php
include 'conn.php';
$id $_GET['id'];
$result mysql_query('SELECT COUNT(*) AS total FROM news WHERE cateid="'.$id.'"');
$num mysql_fetch_array($result,MYSQL_ASSOC);
$pagesize 5;
$totalpage ceil($num['total']/$pagesize);
mysql_num_rows
if(!isset($_GET['page']))
{
$page 1;
}
else
{
$page $_GET['page'];
}

$offset = ($page-1)*$pagesize;

$result mysql_query('SELECT * FROM news WHERE cateid='.$id.' ORDER BY id DESC LIMIT '.$offset.','.$pagesize);

?>
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"[/color][url=http://www.w3.org/TR/html4/loose.dtd][color=darkslategray]http://www.w3.org/TR/html4/loose.dtd[/color][/url][color=darkslategray]"
>
<
html>
<
head>
<
meta http-equiv="Content-Type" c>
<
title>无标题文档</title>
</
head>
<
body>
<
table border="0" cellpadding="4" cellspacing="1" bgcolor="#FFCCCC">
<?
php
while($row mysql_fetch_array($result))
{
?>
  <
tr>
    <
td bgcolor="#FFFFFF"><a href="newsview.php?page=<?php echo $row['id'];?>"><?php echo $row['title'];?></a></td>
  </
tr>
<?
php
}
?>
</
table>

<
a href="newslist.php?id=<?php echo $id;?>&page=1">首页</a>
<?
php
if($page 1)
{
?>
<
a href="newslist.php?id=<?php echo $id;?>&page=<?php echo $page-1;?>">上一页</a>
<?
php
}
?>

<?
php
for($i=1;$i<=$totalpage;$i++)
{
echo 
'<a href="newslist.php?id='.$id.'&page='.$i.'">'$i '</a> ';
}
?>

<?
php
if($page $totalpage)
{
?>
<
a href="newslist.php?id=<?php echo $id;?>&page=<?php echo $page+1;?>">下一页</a>
<?
php
}
?>
<
a href="newslist.php?id=<?php echo $id;?>&page=<?php echo $totalpage;?>">末页</a>
</
body>
</
html> ;

挺详细的
毕业了。。。

请问有没有搜索后的分页思路?或者代码?