`

PHP+MySQLi分页实例

    博客分类:
  • PHP
阅读更多

最近学习用PHP做网站,遇到个分页问题,刚好慕课网上有相应视频,就跟着做了一个。这个做个备份,以后直接用就好。

慕课网学习链接:PHP+MySQL分页原理实现

视频中用的是MySQL,我用的是mysqli,都差不多。

 

先上个效果图(数据是全国省份信息):

 以下是我的各阶段代码:

1、页面展示:index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>分页测试</title>
<link rel="stylesheet" href="css/bootstrap.css" />
<link rel="stylesheet" href="css/css.css" />
<script type="text/javascript" src="js/jquery1.9.0.min.js"></script>
</head>
<body>
	<table class="table table-bordered table-hover table-striped" id="tableList" style="table-layout: fixed;">
		<tbody>
			<tr align="center">
				<td><strong>序号</strong></td>
				<td><strong>省</strong></td>
				<td><strong>市</strong></td>
				<td><strong>是否显示</strong></td>
				<td><strong>显示顺序</strong></td>
			</tr>
<?php
require_once 'services.php';
?>
		</tbody>
	</table>
</body>
</html>

2、数据加载和分页:services.php

<?php
header("Content-type:text/html;charset=utf-8");
//引入数据库文件
require_once 'DB/DBTools.php';
//实例化对象
$dbTools = new DBTools();

$page=1;//当前页
$page_size=10;//每页显示数量,默认显示10条数据
if(isset($_REQUEST['page'])){//若是有提交page属性,那么就用提交的值,默认为1
	$page=$_REQUEST['page'];
}
if(isset($_REQUEST['size'])){//若是有提交page_size属性,那么就用提交的值,默认为10
	$page_size=$_REQUEST['size'];
}
//计算出总记录数,用来分页
$sql = "select count(id) from s_cities";
$res = $dbTools->execute_dql($sql);
$total_record = $res->fetch_array()[0];//总记录数
$total_page = ceil($total_record/$page_size);//总页数

$sql="select * from s_cities order by showorder asc,id asc limit ".($page-1)*$page_size.",".$page_size;
$res = $dbTools->execute_dql($sql);
$count=1;
$html="";
while($rows = $res->fetch_assoc()){
	$html .="<tr align='center'><td>".$count."</td>";
	$html .="<td>".$rows['provice']."</td>";//省份
	$html .="<td>".$rows['city']."</td>";//市
	$html .="<td>".$rows['isshow']."</td>";//是否显示
	$html .="<td>".$rows['showorder']."</td>";//显示顺序
	$html .="</tr>";
	$count++;
}
$html .="</tbody></table>";
echo $html;
$res->free();
//没有记录数,不分页
if($total_record>0){
	//分页
	$show_page=5;//每次显示5个分页块
	$page_offset = ($show_page-1)/2;//计算偏移量,也就是每次往前或往后移动的数量

	$paging_html="<div id='pageGro' >";
	$paging_html.="<span class='paging'>总计:共<span id='totalRecord'>".$total_record."</span>条记录&nbsp;&nbsp;".$page."/".$total_page."页&nbsp;&nbsp;";
	$paging_html.="每页显示<input type='text' id='setPageSize' value='".$page_size."' onkeydown='if(event.keyCode==13){setPaging(this,1,".$page_size.",".$total_page.");return false;}'/>条&nbsp;&nbsp;";
	$paging_html.="去<input type='text' id='toPage' value='' curPage='".$page."' onkeydown='if(event.keyCode==13){setPaging(this,2,".$page_size.",".$total_page.");return false;}'/>页";
	//$paging_html.="";
	$paging_html.="</span>";
	//首页和上一页
	if($page>1){
		$paging_html.="<div class='pageUp'><a href='".$_SERVER['PHP_SELF']."?page=1&size=".$page_size."'>首页</a></div>";
		$paging_html.="<div class='pageUp'><a href='".$_SERVER['PHP_SELF']."?page=".(($page-1)>0?($page-1):1)."&size=".$page_size."'>上一页</a></div>";
	}

	//加载分页数字块
	$start = 1;//第一个分页块
	$end = $total_page;//最后一个分页块

	//若是总页数比要显示的所有页数多,也就是总页数>5条时,需要显示中间的分页数字块
	if($total_page>$show_page){
		//添加前省略符
		if($page>$page_offset+1){//譬如当前页为6,偏移量+1=3,也就是6前面最多出现3个,就会出现一个...
			$paging_html.="<span class='omit'>...</span>";
		}
		//计算开始和结束分页块的数字
		if($page>$page_offset){//当前页>偏移量
			$start = $page-$page_offset;//开始页
			//结束页
			$end = ($total_page>$page+$page_offset)?($page+$page_offset):$total_page;
		}else{
			$start=1;
			$end=($total_page>$show_page)?$show_page:$total_page;
		}

		if($page+$page_offset>$total_page){
			$start = $start-($page+$page_offset-$end);
		}
	}
	$paging_html.="<div class='pageList'><ul>";
	for($i=$start;$i<=$end;$i++){
		if($page==$i){
			$paging_html.="<li class='current'><a href='".$_SERVER['PHP_SELF']."?page=".$i."&size=".$page_size."'>".$i."</a></li>";
		}else{
			$paging_html.="<li><a href='".$_SERVER['PHP_SELF']."?page=".$i."&size=".$page_size."'>".$i."</a></li>";
		}
	}
	$paging_html.="</ul></div>";

	//添加后省略符
	if($total_page>$show_page && $total_page>$page+$page_offset){
		$paging_html.="<span class='omit'>...</span>";
	}
	//尾页和下一页
	if($page<$total_page){
		$paging_html.="<div class='pageDown'><a href='".$_SERVER['PHP_SELF']."?page=".(($page+1)>$total_page?$total_page:($page+1))."&size=".$page_size."'>下一页</a></div>";
		$paging_html.="<div class='pageDown'><a href='".$_SERVER['PHP_SELF']."?page=".$total_page."&size=".$page_size."'>尾页</a></div>";
	}
	$paging_html.="</div>";
	echo $paging_html;
}
?>

3、数据库查询:DBTools.php

<?php
class DBTools{
	private $mysqli=null;//mysqli对象
	private static $host="127.0.0.1";//主机名
	private static $user="root";//用户名
	private static $pwd="root";//密码
	private static $db="test";//数据库
	
	function __construct(){
		$this->mysqli=new mysqli(self::$host,self::$user,self::$pwd,self::$db);
		if($this->mysqli->connect_error){//连接失败
			die("连接失败".$this->mysqli->connect_error);
		}
		
		//设置访问数据库的字符集
		//保证PHP是以uft8的方式来操作mysql数据库的
		$this->mysqli->query("set names utf8");
	}
	
	//查询
	public function execute_dql($sql){
		$res = $this->mysqli->query($sql) or die("操作失败,原因".$this->mysqli->error);
		return $res;
	}	
	
	//添加、修改和删除
	public function execute_dml($sql){
		$res = $this->mysqli->query($sql) or die("操作失败,原因".$this->mysqli->error);
		if(!$res){//说明操作失败
			return 0;
		}else{
			if($this->mysqli->affected_rows>0){
				return 1;//说明操作成功
			}else{
				return 2;//说明没有受到影响的行
			}
		}
	}	
}
?>

 4、设置每页显示数量和跳转到指定页所用JS:

/**
 * 该方法用来设置每页显示数量/跳转到指定页数
 * @param obj:当前input对象
 * @param flag:1-设置每页的数量 2-跳转到指定的页数
 * @param pageSize:每页显示的记录数
 * @pram totalPages:总页数 
 */
function setPaging(obj,flag,pageSize,totalPages){
	var value = obj.value;
	value = jQuery.trim(value);
	//没有数据不处理
	if(value<0){return false;}
	if(isNaN(value)){//不是数字,不处理
		obj.value="";//置空
		return false;
	}
	//进行转换
	value = parseInt(value,10);
	pageSize = parseInt(pageSize,10);
	flag = parseInt(flag,10);
	totalPages = parseInt(totalPages,10);
	
	switch(flag){
	case 1:{//调整每页显示数量
		//没有改变数量不处理
		if(value==pageSize){return false;}
		window.location.href="index.php?size="+value;
		break;
	}
	case 2:{//跳转到指定的页
		var curPage = $(obj).attr("curPage");
		curPage = parseInt(curPage,10);
		//若是就在当前页那么不处理
		if(value==curPage){ return false;}
		//或者输入值大于总页数,那么就跳转到最后一页
		if(value>totalPages){value = totalPages;}
		window.location.href="index.php?page="+value+"&size="+pageSize;
		break;
	}
	}
}

注:

1、输入数字回车后才会调用setPaging()方法,在input框中有声明:onkeydown='if(event.keyCode==13){setPaging(this,1,".$page_size.",".$total_page.");return false;}'

2、分页模块显示数字那段,业务逻辑有点复杂,可以点击这里听听老师的解释;(本人不才,没大听懂)

3、记得导入jquery1.9.0.min.js;

4、文章用到的各个文件以及表结构和数据已经以附件的形式上传,有需要的可以下载。

  • 大小: 52.2 KB
分享到:
评论

相关推荐

    封装好的php+mysql分页类

    在实际应用中,首先创建分页类的实例,然后设置SQL查询语句和每页记录数。接着调用`getTotalPages()`方法计算总页数,`getCurrentPageData()`获取当前页数据,最后使用`getLinks()`生成分页链接。 4. **数据库交互...

    PHP+AJAX分页程序

    总的来说,"PHP+AJAX分页程序"是一个结合了前后端技术的实例,它演示了如何利用PHP处理服务器端逻辑,使用AJAX实现无刷新分页,以及如何与数据库交互以获取分页数据。这种技术组合在现代Web开发中非常常见,对于学习...

    PHP+ajax分页实例简析

    在本文中,我们将深入探讨如何使用PHP和AJAX实现分页功能。首先,我们要了解什么是分页以及为何需要它。分页是Web开发中的一个重要概念...然而,这个简单的PHP+AJAX分页实例仍然提供了一个理解分页基本原理的良好起点。

    PHP+MySL编程实例

    这些实例将帮助你了解如何在实际项目中整合PHP和MySQL,包括数据验证、会话管理、分页显示、搜索功能等。通过这些实例,你可以逐步提升对PHP和MySQL的综合运用能力。 总结来说,PHP+MySQL编程实例是学习Web开发的...

    php+mysqli使用面向对象方式查询数据库实例

    7. PHP使用Mysqli类库实现完美分页效果的方法 8. 如何判断php mysqli扩展类是否开启 9. PHP实现基于mysqli的Model基类完整实例 10. PHP实现基于面向对象的mysqli扩展库增删改查操作工具类 这些文章会涵盖更多关于...

    PHP_生成HTML静态列表分页实例

    这样,我们就完成了一个基本的PHP生成HTML静态列表分页的实例。通过结合数据库查询、LIMIT和OFFSET,以及PHP动态生成HTML导航,我们可以轻松地在网站中实现这一功能。这个实例对于初学者来说是一个很好的起点,可以...

    php+mysql+ajax实例

    【PHP+MySQL+AJAX 实例详解】 在Web开发领域,PHP、MySQL和AJAX是三个非常关键的技术,它们共同构建了动态、交互性强的网页应用。PHP是一种服务器端脚本语言,主要用于处理HTML中的数据;MySQL是世界上最流行的开源...

    PHP+Ajax网站开发典型实例

    实例23 mysqli类库完成MySQL数据库的添加、删除和查询 实例24 获取服务器和系统信息 实例25 分页显示信息 实例26 使用PHP简单实现BBS程序 实例27 使用0DBC函数库完成数据库操作 实例28 使用DOM处理XML 第4章 ...

    PHP实例开发源码—PHP+mysql数据库分页类万能版(附源码及数据库下载).zip

    4. **使用须知**:提供的"使用须知.txt"文件很可能是解释如何集成这个分页类到你的项目中,包括如何配置数据库连接,如何实例化分页类,以及如何调用方法来获取和显示数据。 5. **132692274597716463**:这个文件名...

    php滚动加载加分页小实例

    在本实例中,我们将探讨如何实现一个PHP滚动加载与分页功能的小项目。滚动加载,也称为无限滚动或懒加载,是一种网页设计技术,当用户滚动页面时,新内容会自动加载,无需点击“下一页”按钮。这种技术提高了用户...

    PHP+Ajax网站开发典型实例-源代码

    实例23 mysqli类库完成MySQL数据库的添加、删除和查询 实例24 获取服务器和系统信息 实例25 分页显示信息 实例26 使用PHP简单实现BBS程序 实例27 使用0DBC函数库完成数据库操作 实例28 使用DOM处理XML 第4章 会话...

    jQuery+Ajax+PHP+Mysql实现分页显示数据

    总结来说,这个实例通过结合jQuery、Ajax、PHP和Mysql,实现了在不刷新页面的情况下,动态加载和分页显示数据库中的数据。这不仅提高了用户体验,也减轻了服务器的负担,是Web开发中常见的数据加载策略。

    PHP+MySQL动态网站开发实例教程

    在本教程中,我们将深入探讨如何使用PHP和MySQL进行动态网站开发。PHP是一种广泛使用的开源脚本语言,尤其...实践中的实例源文件将帮助你更好地理解和应用这些知识。在实践中不断磨练,你将成为一名出色的Web开发者。

    PHP+ExtJS 实例

    1. PHP连接数据库:使用mysqli或PDO扩展,创建数据库连接,执行SQL语句。 2. JSON交互:PHP使用json_encode()将数据转换成JSON格式,发送到前端;ExtJS的Ajax请求接收JSON数据并解析,填充到组件中。 3. ExtJS组件...

    php+ajax例子

    3. 数据库交互:通过各类数据库扩展(如MySQLi或PDO)连接并操作数据库。 **AJAX基础** AJAX的核心是JavaScript的XMLHttpRequest对象,它允许在后台与服务器交换数据并局部更新页面。主要组成部分包括: 1. ...

    mysql+php分页类(已测)

    在实际应用中,你需要实例化 `mysql_pager` 类,并传入合适的参数。例如,假设你有一个名为 `query_result` 的查询结果,当前页码是 1,每页显示 15 条记录,你可以这样使用: ```php $f = new mysql_pager($query_...

    PHP jqGrid 数据网格显示并分页

    本实例将详细讲解如何利用PHP和jqGrid来创建一个带有分页功能的数据网格。 首先,jqGrid是一个基于jQuery的插件,它允许用户在网页上以网格形式展示数据,支持数据的排序、筛选、编辑和分页等操作。在"jqgrid分页...

    PHP通用分页程序

    本文将深入探讨PHP分页的实现原理和具体步骤,并通过一个名为“小贤PHP通用分页程序”的实例进行详解。 1. **分页原理** 分页的基本思想是将大量数据分成多个小块(页),每次只加载一部分数据到前端展示,用户...

Global site tag (gtag.js) - Google Analytics