基于 PHP+MySQL 实现分页技术
一、 开发环境
1、环境搭建:Windows 7+Apache 2.4.18+MySQL 5.7.11+PHP
7.1.0。
2、文本编辑器:Sublime 3。
二、主要技术
本案例使用 PHP 7 中的 PDO 数据对象对 MySQL 数据库进行操作,
通过使用 PDO 对页码、偏移量、URL 等变量进行传递,从而实现分页
条的制作。
三、效果图展示
实现效果图,如图 1 所示。
图 1 效果图
四、具体步骤
4.1、创建数据库
① 利用 phpMyAdmin 4.5.5.1 或者 MySQl 控制台创建一个名为“phpDemo”
的数据库,创建表“001”,表结构设计如图 2 所示。
图 2 数据库表结构设计
② 向数据表中添加数据。
4.2、分页技术的实现
(1)创建一个名为“mypage.php”的 PHP 文件。
(2)传入页码
传入并接收浏览器 url 地址栏中传入的页码值:
$page=@$_GET['p']?@$_GET['p']:1; //url 中传入的值
(p=1/2/3...),默认为 1
(3)根据页码取出数据,传入分页数据
$pre=($page-1)*10; //起始位置(根据数据决定:数据表中的数据第一页
从 0 开始,第二页从 10 开始…,起始位置为($page)*10)
$pagesize=10; //每页显示的数据条数
$showpage=5; //显示的页码,页码每次显示 5 个
(4)从数据库中获取数据并在页面显示
// 连接数据库
$dbms='mysql'; //数据库类型
$host='localhost:3307'; //数据库主机名
$dbName='phpDemo'; //使用的数据库
$user='root'; //数据库连接用户名
$pass=''; //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";
try {
$dbh = new PDO($dsn, $user, $pass); //初始化一个 PDO 对象
$dbh->query('SET NAMES utf8'); // 设置字符集
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "<br/>");
}
// 查询并输出数据
$sql="SELECT * FROM `001` LIMIT $pre,$pagesize";
$stmt=$dbh->query($sql);
$result=$stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<div class='content'>";
echo "<table border=1 cellspacing=0 width=28%
align=center id='tbcon'>";
echo "<tr bgcolor='#aaaadd'><td>学号</td><td>姓名
</td></tr>";
foreach($result as $row){
echo "<tr>";
echo "<td>{$row['id']}</td>";
echo "<td>{$row['name']}</td>";
echo "</tr>";
}
echo "</table>";
echo "</div>";
(5)分页条制作
//获取数据总数
$total_sql="SELECT * FROM `001`";
$total_result=$dbh->query($total_sql);
$total=$total_result->rowCount();
//计算页数,ceil 向上取 1,floor 向下取 1
$total_page=ceil($total/$pagesize );
/**显示数据,分页条**/
$page_banner="<div class='page' align='center' >";
//计算偏移量
$pageoffset=($showpage-1)/2;
if($page>1){
$page_banner.="<a href=".$_SERVER['PHP_SELF']."?p=1>
首页</a>";
$page_banner.="<a href=".$_SERVER['PHP_SELF']."?p=
".($page-1)."><上一页</a>";
}else{
$page_banner.="<span class='disable'>首页</span>";
$page_banner.="<span class='disable'><上一页</span>";
}
//初始化数据
$start=1;
$end=$total_page;
if($total_page>$showpage){
if($page>$pageoffset+1){
$page_banner.="...";
}
if($page>$pageoffset){
$start=$page-$pageoffset;
$end=$total_page>$page+$pageoffset?
$page+$pageoffset:$total_page;
}
else{
$start=1;
$end=$total_page>$showpage?$showpage:$total_page;