题目1:数据库数据表的整页显示
1.demo1.php文件:
<?php
// *表格的打印
namespace _221202a;
// *引用php数据对象
use PDO;
// *连接数据库
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *$sql:sql语句
$sql = <<< SQL
SELECT `id`,`name`,`sex`,`email`
FROM `staff`;
SQL;
//*$stme: sql语句预处理对象
$stmt = $db->prepare($sql);
// *执行sql
$stmt->execute();
// *绑定一个列到变量中
$stmt->bindColumn('id', $id);
$stmt->bindColumn('name', $name);
$stmt->bindColumn('sex', $sex);
$stmt->bindColumn('email', $email);
//* while,foreach, list()进行结果数组的解构到变量中
// while($stmt->fetch()){
// printf('%s:%s,%s,(%s)<br>',$id,$name,$sex,$email);
// }
// *用表格进行格式化打印
$table = <<< TABLE
<style>
table {
border-collapse: collapse;
width: 90%;
min-width: 360px;
margin: 30px auto;
text-align:center;
}
table,th,td {
border: 1px solid #000;
padding: 5px;
}
table caption {
font-size: 18px;
margin-bottom: 10px;
}
table thead {
background: lightcyan;
}
table tbody tr:hover {
cursor: pointer;
background: #efefef;
}
</style>
<table>
<caption>员工信息表</caption>
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>性别</th>
<th>邮箱</th>
</tr>
</thead>
<tbody>
TABLE;
// *PDO::FETCH_BOUND: 可以省的, 如果出现问题,再加上试试
while ($stmt->fetch(PDO::FETCH_BOUND)) {
// *拼装html代码
$sex = $sex ? '女' : '男';
$table .= <<< TR
<tr>
<td>$id</td>
<td>$name</td>
<td>$sex</td>
<td>$email</td>
</tr>
TR;
}
$table .= '</tbody></table>';
echo $table;
2.浏览器效果图:
题目2:页码,行数/页,偏移量,总记录行数,总页数
1.demo2.php文件:
<?php
// *页码,行数/页,偏移量,总记录行数,总页数
namespace _221202b;
// *引用php数据对象
use PDO;
// *连接数据库
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *1. 页码
// *$page:页码(即第几页),??:表示默认值
$page = $_GET['p'] ?? 1;
echo '当前页码: p = ' . $page . '<br>';
// *2.$num:行数/页
$num = 5;
echo '行数/页: num = ' . $num . '<br>';
// *3. 偏移量 = (页码 - 1) * 页数
$offset = ($page - 1) * $num;
echo '当前偏移量: offset = ' . $offset . '<br>';
// *4. 计算总记录行数
// SELECT CEIL(COUNT(*)/5) AS `total` FROM `staff`
// SELECT COUNT(*) AS `total` FROM `staff`
// *$sql:sql语句
$sql = 'SELECT COUNT(*) AS `total` FROM `staff`';
//*$stme: sql语句预处理对象
$stmt = $db->prepare($sql);
// *执行sql
$stmt->execute();
// *将总记录行数绑定到一个变量上
$stmt->bindColumn('total', $total);
$stmt->fetch();
echo '当前总记录行数: total = ' . $total . '<br>';
// *5. 计算总页数:$pages
// *ceil(x/y):为向上取整
$pages = ceil($total / $num);
echo '当前总页数: pages = ' . $pages . '<br>';
// *$sql:sql语句
$sql = <<< SQL
SELECT *
FROM `staff`
LIMIT $offset, $num;
SQL;
//*$stme: sql语句预处理对象
$stmt = $db->prepare($sql);
// *执行sql
$stmt->execute();
// *fetchAll():获取所有数据行并返回一个2维数组
$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo '<hr>';
if (count($staffs) === 0) {
// *如果此2维数组为空
echo '查询结果为空';
} else {
// *反之,将此2维数组作为1维数组遍历
foreach ($staffs as $staff) {
// *extract($staff):将此数组键转换为变量名称,将数组值转换为变量值
extract($staff); // $id,$name,$sex,$email
// *格式化打印
printf('%s-%s-%s-%s<br>', $id, $name, $sex, $email);
}
}
echo '<hr>';
2.浏览器效果图:
题目3:数据库数据表的分页显示
1.demo3.php文件:
<?php require 'demo2.php' ?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>分页展示数据</title>
<style>
table {
width: 400px;
border-collapse: collapse;
text-align: center;
}
table th,
table td {
border: 1px solid;
padding: 5px;
}
table thead {
background-color: lightcyan;
}
table caption {
font-size: larger;
margin-bottom: 8px;
}
body>p {
display: flex;
}
p>a {
text-decoration: none;
color: #555;
border: 1px solid;
padding: 5px 10px;
margin: 10px 2px;
}
/* 按钮高亮的样式 */
.active {
background-color: seagreen;
color: white;
border: 1px solid seagreen;
}
</style>
</head>
<body>
<table>
<caption>员工信息表</caption>
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>性别</th>
<th>邮箱</th>
</tr>
</thead>
<tbody>
<?php foreach ($staffs as $staff) :extract($staff) ?>
<tr>
<td><?=$id?>
</td>
<td><?=$name?>
</td>
<td><?=$sex?>
</td>
<td><?=$email?>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<p>
<!-- *对总页数进行for循环 -->
<?php for ($i=1; $i <= $pages; $i++): ?>
<?php
// *$url为网页上方的地址栏,当p值改变时使页码跳转
// *PHP_SELF:表示当前的php脚本
$url = $_SERVER['PHP_SELF'] . '?p=' . $i;
// *页码$page默认值为1
$page = $_GET['p'] ?? 1;
//* 实现页码高亮
// *三元运算符:当前的页码与地址栏的p相等时,则该链接按钮为active样式,反之为null
$active = ($i == $page) ? 'active' : null;
?>
<a href="<?=$url?>"class="<?=$active?>"><?=$i?></a>
<?php endfor ?>
</p>
</body>
</html>
2.浏览器效果图: