`

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+Ajax网站开发典型实例

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

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

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

    PHP使用Mysqli类库实现完美分页效果的方法

    本文实例讲述了PHP使用Mysqli类库实现完美分页效果的方法。分享给大家供大家参考,具体如下: 本篇文章是基于的是我的上篇文章《PHP数据库操作之基于Mysqli的数据库操作类库》而量身打造,怎么使用 M 类库中的 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例231 文本文件的分页读取 298 4.4 文件操作 300 实例232 文件操作汇总 300 实例233 目录、文件定位器 302 实例234 改头换面 303 实例235 文件属性分析 304 实例236 文件类型检测 306 实例237 判断文件的权限 308 ...

    PHP程序开发范例宝典III

    实例014 Linux下实现PHP支持mysqli扩展技术 21 实例015 开机自动启动Apache服务 21 实例016 开机自动启动MySQL服务 22 实例017 Linux下发布“读者之家”网站 22 1.3 应用常用开发工具开发PHP程序 23 实例...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例231 文本文件的分页读取 298 4.4 文件操作 300 实例232 文件操作汇总 300 实例233 目录、文件定位器 302 实例234 改头换面 303 实例235 文件属性分析 304 实例236 文件类型检测 306 实例237 判断文件的权限 308 ...

    php实现的后台表格分页功能示例

    本文实例讲述了php实现的后台表格分页功能。分享给大家供大家参考,具体如下: &lt;?php //init.php $conn = mysqli_connect('127.0.0.1','root','','xz',3306); $sql = "SET NAMES UTF8"; mysqli_query($conn,...

    php中分页及SqlHelper类用法实例

    本文实例讲述了php中分页及SqlHelper类用法。分享给大家供大家参考,具体如下: 文档目录结构如下: SqlHelper.php代码如下: &lt;?php /** * Created by JetBrains PhpStorm. * User: lee * Date: 13-7-26 * ...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    9-14 7.php数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制) 9-17 1.回顾 9-17 2.php数据库编程(10)-使用mysqli扩展库增强(预处理技术) 9-17 3.php数据库编程(11)-使用mysqli扩展库增强(预处理技术) 9-17 ...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    9-14 7.php数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制) 9-17 1.回顾 9-17 2.php数据库编程(10)-使用mysqli扩展库增强(预处理技术) 9-17 3.php数据库编程(11)-使用mysqli扩展库增强(预处理技术) 9-17 ...

    (全)传智播客PHP就业班视频完整课程

    9-14 7.php数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制) 9-17 1.回顾 9-17 2.php数据库编程(10)-使用mysqli扩展库增强(预处理技术) 9-17 3.php数据库编程(11)-使用mysqli扩展库增强(预处理技术) 9-17 ...

    史上最全传智播客PHP就业班视频课,8月份视频

    9-14 7.php数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制) 9-17 1.回顾 9-17 2.php数据库编程(10)-使用mysqli扩展库增强(预处理技术) 9-17 3.php数据库编程(11)-使用mysqli扩展库增强(预处理技术) 9-17 ...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    9-14 7.php数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制) 9-17 1.回顾 9-17 2.php数据库编程(10)-使用mysqli扩展库增强(预处理技术) 9-17 3.php数据库编程(11)-使用mysqli扩展库增强(预处理技术) 9-17 ...

Global site tag (gtag.js) - Google Analytics