首页 > 后端开发 > 正文

php分页代码 怎么写

2024-07-21 09:41:43 | 我爱编程网

最近经常有小伙伴私信询问php分页代码 怎么写相关的问题,今天,我爱编程网小编整理了以下内容,希望可以对大家有所帮助。

本文目录一览:

php分页代码 怎么写

php分页代码 怎么写

Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。

一、分页程序的原理

分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page)。有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。

二、主要代码解析

$pagesize=10; //设置每一页显示的记录数
$conn=mysql_connect("localhost","root",""); //连接数据库
$rs=mysql_query("select count(*) from tb_product",$conn); //取得记录总数$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];

//计算总页数

$pages=intval($numrows/$pagesize);

//判断页数设置

if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
$page=1; //否则,设置为第一页
}

三、创建用例用表myTable

create table myTable(id int NOT NULL auto_increment,news_title varchar(50),news_cont text,add_time datetime,PRIMARY KEY(id))

四、完整代码

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

<body>
<?php
$conn=mysql_connect("localhost","root","");
//设定每一页显示的记录数
$pagesize=1;
mysql_select_db("mydata",$conn);
//取得记录总数$rs,计算总页数用
$rs=mysql_query("select count(*) from tb_product",$conn);
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//计算总页数

$pages=intval($numrows/$pagesize);
if ($numrows%$pagesize)
$pages++;
//设置页数
if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
//设置为第一页
$page=1;
}
//计算记录偏移量
$offset=$pagesize*($page - 1);
//读取指定记录数
$rs=mysql_query("select * from myTable order by id desc limit $offset,$pagesize",$conn);
if ($myrow = mysql_fetch_array($rs))
{
$i=0;
?>
<table border="0" width="80%">
<tr>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">标题</td>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">发布时间</td>
</tr>
<?php
do {
$i++;
?>
<tr>
<td width="50%"><?=$myrow["news_title"]?></td>
<td width="50%"><?=$myrow["news_cont"]?></td>
</tr>
<?php
}
while ($myrow = mysql_fetch_array($rs));
echo "</table>";
}
echo "<div align='center'>共有".$pages."页(".$page."/".$pages.")";
for ($i=1;$i< $page;$i++)
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
echo "[".$page."]";
for ($i=$page+1;$i<=$pages;$i++)
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
echo "</div>";
?>
</body>
</html>

五、总结

本例代码在windows2000 server+php4.4.0+mysql5.0.16上运行正常。该示例显示的分页格式是[1][2][3]…这样形式。假如想显示成“首页 上一页 下一页 尾页”这样形式,请加入以下代码:

$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;

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

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

其实,写分页显示代码是很简单的,只要掌握了它的工作原理。希望这篇文章能够带给那些需要这方面程序web程序员的帮助。

php分页代码 怎么写

求php分页代码

////////////////////////////////分页/////////////////////////////
$pageListNum=20;//每页显示10条
$totalPage=0;//总页数
$page=isset($page)?(int)$page:1;//当前页
$start=($page-1)*$pageListNum;//起始编号

$totalPage=ceil($pageNum/$pageListNum);
require_once(WEB_CLASS.'/page_class.php');
$page=new PageClass($page,$totalPage);
$showpage=$page->showPage();
echo $showpage;
///////////////page_class.php////////////////////////
<?php

header("Content-Type:text/html;charset=utf8");
/**
* 分页类
* URL有多个参数也能分页,还能自定义分页样式
* php>=5.0

* @version 0.1.1
* @copyright 2006-2010
* @package class
*/
class PageClass{
private $url;
private $cpage;
private $totalPage;
private $tpl;
/**
* PageClass的构造函数
* 模板说明:{index}表示首页 {pagelist}链接列表 {option}下拉列表框 {next}下一页 {pre}上一页 {cur}当前页 {index=首页}表示首页的链接文字为首页,即=号后为链接文字,不过这对{pagelist}{option}无效
* @param string $cpage 当前页
* @param string $tatolPage 总页数
* @param string $tpl 模板.
* @param string $url 要分页的url 默认为当前页
* @return PageClass
*/
function __construct($cpage,$totalPage,$tpl='',$url=''){
$this->cpage=$cpage;
$this->totalPage=$totalPage;
if(strlen($tpl)==0){
$this->tpl="{cur=当前页}{index=首页} {pre=上一页} {next=下一页} {end=最后页} {option}"; //中文分页
}else{
$this->tpl=$tpl;
}
if(strlen($url)==0){
$this->url=$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];
}else{
$this->url=$url;
}
}
/**
* 函数showPage,返回生成的分页HTML
* @return string
*/
function showPage(){
//显示分页
$urlOption=array();//url的后缀如:?page=1&typeid=1
$parse_url=parse_url($this->url);
$urlMain=''.$parse_url['path'];
if($parse_url['query']){
//url有参数
$urlArr=split('&',$parse_url['query']);
if(is_array($urlArr)){
foreach($urlArr as $key=>$value){
$c=split('=',$value);
if($c[0]==page){
}else{
array_push($urlOption,$c[0].'='.$c[1]);
}
}
}
}else{
//url没有参数
//if($this->cpage<$this->totalPage){
// array_push($urlOption,"page=2");
//}
}
if(is_array($urlOption)){
$urlOptionStr_t=implode('&',$urlOption);
}
if(strlen($urlOptionStr_t)>0){
$urlOptionStr.='&'.$urlOptionStr_t;
}

$tplcontent=$this->tpl;//分页模板
$showPage=$tplcontent;
//首页
if (preg_match_all('/\{index=([^}]*+)\}/', $tplcontent, $matches)){
$t_tpl=$matches[0][0]; //模板内容
$t_word=$matches[1][0]; //分页字段
$indexStr='<a href="'.$urlMain.'?page=1'.$urlOptionStr.'">'.$t_word.'</a>';
$showPage=str_replace($t_tpl,$indexStr,$showPage);
}
//当前页
if (preg_match_all('/\{cur=([^}]*+)\}/', $tplcontent, $matches)){
$t_tpl=$matches[0][0];
$t_word=$matches[1][0];
$curStr=$t_word.$this->cpage.'/'.$this->totalPage;
$showPage=str_replace($t_tpl,$curStr,$showPage);
}

//末页
if (preg_match_all('/\{end=([^}]*+)\}/', $tplcontent, $matches)){
$t_tpl=$matches[0][0];
$t_word=$matches[1][0];
$endPage='<a href="'.$urlMain.'?page='.$this->totalPage.$urlOptionStr.'">'.$t_word.'</a>';
$showPage=str_replace($t_tpl,$endPage,$showPage);
}
//上一页
if (preg_match_all('/\{pre=([^}]*+)\}/', $tplcontent, $matches)){
$t_tpl=$matches[0][0];
$t_word=$matches[1][0];
if($this->cpage>1){
$prePage='<a href="'.$urlMain.'?page='.($this->cpage-1).$urlOptionStr.'">'.$t_word.'</a>';
}else{
$prePage=$t_word;
}
$showPage=str_replace($t_tpl,$prePage,$showPage);
}
//下一页
if (preg_match_all('/\{next=([^}]*+)\}/',$tplcontent, $matches)){
$t_tpl=$matches[0][0];
$t_word=$matches[1][0];
if($this->cpage<$this->totalPage && $this->totalPage>1){
$nextPage=' <a href="'.$urlMain.'?page='.($this->cpage+1).$urlOptionStr.'">'.$t_word.'</a>';
}else{
$nextPage=$t_word;
}
$showPage=str_replace($t_tpl,$nextPage,$showPage);
}
//链接列表
if (preg_match("{pagelist}",$tplcontent)){
for($i=1;$i<$this->totalPage+1;$i++){
$linkPage.=' <a href="'.$urlMain.'?page='.$i.$urlOptionStr.'">'.$i.'</a>';
}
$showPage=str_replace('{pagelist}',$linkPage,$showPage);
}
//下拉框分页
if (preg_match("{option}",$tplcontent)){
$optionPage='<select onchange="javascript:window.location='."'".$urlMain."?page='+this.options[this.selectedIndex].value+"."'$urlOptionStr'".';">';
for($i=1;$i<$this->totalPage+1;$i++){
if($i==$this->cpage){
$optionPage.="<option selected='selected' value='$i'>第".$i."页</option>\n";
}else{
$optionPage.="<option value='$i'>第".$i."页</option>\n";
}
}
$optionPage.='</select>';
$showPage=str_replace('{option}',$optionPage,$showPage);
}
return $showPage;
}
}
?>

php分页代码 怎么写

PHP分页显示制作详解

我爱编程网(https://www.52biancheng.com)小编还为大家带来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

以上就是我爱编程网小编整理的内容,想要了解更多相关资讯内容敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“php分页代码 怎么写”相关推荐
谁来指点一下php通用分页函数该怎么写
谁来指点一下php通用分页函数该怎么写

谁来指点一下php通用分页函数该怎么写functionpage($sql,$pagesize){$nowpage=$_GET['nowpage'];//获取当前也$result=mysql_query($sql);//执行sql查询语句$total=mysql_num_rows($result);//总记录条数$totalpage=ceil($total/$pagesize)

2024-07-20 16:07:14
python怎么编写代码
python怎么编写代码

python怎么编写代码1、首先在Window上在安装Python时,已经已经安装了默认的交互式编程客户端,提示窗口:在python提示符中输入以下文本信息,然后按Enter键查看运行效果。2、然后,通过脚本参数调用解释器开始执行脚本,直到脚本执行完毕。当脚本执行完成后,解释器不再有效。所有Python文件将以 .py 为扩展名。将以下的源代码拷贝至test.py文件中。3、然

2023-12-25 23:43:03
用PHP编写留言版的代码 php this和self的区别
用PHP编写留言版的代码 php this和self的区别

用PHP编写留言版的代码这个小程序一共包含6个文件,其中index.php是程序入口、post.htm是留言表单、在lib文件夹里Model、View、Controller三个文件分别实现MVC,DataAccess是一个简单的数据库访问类。复制PHP内容到剪贴板PHP代码:&lt;?php/***一个用来访问MySQL的类*仅仅实现演示所需的基本功能,没有容错等

2024-07-21 02:42:19
李峋同款爱心代码python 李峋同款爱心代码源代码 李峋同款爱心代码怎么写
李峋同款爱心代码python 李峋同款爱心代码源代码 李峋同款爱心代码怎么写

画爱心的python代码我已经很努力了,但是要真的很好看爱心可能有点困难(除了贴图,但这毕竟不好,对吧)。以下为Python代码:fromturtleimport*speed(0)#速度,觉得太快可以调到1(1慢10快0最快)tracer(2)#显示速度,觉得太快可以调到1(同上)hideturtle()#隐藏画笔setup(500,500)#500×5

2024-01-03 19:53:02
python斐波那契数列代码怎么写
python斐波那契数列代码怎么写

python斐波那契数列代码怎么写如下所示。数学中有个著名的斐波那契数列(Fibonaccisequence),又称黄金分割数列,数学家列昂纳多·斐波那契(LeonardodaFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,这个数列中第一个数为0,第二个数为1,其后的每一个数都可由前两个数相加得到,如下所示:0,1,1,2,3,5,8,13,21,34,在数

2024-01-14 19:09:32
用记事本写java代码怎么运行?
用记事本写java代码怎么运行?

用记事本写java代码怎么运行?用记事本写完代码后运行方法如下:1、用浏览器打开用记事本编写的代码新建“文本文档”后,鼠标右键点击该文本文档,在菜单栏的“打开方式”选择“用记事本打开”,也可以设置默认打开方式为“记事本”;用记事本打开文本文档后,直接在该文档内根据自己的需要输入想要编辑的网页代码。2、记事本写java代码怎么运行首先,需要安装jdk并配置环境变量

2024-03-27 23:33:18
Python用什么软件写代码
Python用什么软件写代码

Python用什么软件写代码VSCode:这是一个免费、开源、跨平台的代码编辑器,由微软自主设计研发,界面风格和VS相似,但没有VS那么庞大臃肿,运行速度快、占用内存少,支持常见的自动补全、代码高亮、语法提示、GIT等功能,安装Python插件后,可以直接编辑运行Python程序。对于Python入门开发者来说,是非常不错的选择。SublimeText:是一个非常不错的代码编辑器

2024-02-17 00:43:02
如何在php中执行java代码?
如何在php中执行java代码?

linuxphp执行java失败linuxphp执行php三个应用领域?PHP技术主要应用于三个领域:01服务端脚本服务器脚本运行模式需要具备3个条件:php解析器(CGI或者服务器模块)、Web服务器、Web浏览器。具体执行流程:首先运行Web服务器,然后安装并配置php,最后可以用Web浏览器访问php程序的输出,即浏览服务端的php页面(或数据输出)。0

2024-05-28 03:18:20