首页 > 后端开发 > 正文

用PHP实现分页显示要求实现和图片一样的功能 PHP分页显示制作详解

2024-12-25 05:59:16 | 我爱编程网

小编今天整理了一些用PHP实现分页显示要求实现和图片一样的功能 PHP分页显示制作详解相关内容,希望能够帮到大家。

本文目录一览:

用PHP实现分页显示要求实现和图片一样的功能 PHP分页显示制作详解

用PHP实现分页显示要求实现和图片一样的功能

希望你能用得上!

<?php
function page($page,$total,$phpfile,$pagesize=10,$pagelen=7){
$pagecode = ’’;//定义变量,存放分页生成的HTML
$page = intval($page);//避免非数字页码
$total = intval($total);//保证总记录数值类型正确
if(!$total) return array();//总记录数为零返回空数组
$pages = ceil($total/$pagesize);//计算总分页
//处理页码合法性
if($page<1) $page = 1;
if($page>$pages) $page = $pages;
//计算查询偏移量
$offset = $pagesize*($page-1);
//页码范围计算
$init = 1;//起始页码数
$max = $pages;//结束页码数
$pagelen = ($pagelen%2)?$pagelen:$pagelen+1;//页码个数
$pageoffset = ($pagelen-1)/2;//页码个数左右偏移量

//生成html
$pagecode=’<div class="page">’;
$pagecode.="<span>$page/$pages</span>";//第几页,共几页
//如果是第一页,则不显示第一页和上一页的连接
if($page!=1){
$pagecode.="<a href=\"{$phpfile}?page=1\"><<</a>";//第一页
$pagecode.="<a href=\"{$phpfile}?page=".($page-1)."\"><</a>";//上一页
}
//分页数大于页码个数时可以偏移
if($pages>$pagelen){
//如果当前页小于等于左偏移
if($page<=$pageoffset){
$init=1;
$max = $pagelen;
}else{//如果当前页大于左偏移
//如果当前页码右偏移超出最大分页数
if($page+$pageoffset>=$pages+1){
$init = $pages-$pagelen+1;
}else{
//左右偏移都存在时的计算
$init = $page-$pageoffset;
$max = $page+$pageoffset;
}
}
}
//生成html
for($i=$init;$i<=$max;$i++){
if($i==$page){
$pagecode.=’<span>’.$i.’</span>’;
} else {
$pagecode.="<a href=\"{$phpfile}?page={$i}\">$i</a>";
}
}
if($page!=$pages){
$pagecode.="<a href=\"{$phpfile}?page=".($page+1)."\">></a>";//下一页
$pagecode.="<a href=\"{$phpfile}?page={$pages}\">>></a>";//最后一页
}
$pagecode.=’</div>’;
return array(’pagecode’=>$pagecode,’sqllimit’=>’ limit ’.$offset.’,’.$pagesize);
}
?>

函数参数:

$page 当前$_GET获得的页码
$total 总记录数
$phpfile 页码连接文件名
$pagesize 不用解释了吧 呵呵
$pagelen 最多显示几个页码 注意(奇数),对称嘛!
函数返回一个数组:
pagecode 索引对应的内容是 生成的HTML 代码
sqllimit 索引对应的是sql limit 后缀

if($page<=$pageoffset){
$init=1;
$max = $pagelen;
}else{//如果当前页大于左偏移
//如果当前页码右偏移超出最大分页数
if($page+$pageoffset>=$pages+1){
$init = $pages-$pagelen+1;
}else{
//左右偏移都存在时的计算
$init = $page-$pageoffset;
$max = $page+$pageoffset;
}
}
}
//生成html
for($i=$init;$i<=$max;$i++){
if($i==$page){
$pagecode.=’<span>’.$i.’</span>’;
} else {
$pagecode.="<a href=\"{$phpfile}?page={$i}\">$i</a>";
}
}
if($page!=$pages){
$pagecode.="<a href=\"{$phpfile}?page=".($page+1)."\">></a>";//下一页
$pagecode.="<a href=\"{$phpfile}?page={$pages}\">>></a>";//最后一页
}
$pagecode.="<input type=\"text\" size=\"3\" onkeydown=\"if(event.keyCode==13) {window.location.href=’{$phpfile}?page=’+this.value; return false;}\" /></div>";
return array(’pagecode’=>$pagecode,’sqllimit’=>’ limit ’.$offset.’,’.$pagesize);
}
?>

用PHP实现分页显示要求实现和图片一样的功能 PHP分页显示制作详解

PHP分页显示制作详解

前言

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

原理

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

每页多少条记录($PageSize)?

当前是第几页($CurrentPageID)?

现在只要再给我一个结果集 我就可以显示某段特定的结果出来

至于其他的参数 比如 上一页($PReviousPageID) 下一页($NextPageID) 总页数($numPages)等等 都可以根据前边这几个东西得到

以MySQL数据库为例 如果要从表内截取某段内容 sql语句可以用 select * from table limit offset rows 看看下面一组sql语句 尝试一下发现其中的规率

前 条记录 select * from table limit

第 至 条记录 select * from table limit

第 至 条记录 select * from table limit

……

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

select * from table limit ($CurrentPageID ) * $PageSize $PageSize

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

简单代码

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

<?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 .($page-1).'>上一页</a>|'; }

if( ($page == $page_count) || ($page_count == 0) ){

$page_string .= '下一页|尾页';

}

else{

$page_string .= '<a .($page+1).'>下一页</a>|<a .$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 ?page=1&numItems=".$pager->numItems."'>首页</a>|<a ?page=".$pager->PreviousPageID."&numItems=".$pager->numItems."'>上一页</a>|"; }

if ( $pager->isLastPage )

{

$turnover .= "下一页|尾页";

}

else

{

$turnover .="<a ?page=".$pager->NextPageID."&numItems=".$pager->numItems."'>下一页</a>|<a ?page=".$pager->numPages."&numItems=".$pager->numItems."'>尾页</a>"; }

?>

需要说明的地方有两个:

这个类仅仅处理数据,并不负责处理显示,因为我觉得将数据的处理和结果的显示都放到一个类里边实在是有些勉强。Tw.wINgWIT显示的时候情况和要求多变,不如自己根据类给出的结果处理,更好的方法是根据这个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

......

lishixinzhi/Article/program/PHP/201311/21304

我是做php的,想实现一个分页效果,就是循环出现页码,第11页的时候。显示从11到20页

我爱编程网(https://www.52biancheng.com)小编还为大家带来我是做php的,想实现一个分页效果,就是循环出现页码,第11页的时候。显示从11到20页的相关内容。

1.###page.php###
//获取page的值,假如不存在page,设置页数为1。
$page=isset($_GET['page'])?intval($_GET['page']):1;
$num=10; //设置每页显示几个数据
$total=mysql_num_rows(mysql_query("select * from XXX"));//计算所有数据总数
$pagenum=ceil($total/$num); //总数除以每页显示数,计算出页数
//假如传入的页数参数大于总页数,则显示错误信息
if($page>$pagenum || $page == 0){
echo "error";
Exit;
}
$offset=($page-1)*$num; //获取limit的第一个参数

2.###index.php####
require("page.php");//引入page.php文件
//循环显示数据库内容,倒序排列,定义每页显示多少条信息
$result = mysql_query(SELECT * FROM num order by id desc limit $offset,$num);
... ...
//循环显示分页页码开始
for($i=1;$i<=$pagenum;$i++){

$show=($i!=$page)?"<a href='tel.php?page=".$i."'>$i</a>":"<b>$i</b>";
Echo $show." ";
}

以上就是我爱编程网小编为大家带来的内容了,想要了解更多相关信息,请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
标签: PHP
与“用PHP实现分页显示要求实现和图片一样的功能 PHP分页显示制作详解”相关推荐
php分页封装函数 用PHP实现分页显示要求实现和图片一样的功能
php分页封装函数 用PHP实现分页显示要求实现和图片一样的功能

使用php分页技术后,点击第一页的按钮页面可顺利跳转,但是点击第二页或者之后页面的按钮,页面无法跳转看了这个代码,发现没有获取当前页码的代码,所以我改了一下,加了个获取当前页码的代码function showpagelink($pagesize,$result,$currentpage,$pageleft,$pageright,$phpfile) //分页显示函数,参数分别为每页记录数

2025-02-10 10:00:20
用PHP实现分页显示要求实现和图片一样的功能 PHP分页问题. 望大虾开示
用PHP实现分页显示要求实现和图片一样的功能 PHP分页问题. 望大虾开示

php分页跳转你这个太麻烦我给你推荐一个&lt;?phpclasspage{var$page_name="page";var$next_page='&gt;';//下一页var$pre_page='&lt;';//上一页var$first_page='&lt;&lt;首页';//首页var$last_page='尾页&gt;&gt;';//尾页var$p

2025-01-15 13:53:30
php分页跳转 PHP分页显示制作详解
php分页跳转 PHP分页显示制作详解

php分页跳转你这个太麻烦我给你推荐一个&lt;?phpclasspage{var$page_name="page";var$next_page='&gt;';//下一页var$pre_page='&lt;';//上一页var$first_page='&lt;&lt;首页';//首页var$last_page='尾页&gt;&gt;';//尾页var$p

2025-02-09 05:48:46
PHP如何实现分页显示?
PHP如何实现分页显示?

PHP如何实现分页显示?【文件名】:c_mysql_page.inc//【作用】:MySQL分页函数类//【作者】:天灰////【最后修改日期】:2001/07/16[cxx]//【变量定义规则】:‘C_’=字符型,‘I_’=整型,‘N_’=数字型,‘L_’=布尔型,‘A_’=数组型//-----------------------------------------------------

2024-12-10 13:35:26
求如何用php读取指定文件夹中的所有图片,在网页上分页显示,
求如何用php读取指定文件夹中的所有图片,在网页上分页显示,

glob语法PHP的glob函数是一个用于在文件系统中执行模式匹配的实用工具,其原型如下:glob(constchar*pattern,intflags,interrfunc(constchar*epath,inteerrno),glob_t*pglob);这个函数的核心参数是pattern,它是一个必需的字符串,用于定义检索模式。例如,你可以用它来查找以'.txt'结尾的

2025-02-09 21:39:13
求助。。。 php分页太多 怎么控制每次显示9个页码
求助。。。 php分页太多 怎么控制每次显示9个页码

求助。。。php分页太多怎么控制每次显示9个页码/** * 分页函数 * * @param $num 信息总数 * @param $curr_page 当前分页 * @param $perpage 每页显示数 * @param $urlrule URL规则 * @param $array 需要传递的数组,用于增加额外的方法 * @return 分页 */function pages($num

2024-11-26 01:33:29
用java图形用户界面实现: 编写一个日历程序,能实现显示日历等简单功能。 (运行后有窗体出现的那 用java图形用户界面实现: 编写一个日历程序,能实现显示日历等简单功能。
用java图形用户界面实现: 编写一个日历程序,能实现显示日历等简单功能。 (运行后有窗体出现的那 用java图形用户界面实现: 编写一个日历程序,能实现显示日历等简单功能。

用java程序编一个某年某月的日历packagemycalendar;importjava.util.*;classViewMonth{intmonth;intyear;ViewMonth(finalintdisplayMonth,finalintdisplayYear){month=displayMonth;year=displayYear;}priva

2024-06-21 22:47:47
PHP中模糊查询后实现分页时,只显示第一页信息,之后的页面信息不显示,求类似问题解决方法最好有代码,谢 PHP处理数组常用的几个函数
PHP中模糊查询后实现分页时,只显示第一页信息,之后的页面信息不显示,求类似问题解决方法最好有代码,谢 PHP处理数组常用的几个函数

PHP中模糊查询后实现分页时,只显示第一页信息,之后的页面信息不显示,求类似问题解决方法最好有代码,谢如:select*fromtablenamewhere条件limit0,10这句话的意思是只取搜索到的前10条记录,分页的关键就是要控制limit后面的两个数字0代表从第0条记录开始,10代表取10条数据(也就是一页里面有几条记录),这条语句相当于是分页的第一页,要获取第二页的语句是

2025-01-20 09:05:08