好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

php数据分页功能 php数据分页功能有哪些

很多站长朋友们都不太清楚php数据分页功能,今天小编就来给大家整理php数据分页功能,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 PHP怎么制作分页 2、 php分页怎么弄? 3、 在php中如何对多条记录进行分页 4、 PHP显示很多数据库信息,如何自动分页呢?代码 5、 如何将php里面的数组内容进行分页显示出来? 6、 php实现分页功能 PHP怎么制作分页

方法/步骤

首先要了解下分页的原理即

SELECT * FROM table …… limit 开始位置 , 操作条数

开始位置从0开始

SELECT * FROM table …… limit 0 , 20

取最前面20条

SELECT * FROM table …… limit 10 , 20

11条到20条

其次分页要用的公式

得到公式

(当前页数 - 1 )X 每页条数 , 每页条数

Select * from table limit ($Page- 1) * $PageSize, $PageSize

还要了解parse_url()解析URL函数

parse_url() 是讲URL解析成有固定键值的数组的函数

$ua=parse_url("");

print_r($ua);

结果:

Array

(

[scheme] => http

[host] => hostname

[user] => username

[pass] => password

[path] => /path

[query] => arg=value

[fragment] => anchor

)

创建数据库bbs和表test有

CREATE TABLE `test` (

`id` int(11) NOT NULL auto_increment,

`name` varchar(50) character set gb2312 NOT NULL,

`sex` varchar(2) character set gb2312 NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

然后插入十几条测试数据即可

写mysql数据库连接代码保存conn.php文件里

代码如下

<?php

$conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误");

mysql_select_db("bbs", $conn);

mysql_query("set names 'GBK'"); //使用GBK中文编码;

function htmtocode($content) {

$content = str_replace("\n", "<br>", str_replace(" ", " ", $content));

return $content;

}

//$content=str_replace("'","'",$content);

//htmlspecialchars();

?>

写分页函数page.php

代码如下

<?php

function _PAGEFT($totle, $displaypg = 20, $url = '') {

global $page, $firstcount, $pagenav, $_SERVER;

$GLOBALS["displaypg"] = $displaypg;

if (!$page)

$page = 1;

if (!$url) {

$url = $_SERVER["REQUEST_URI"];

}

//URL分析:

$parse_url = parse_url($url);

$url_query = $parse_url["query"]; //单独取出URL的查询字串

if ($url_query) {

$url_query = ereg_replace("(^|)page=$page", "", $url_query);

$url = str_replace($parse_url["query"], $url_query, $url);

if ($url_query)

$url .= "page";

else

$url .= "page";

} else {

$url .= "?page";

}

$lastpg = ceil($totle / $displaypg); //最后页,也是总页数

$page = min($lastpg, $page);

$prepg = $page -1; //上一页

$nextpg = ($page == $lastpg ? 0 : $page +1); //下一页

$firstcount = ($page -1) * $displaypg;

//开始分页导航条代码:

$pagenav = "显示第 <B>" . ($totle ? ($firstcount +1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B> 条记录,共 $totle 条记录";

//如果只有一页则跳出函数:

if ($lastpg <= 1)

return false;

$pagenav .= " <a href='$url=1'>首页</a> ";

if ($prepg)

$pagenav .= " <a href='$url=$prepg'>前页</a> ";

else

$pagenav .= " 前页 ";

if ($nextpg)

$pagenav .= " <a href='$url=$nextpg'>后页</a> ";

else

$pagenav .= " 后页 ";

$pagenav .= " <a href='$url=$lastpg'>尾页</a> ";

//下拉跳转列表,循环列出所有页码:

$pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";

for ($i = 1; $i <= $lastpg; $i++) {

if ($i == $page)

$pagenav .= "<option value='$i' selected>$i</option>\n";

else

$pagenav .= "<option value='$i'>$i</option>\n";

}

$pagenav .= "</select> 页,共 $lastpg 页";

}

include("conn.php");

$result=mysql_query("SELECT * FROM `test`");

$total=mysql_num_rows($result);

//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉).

_PAGEFT($total,5);

echo $pagenav;

$result=mysql_query("SELECT * FROM `test` limit $firstcount,$displaypg ");

while($row=mysql_fetch_array($result)){

echo "<hr><b>".$row[name]." | ".$row[sex];

}

?>

调用数据和分页list.php

<?php

/**

* 爱微网

*/

include("conn.php");

$pagesize=5;

$url=$_SERVER["REQUEST_URI"];

$url=parse_url($url);

$url=$url[path];

$numq=mysql_query("SELECT * FROM `test`");

$num = mysql_num_rows($numq);

if($_GET[page]){

$pageval=$_GET[page];

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

$page.=',';

}

if($num > $pagesize){

if($pageval<=1)$pageval=1;

echo "共 $num 条".

" <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>";

}

echo $SQL="SELECT * FROM `test` limit $page $pagesize ";

$query=mysql_query($SQL);

while($row=mysql_fetch_array($query)){

echo "<hr><b>".$row[name]." | ".$row[sex];

}

?>

注意事项

注意分页公式写法你只要记住即可;

(当前页数 - 1 )X 每页条数 , 每页条数;

Select * from table limit ($Page- 1) * $PageSize, $PageSize;

注意三个代码文件在同一个目录下;

主要是最后的list.php调用代码要细看很有用。

php分页怎么弄?

原理:

1.设定每页显示数

$num = 15;

2.获取数据总数计算总页数

3.通过get方法获取页码,无获取值页码为1,超过最大页数为最大页面数

$page = $_GET['page'] ? $_GET['page'] : 1;

4.通过页码来计算当前显示起始记录

$start = $page*$num-1;

5.通过sql语句查询

query("select * from tablename limit $start,$num");

然后输出就行了

页面上可以循环输出1~总页数 这些数字来实现翻页,也可以用其他方法

比较方便的方法是,可以去找一个分页类

在php中如何对多条记录进行分页

方法一:讲sql查询进行分页进行,需要调用几个函数,具体见脚本:

1.pager.class.php

<?php

class pager {

public $sql; //SQL查询语句

public $datanum; //查询所有的数据总记录数

public $page_size; //每页显示记录的条数

protected $_errstr;

protected $_conn;

protected $_query_id;

public function query($query)///这个函数有问题,暂时可以不用

{

$ret = false;

if (!empty($query)) {

if ($this->_conn === false || !is_resource($this->_conn)) {

warningLog(__METHOD__ . ': query sql with no connection', true);

return false;

}

$this->_query_id = @mysql_query($query, $this->_conn);

if ($this->_query_id === false) {

$this->_errstr = @mysql_error();

$ret = false;

} else {

$this->_errstr = 'SUCCESS';

$ret = $this->_query_id;

}

}

$msg = ($ret === false) ? 'false' : strval($ret);

debugLog(__METHOD__.": [$msg] returned for sql query [$query]");

return $ret;

}

function __construct($sql,$page_size) {

$result = mysql_query($sql);

$datanum = mysql_num_rows($result);

$this->sql=$sql;

$this->datanum=$datanum;

$this->page_size=$page_size;

}

//当前页数

public function page_id() {

if($_SERVER['QUERY_STRING'] == ""){

return 1;

}elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=") == 0){

return 1;

}else{

return intval(substr($_SERVER['QUERY_STRING'],8));

}

}

//剩余url值

public function url() {

if($_SERVER['QUERY_STRING'] == ""){

return "";

}elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=") == 0){

return "".$_SERVER['QUERY_STRING'];

}else{

return str_replace("page_id=".$this->page_id(),"",$_SERVER['QUERY_STRING']);

}

}

//总页数

public function page_num() {

if($this->datanum == 0){

return 1;

}else{

return ceil($this->datanum/$this->page_size);

}

}

//数据库查询的偏移量

public function start() {

return ($this->page_id()-1)*$this->page_size;

}

//数据输出

public function sqlquery() {

return $this->sql." limit ".$this->start().",".$this->page_size;

}

//获取当前文件名

private function php_self() {

return $_SERVER['PHP_SELF'];

}

//上一页

private function pre_page() {

if ($this->page_id() == 1) { //页数等于1

return "<a href=".$this->php_self()."?page_id=1".$this->url().">上一页</a> ";

}elseif ($this->page_id() != 1) { //页数不等于1

return "<a href=".$this->php_self()."?page_id=".($this->page_id()-1).$this->url().">上一页</a> ";

}

}

//显示分页

private function display_page() {

$display_page = "";

if($this->page_num() <= 10){ //小于10页

for ($i=1;$i<=$this->page_num();$i++) //循环显示出页面

$display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";

return $display_page;

}elseif($this->page_num() > 10){ //大于10页

if($this->page_id() <= 6){

for ($i=1;$i<=10;$i++) //循环显示出页面

$display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";

return $display_page;

}elseif(($this->page_id() > 6) ($this->page_num()-$this->page_id() >= 4)){

for ($i=$this->page_id()-5;$i<=$this->page_id()+4;$i++) //循环显示出页面

$display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";

return $display_page;

}elseif(($this->page_id() > 6) ($this->page_num()-$this->page_id() < 4)){

for ($i=$this->page_num()-9;$i<=$this->page_num();$i++) //循环显示出页面

$display_page .= "<a href=".$this->php_self()."?page_id=".$i.$this->url().">".$i."</a> ";

return $display_page;

}

}

}

//下一页

private function next_page() {

if ($this->page_id() < $this->page_num()) { //页数小于总页数

return "<a href=".$this->php_self()."?page_id=".($this->page_id()+1).$this->url().">下一页</a> ";

}elseif ($this->page_id() == $this->page_num()) { //页数等于总页数

return "<a href=".$this->php_self()."?page_id=".$this->page_num().$this->url().">下一页</a> ";

}

}

// 设置分页信息

public function set_page_info() {

$page_info = "共".$this->datanum."条 ";

$page_info .= "<a href=".$this->php_self()."?page_id=1".$this->url().">首页</a> ";

$page_info .= $this->pre_page();

$page_info .= $this->display_page();

$page_info .= $this->next_page();

$page_info .= "<a href=".$this->php_self()."?page_id=".$this->page_num().$this->url().">尾页</a> ";

$page_info .= "第".$this->page_id()."/".$this->page_num()."页";

return $page_info;

}

}

?>

2.脚本2:

<?php

//类的用法

// 读取分页类

include("pager.class.php");

// 数据库连接初始化

// $db = new mysql();

$impeach_host = '10.81.43.139';

$impeach_usr = 'vmtest15';

$impeach_passwd = 'vmtest15';

$impeach_name = 'ufeature';

$impeach_con = mysql_connect($impeach_host, $impeach_usr, $impeach_passwd) or

die("Can't connect ".mysql_error());

mysql_select_db($impeach_name, $impeach_con);

// 这是一个sql查询语句,并得到查询结果

$sql = "select word from ufeature.spam_accuse_word_list where flag='0'";

// 分页初始化

$page = new pager($sql,20);

// 20是每页显示的数量

// $res_1 = mysql_query($sql) or

// die("Can't get result ".mysql_error());

$result=mysql_query($page->sqlquery());

while($info = mysql_fetch_array($result,MYSQL_ASSOC)){

// while($info = mysql_fetch_array($res_1, MYSQL_ASSOC)){

echo $info["word"]."<br/>";

}

// 页码索引条

echo $page->set_page_info();

?>

方法二:使用ajax的方法

1、首先了解SQL语句中的limit用法

SELECT * FROM table …… limit 开始位置 , 操作条数 (其中开始位置是从0开始的)

例子

取前20条记录:SELECT * FROM table …… limit 0 , 20

从第11条开始取20条记录:SELECT * FROM table …… limit 10 , 20

LIMIT n 等价于 LIMIT 0,n。

如select * from table LIMIT 5; //返回前5行,和select * from table LIMIT 0,5一样

2、分页原理

所谓分页显示,也就是讲数据库中的结果集,一段一段显示出来

怎么分段,当前在第几段 (每页有几条,当前再第几页)

前10条记录:select * from table limit 0,10

第11至20条记录:select * from table limit 10,10

第21至30条记录:select * from table limit 20,10

分页公式:

(当前页数 - 1 )X 每页条数 , 每页条数

Select * from table limit ($Page- 1) * $PageSize, $PageSize

3、$_SERVER["REQUEST_URI"]函数

预定义服务器变量的一种,所有$_SERVER开头的都叫做预定于服务器变量。

REQUEST_URI的作用是取得当前URI,也就除域名外后面的完整的地址路径。

例子:

当前页为:;cid=22

echo $_SERVER["REQUEST_URI"]

结果为:/home.php?id=23cid=22

4、parse_url()解析URL函数

parse_url() 是讲URL解析成有固定键值的数组的函数

例子

$ua=parse_url("");

print_r($ua);

结果:

Array

(

[scheme] => http ;协议

[host] => hostname ;主机域名

[user] => username ;用户

[pass] => password ;密码

[path] => /path ;路径

[query] => arg=value ;取参数

[fragment] => anchor ;

)

5、代码实例

这个一个留言的分页,分为3个部分,一个是数据库设计,一个是连接页面,一个是显示页面。

(1)设计数据库

设计数据库名为bbs,有一个数据表为message,里面包含title,lastdate,user,content等字段,分别表示留言标题,留言日前,留言人,留言的内容

(2)连接页面

<?php

$conn = @ mysql_connect("localhost", "root", "123456") or die("数据库链接错误");

mysql_select_db("bbs", $conn);

mysql_query("set names 'GBK'"); //使用GBK中文编码;

//将空格,换行转换为HTML可解析

function htmtocode($content) {

$content = str_replace("\n", "<br>", str_replace(" ", " ", $content)); //两个str_replace嵌套

return $content;

}

//$content=str_replace("'","‘",$content);

//htmlspecialchars();

?>

(3)显示页面

<?php

include("conn.php");

$pagesize=2; //设置每页显示2个记录

$url=$_SERVER["REQUEST_URI"];

$url=parse_url($url);

$url=$url[path];

$numq=mysql_query("SELECT * FROM `message`");

$num = mysql_num_rows($numq);

if($_GET){

$pageval=$_GET;

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

$page.=',';

}

if($num > $pagesize){

if($pageval<=1)$pageval=1;

echo "共 $num 条".

" <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>";

}

$SQL="SELECT * FROM `message` limit $page $pagesize ";

$query=mysql_query($SQL);

while($row=mysql_fetch_array($query)){

?>

<table width=500 border="0" cellpadding="5" cellspacing="1" bgcolor="#add3ef">

<tr bgcolor="#eff3ff">

<td>标题:<?php echo $row[title]?></td> <td>时间:<?php echo $row[lastdate]?></td>

</tr>

<tr bgcolor="#eff3ff">

<td> 用户:<?php echo $row[user]?></td><td></td>

</tr>

<tr>

<td>内容:<?php echo htmtocode($row[content]);?></td>

</tr>

<br>

</table>

<?php

}

?>

方法3:

<script>

function viewpage(p){

if(window.XMLHttpRequest){

var xmlReq = new XMLHttpRequest();

} else if(window.ActiveXObject) {

var xmlReq = new ActiveXObject('Microsoft.XMLHTTP');

}

var formData = "page="+p;

xmlReq.onreadystatechange = function(){

if(xmlReq.readyState == 4){

document.getElementByIdx_x('content2').innerHTML = xmlReq.responseText;

}

}

xmlReq.open("post", "hotel_list.php", true);

xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

xmlReq.send(formData);

return false;

}

</script>

脚本2:

header("Content-Type:text/html;charset=GB2312");

$pagesize=10;

//echo $_POST['page'];

$result = mysql_query("Select count(DISTINCT hotelname) FROM ".TBL_HOTELS);

$myrow = mysql_fetch_array($result);

$numrows=$myrow[0];

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

if ($numrows%$pagesize)

$pages++;

if (isset($_POST['page'])){

$page=intval($_POST['page']);

}

else{

//设置为第一页

$page=1;

}

$first=1;

$prev=$page-1;

$next=$page+1;

$last=$pages;

//计算记录偏移量

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

//读取指定记录数

$result=mysql_query("select `hotelname` , count( * ) from ".TBL_HOTELS." GROUP BY `hotelname` order by id desc limit $offset,$pagesize");

$num = mysql_num_rows($result);

while ($row = mysql_fetch_array($result,MYSQL_NUM)) {

$hotelname[] = $row[0];

$countpeople[] = $row[1];

}

for($a=0;$a<$num;$a++)

{

//$result=mysql_query("select count(title) from " . TBL_Comments ." where `title`=\"".$title[$a]."\"");

//$row = mysql_fetch_row($result);

echo "<TABLE style=\"MARGIN-BOTTOM: 20px\" cellSpacing=0 cellPadding=0 width=100% border=0>\n";

echo "<TBODY>\n";

echo "<TR>\n";

echo "<TD style=\"PADDING-TOP: 5px\" vAlign=top align=left width=80>\n";

//rating_bar($title[$a],5);

echo "</TD>\n";

echo "<TD style=\"PADDING-TOP: 5px\" align=left width=100%><A title=$hotelname[$a] style=\"FONT-SIZE: 14px\" href=#>$hotelname[$a]</A>\n";

echo "</TD></TR>\n";

echo " <TR>\n";

echo "<TD></TD>\n";

echo "<TD style=\"PADDING-LEFT: 0px\">\n";

echo "<IMG src=\"images/comment.gif\" border=0> 推荐人数:($countpeople[$a]) |\n";

echo "<SPAN>平均分:<STRONG></STRONG> (".$count."票) | 评论数:()</SPAN>\n";

echo "</TD></TR></TBODY></TABLE>\n";

}

echo "<TABLE style=\"MARGIN-TOP: 30px\" cellSpacing=0 cellPadding=0 width=\"100%\"";

echo "border=0>";

echo "<TBODY><TR><TD colSpan=3 height=20>";

echo "<DIV align=center>";

echo "<P align=left><FONT color=red>第".$page."页/总".$pages."页 | 总".$numrows."条</FONT> | ";

if ($page>1) echo "<a onclick=\"viewpage(".$first.")\" href='#'>首页</a> | ";

if ($page>1) echo "<a onclick=\"viewpage(".$prev.")\" href='#'>上页</a> | ";

if ($page<$pages) echo "<a onclick=\"viewpage(".$next.")\" href='#'>下页</a> | ";

if ($page<$pages) echo "<a onclick=\"viewpage(".$last.")\" href='#'>尾页</a>";

echo "转到第 <INPUT maxLength=3 size=3 value=1 name=goto_page> 页 <INPUT hideFocus onclick=\"viewpage(document.all.goto_page.value)\" type=button value=Go name=cmd_goto>";

echo "</P></DIV></TD></TR></TBODY></TABLE>";

PHP显示很多数据库信息,如何自动分页呢?代码

PHP代码如下:

/*

Author:默默

Date :2006-12-03

*/

$page=isset($_GET['page'])?intval($_GET['page']):1; //这句就是获取page=18中的page的值,假如不存在page,那么页数就是1。

$num=10; //每页显示10条数据

$db=mysql_connect("host","name","pass"); //创建数据库连接

$select=mysql_select_db("db",$db); //选择要操作的数据库

/*

首先咱们要获取数据库中到底有多少数据,才能判断具体要分多少页,具体的公式就是

总数据数除以每页显示的条数,有余进一。

也就是说10/3=3.3333=4 有余数就要进一。

*/

$total=mysql_num_rows(mysql_query("select id from table")); //查询数据的总数,id是数据库中的一个自动赋值的字段

$pagenum=ceil($total/$num); //获得总页数

//假如传入的页数参数大于总页数,则显示错误信息

If($page>$pagenum || $page == 0){

Echo "Error : Can Not Found The page .";

Exit;

}

$offset=($page-1)*$num; //获取limit的第一个参数的值,假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。

$info=mysql_query("select name from table limit $offset,$num"); //获取相应页数所需要显示的数据,name是数据里的一个字段

While($it=mysql_fetch_array($info)){

Echo $it['name']."

";

} //显示数据

For($i=1;$i<=$pagenum;$i++){

$show=($i!=$page)?"$i":"$i";

Echo $show." ";

}

/*显示分页信息,假如是当页则显示粗体的数字,其余的页数则为超连接,假如当前为第三页则显示如下

1 2 3 4 5 6

*/

?>

如何将php里面的数组内容进行分页显示出来?

1、前言

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

2、原理

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

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

当前是第几页($CurrentPageID)?

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

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

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

前10条记录:select * from table limit 0,10

第11至20条记录:select * from table limit 10,10

第21至30条记录:select * from table limit 20,10

……

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

select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize

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

3、简单代码

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

<?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 ) //如果总数据量小于$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 href="/?page='."($page-1).'>上一页</a>|';

}

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

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

}

else{

$page_string .= '<a href="/?page='."($page+1).'>下一页</a>|<a href="/?page='."$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 )

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 )

if ( !$this->isFirstPage )

}

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 href='?page=1numItems=".$pager->numItems."'>首页</a>|<a href="/?page=".$pager->PreviousPageID."numItems=".$pager->numItems."'>上一页</a>|";

}

if ( $pager->isLastPage )

{

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

}

else

{

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

}

?>

需要说明的地方有两个:

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

......

所以要在类里边获取结果的时候需要使用pear db类的limitQuery方法。

ok,写完收功,希望花时间看完这些文字的你不觉得是浪费了时间。

回答者

另外,虚机团上产品团购,超级便宜

php实现分页功能

具体代码如下:

/**

* 获取分页的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 = $page<1?1:$page;

//当前页大于总页数 则为总页数

$page = $page > $pages ? $pages : $page;

//页数小当前页 则为当前页

$pages = $pages < $page ? $page : $pages;

//计算开始页

$_start = $page - floor($_pageNum/2);

$_start = $_start<1 ? 1 : $_start;

//计算结束页

$_end = $page + floor($_pageNum/2);

$_end = $_end>$pages? $pages : $_end;

//当前显示的页码个数不够最大页码数,在进行左右调整

$_curPageNum = $_end-$_start+1;

//左调整

if($_curPageNum<$_pageNum $_start>1){

$_start = $_start - ($_pageNum-$_curPageNum);

$_start = $_start<1 ? 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 .= '<li><a title="第一页">«</a></li>';

}else{

$_pageHtml .= '<li><a title="第一页" href="'.$url.'page=1">«</a></li>';

}*/

if($page>1){

$_pageHtml .= '<li><a 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 .= '<li><a href="'.$url.'page='.$i.'">'.$i.'</a></li>';

}

}

/*if($_end == $pages){

$_pageHtml .= '<li><a title="最后一页">»</a></li>';

}else{

$_pageHtml .= '<li><a title="最后一页" href="'.$url.'page='.$pages.'">»</a></li>';

}*/

if($page<$_end){

$_pageHtml .= '<li><a title="下一页" href="'.$url.'page='.($page+1).'">»</a></li>';

}

$_pageHtml .= '</ul>';

echo $_pageHtml;

}

关于php数据分页功能的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php数据分页功能 php数据分页功能有哪些的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did198310
更新时间:2023-04-26   阅读:23次

上一篇: phplinux输出 如何使用 php 输出 "hello world"?

下一篇:全景云php源码 全景云设计软件

相关资讯

最新资料更新

  • 1.php余数1 php math
  • 2.phpajax日历 php如何生成一年的日历
  • 3.射洪php招聘 射洪平台公司招聘
  • 4.包含phpgabage的词条
  • 5.php根据城市定位 php获取位置信息
  • 6.php如何转换json php如何转换视频
  • 7.erpphp源码下载 thinkphp erp源码
  • 8.php加密数据用js解密 php加密 js解密
  • 9.图片二进制php 图片二进制转换器
  • 10.包含php7.0.10的词条
  • 11.文章加载更多php php加载html
  • 12.php编程圆面积 编程实现圆的面积
  • 13.php大牛交流教程 php大神
  • 14.iPad上装php iPad上装修建模app
  • 15.php短信被刷 php防止短信被刷
  • 16.php移动gps定位 functionsphp位置
  • 17.php7.1des加密 php7 加密
  • 18.php连接vertica php连接mysql
  • 19.包含asp和php互通的词条
  • 20.php队列和缓存 php中的九大缓存技术

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]