重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
php本身是没有分页概念的,分页是URL传参,然后通过mysql查询语句到数据库获取数据,然后实现的分页,url上的参数,通过PHP的$_GET都是可以获取到的。
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的永安网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
现在市面上的PHP框架基本都有PHP分页类,参照文档直接调用就好了,如果想看实现过程,可以去下载一个TP框架,然后打开里面的分页类查看里面的源代码。
第一种:利用Page类和limit方法
$User = M('User'); // 实例化User对象
import('ORG.Util.Page');// 导入分页类
$count = $User-where('status=1')-count();// 查询满足要求的总记录数
$Page = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数
$show = $Page-show();// 分页显示输出
// 进行分页数据查询 注意limit方法的参数要使用Page类的属性
$list = $User-where('status=1')-order('create_time')-limit($Page-firstRow.','.$Page-listRows)-select();
$this-assign('list',$list);// 赋值数据集
$this-assign('page',$show);// 赋值分页输出
$this-display(); // 输出模板
第二种:分页类和page方法的实现
$User = M('User'); // 实例化User对象
// 进行分页数据查询 注意page方法的参数的前面部分是当前的页数使用 $_GET[p]获取
$list = $User-where('status=1')-order('create_time')-page($_GET['p'].',25')-select();
$this-assign('list',$list);// 赋值数据集
import(“ORG.Util.Page”);// 导入分页类
$count = $User-where('status=1')-count();// 查询满足要求的总记录数
$Page = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数
$show = $Page-show();// 分页显示输出
$this-assign('page',$show);// 赋值分页输出
$this-display(); // 输出模板
带入查询条件
如果是POST方式查询,如何确保分页之后能够保持原先的查询条件呢,我们可以给分页类传入参数,方法是给分页类的parameter属性赋值:
import('ORG.Util.Page');// 导入分页类
$mapcount = $User-where($map)-count();// 查询满足要求的总记录数
$Page = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数
//分页跳转的时候保证查询条件
foreach($map as $key=$val) {
$Page-parameter .= "$key=".urlencode($val).'';
}
$show = $Page-show();// 分页显示输出
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
tda 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
因为在点击分页链接时表单数据不会传递会丢失而导致分页链接无效 解决的方法有几种。 第一种是用网站管理软件把搜索结果生成静态页面并保存一段时间。 第二种是考虑用session传递搜索信息。 当搜索信息表单提交并验证之后开启session. session_start(); $_SESSION[keywords] = $X; $_SESSION[searchscope] = $Y; ... //赋值搜索信息。关键字、搜索范围等等 在搜索结果页面开启session得到搜索信息再提交就行了 session_start(); $keywords=$_SESSION[keywords]; $searchscope$_SESSION[searchscope]; 第三种是用数据库存储搜索信息。
具体代码如下:
/**
* 获取分页的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 = $page1?1:$page;
//当前页大于总页数 则为总页数
$page = $page $pages ? $pages : $page;
//页数小当前页 则为当前页
$pages = $pages $page ? $page : $pages;
//计算开始页
$_start = $page - floor($_pageNum/2);
$_start = $_start1 ? 1 : $_start;
//计算结束页
$_end = $page + floor($_pageNum/2);
$_end = $_end$pages? $pages : $_end;
//当前显示的页码个数不够最大页码数,在进行左右调整
$_curPageNum = $_end-$_start+1;
//左调整
if($_curPageNum$_pageNum $_start1){
$_start = $_start - ($_pageNum-$_curPageNum);
$_start = $_start1 ? 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 .= 'lia title="第一页"«/a/li';
}else{
$_pageHtml .= 'lia title="第一页" href="'.$url.'page=1"«/a/li';
}*/
if($page1){
$_pageHtml .= 'lia 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 .= 'lia href="'.$url.'page='.$i.'"'.$i.'/a/li';
}
}
/*if($_end == $pages){
$_pageHtml .= 'lia title="最后一页"»/a/li';
}else{
$_pageHtml .= 'lia title="最后一页" href="'.$url.'page='.$pages.'"»/a/li';
}*/
if($page$_end){
$_pageHtml .= 'lia title="下一页" href="'.$url.'page='.($page+1).'"»/a/li';
}
$_pageHtml .= '/ul';
echo $_pageHtml;
}