批改状态:合格
老师批语:思路是对的
基于7月31日的数据库连接、基本界面展示、分页计算等继续展开的
a. 分页条的动态生成b. 跳转地址的动态生成c. 当前页码的高亮显示
正式内容前需要先计算下总“页”数,也就是说一共需要展示多少“页” - pages。计算方法如下:
计算表中共计有多少条记录?
每一页显示几条? 5
总页数 = ceil(记录总数 / 每页的记录数)
$sql = “SELECT CEIL(COUNT(id)/{$num}) AS total FROM users“;
计算总页数
$pages = $pdo->query($sql)->fetch()[‘total’];
这些内容是放在跟连接数据有关的一个php中,page-data.php,也就是7月31日的demo4
<?php// 连接数据库require 'connect.php';// 获取分页数据, 一定要知道的二个数据// 1. 每页显示的数量$num = 5;// 2. 当前页码,默认为1$page = $_GET['p'] ?? 1;// 3. 计算每一页的第一条记录的显示偏移量$offset = ($page - 1) * $num;// 4. 获取分页数据// SElECT * FROM `table_name `LIMIT n OFFSET m;$sql = "SELECT * FROM `users` LIMIT {$num} OFFSET {$offset}";// 简写// $sql = "SELECT * FROM `users` LIMIT {$offset}, {$num}";$users = $pdo->query($sql)->fetchAll();// print_r($users);// 计算总页数//----------------上面的为7月31日的内容,下面为今天的内容。// 计算表中共计有多少条记录?// 每一页显示几条? 5// 总页数 = ceil(记录总数 / 每页的记录数)$sql = "SELECT CEIL(COUNT(`id`)/{$num}) AS `total` FROM `users`";// 计算总页数$pages = $pdo->query($sql)->fetch()['total'];
<?php require 'page-data.php' ?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数据展示</title><link rel="stylesheet" href="style.css"></head><body><table><caption>用户信息表</caption><thead><tr><td>id</td><td>name</td><td>email</td><td>操作</td></tr></thead><tbody><?php foreach ($users as $user):?><tr><!-- 短标签来简化变量的显示 --><td><?=$user['id']?></td><td><?php echo $user['name'] ?></td><td><?=$user['email']?></td><td><button>编辑</button><button>删除</button></td></tr><?php endforeach ?></tbody></table><p><!-- 1. 分页条的动态生成2. 跳转地址的动态生成3. 当前页码的高亮显示 --><!-- 分页条中的页码应该动态生成 --><?php for ($i = 1; $i <= $pages; $i++): ?><?php$jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'], $i);/* $_SERVER['PHP_SELF']-也就是展示当前页面* ?p= 在网页中加入了动态的页面数字* $i: 分页中的页码* $page: 在URL中通过GET获取的页码?p=X*/$active = ($i == $page) ? 'active' : null;/* $active是css文件中修饰高亮页面数字的类的选项* 选项变量化,这个地方根据是否为当前页面决定是否将active赋给对应的* 类名。一旦类名等于active了,css文件中.active的style就发挥作用了*/?><a href="<?=$jump?>" class="<?=$active?>"><?=$i?></a><?php endfor ?></p></body></html>
<?php require 'page-data.php' ?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数据展示</title><link rel="stylesheet" href="style.css"></head><body><table><caption>用户信息表</caption><thead><tr><td>id</td><td>name</td><td>email</td><td>操作</td></tr></thead><tbody><?php foreach ($users as $user):?><tr><!-- 短标签来简化变量的显示 --><td><?=$user['id']?></td><td><?php echo $user['name'] ?></td><td><?=$user['email']?></td><td><button onclick="location.href='handle.php?action=edit&id=<?=$user['id']?>'">编辑</button><!--这个地方给编辑及删除两个button增加了操作动作,具体是在handle.php中实现--><button onclick="del(<?=$user['id']?>)">删除</button></td></tr><?php endforeach ?></tbody></table><p><!-- 继续完善分页功能1. 首页2. 尾页3. 上一页4. 下一页 --><!-- 上一页: 解决页码的越界 --><?php// 获取前一页的页码$prev = $page -1;if ($page == 1) $prev =1;?><?php if ($page != 1): ?><!-- 首页 --><a href="<?=$_SERVER['PHP_SELF'].'?p=1'?>">首页</a><a href="<?=$_SERVER['PHP_SELF'].'?p='.$prev?>">上一页</a><?php endif ?>/* 不等于1的情况显示“首页”和“上一页”。<?php for ($i = 1; $i <= $pages; $i++): ?><?php$jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'], $i);$active = ($i == $page) ? 'active' : null;?><a href="<?=$jump?>" class="<?=$active?>"><?=$i?></a><?php endfor ?><!-- 下一页: 解决页码的越界 --><?php// 获取下一页的页码,超过最后一页后一直保持在最后一页。$next = $page + 1;if ($next >= $pages) $next = $pages;?><?php if ($page != $pages) :?><a href="<?=$_SERVER['PHP_SELF'].'?p='.$next ?>">下一页</a><!-- 尾页 --><a href="<?=$_SERVER['PHP_SELF'].'?p='.$pages?>">尾页</a><?php endif ?></p><script>// 删除function del(id) {return confirm('是否删除?') ? alert('删除成功') :false;}</script></body></html>
<button onclick="location.href='handle.php?action=edit&id=<?=$user['id']?>'">编辑</button><!--这个地方给编辑及删除两个button增加了操作动作,具体是在handle.php中实现--><button onclick="del(<?=$user['id']?>)">删除</button></td>
<?phprequire 'connect.php';// 获取操作$action = $_GET['action'];$id = $_GET['id'];switch ($action) {// 编辑操作: 1: 渲染编辑表单; 2. 执行编辑操作// 1: 渲染编辑表单case 'edit':// 加载,渲染数据编辑表单include 'edit.php';break;// 2. 执行编辑操作case 'doedit':// 更新$sql = 'UPDATE `users` SET `name`=?, `email`=? WHERE `id`=?';$stmt = $pdo->prepare($sql);// 新的数据在$_POSTif (!empty($_POST)) {$stmt->execute([$_POST['name'], $_POST['email'], $id]);if ($stmt->rowCount() == 1) echo '<script>alert("更新成功");location.href="demo2.php"</script>';}break;// 删除。这个地方老师仅仅是提示了下,具体整体的实现还需要再去完善。case 'delete':$sql = 'DELETE FROM `users` WHERE `id`=?';$stmt = $pdo->prepare($sql);$stmt->execute([$id]);if ($stmt->rowCount() == 1) echo '<script>alert("删除成功");location.href="demo2.php"</script>';}
<?php// 获取要被编辑的数据$user = $pdo->query("SELECT * FROM `users` WHERE `id`={$id}")->fetch();// print_r($user);?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>用户编辑</title></head><body><h3>用户编辑</h3><form action="<? echo $_SERVER['PHP_SELF']. '?action=doedit&id='.$id?>" method="POST"><!--id还有一种方法是通过隐藏的id来进行传递,不过这次是通过action直接带入的方式实现了--><p><label for="name">用户名:</label><input type="text" name="name" id="name" value="<?=$user['name']?>"></p><p><label for="email">邮箱:</label><input type="email" name="email" id="email" value="<?=$user['email']?>"></p><p><button>保存</button></p></form></body></html>
仿php.cn分页,完善你的分页功能[选做]
删除部分自己的实现,首先在前端onclick部分加上action,然后在handle中加入对应code:
<button onclick="location.href='my4handle.php?action=delete&id=<?=$item['id']?>'">delete</button>
case 'delete':$sql = "DELETE FROM `shao` WHERE `id`=?";$stmt = $pdo->prepare($sql);$stmt->execute([$id]);if ($stmt->rowCount()==1)echo '<script>alert("Delete sucessfully!"); location.href="my3.php"</script>';break;
自己努力实现了下见下面图:


<?php require 'my1.php' ?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>SHAO's Items</title><link rel="stylesheet" href="style.css"></head><body><table><caption>邵恒头条</caption><thead><tr><td>id</td><td>date</td><td>title</td><td>tags</td><td>action</td></tr></thead><tbody><?php foreach ($items as $item):?><tr><td><?=$item['id']?></td><td><?=$item['date']?></td><td><?=$item['title']?></td><td><?=$item['label']?></td><td><button onclick="location.href='my4handle.php?action=edit&id=<?=$item['id']?>'">edit</button><button onclick="location.href='my4handle.php?action=delete&id=<?=$item['id']?>'">delete</button></td></tr><?php endforeach ?></tbody></table><p> <!--这个地方p标签之所以这么靠前,是为了好显示--><!--② `首页`、`上一页`的展示和限制--><?php$prevNum = $pageNum - 1;if ($pageNum == 1) $prevNum=1;?><a href="<?=$SERVER['PHP_SELF'].'?p='.$prevNum?>">上一页</a><?php $active1 = ($pageNum==1)? 'active': null?><?php $active2 = ($pageNum==2)? 'active': null?><a href="<?=sprintf('%s?p=%s',$_SERVER['PHP_SELF'],1)?>" class = "<?=$active1?>">1</a><a href="<?=sprintf('%s?p=%s',$_SERVER['PHP_SELF'],2)?>" class = "<?=$active2?>">2</a><!--下面这块是模仿php中文网实现了底部分页导航部分的显示--><?phpswitch($pageNum){/*前面几页的展示*/case $pageNum<7:for($i=3; $i<10; $i++):$jump=sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$i);$active = ($i==$pageNum) ? 'active' : null;?><a href="<?=$jump?>" class="<?=$active?>"><?=$i?></a><?php endfor ?><a>...</a><?php break; ?><!--中间部分页码的展示--><?phpcase $pageNum>=7 and $pageNum < $pages -7: ?><a>...</a><?php for($i=$pageNum-3; $i <= $pageNum+3; $i++):$jump=sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$i);$active = ($i==$pageNum) ? 'active' : null;?><a href="<?=$jump?>" class="<?=$active?>"><?=$i?></a><?php endfor ?><a>...</a><?php break; ?><!--最后部分页码的展示--><?phpcase $pageNum >= $pages-7: ?><a>...</a><?php for($i = $pages-7; $i <= $pages-2; $i++):$jump=sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$i);$active = ($i==$pageNum) ? 'active' : null;?><a href="<?=$jump?>" class="<?=$active?>"><?=$i?></a><?php endfor ?><?php break;}?><!--③ `下一页`、`尾页`的展示和限制--><?php$nextNum = $pageNum + 1;if ($nextNum >= $pages) $nextNum = $pages;?><?php $activel2 = ($pageNum == $pages-1)? 'active': null?><?php $activel = ($pageNum == $pages)? 'active': null?><a href="<?=sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$pages-1)?>" class = "<?=$activel2?>"><?=$pages-1?></a><a href="<?=sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$pages)?>" class = "<?=$activel?>"><?=$pages?></a><a href="<?=$SERVER['PHP_SELF'].'?p='.$nextNum?>">下一页</a></!-></body></html>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号