13.3 通过步骤做一个列表显示
上一章我们按照我们的“数据库连接天龙八步”,很顺利的就完成了用户注册。
我们来做一个后台的用户列表展示。在实际的管理过程当中,我们通过后台,可以个修改用户的密码和用户的相关资料。
在后台需要将所有用户以表格的形式展示出来就是用户列表。
一、连接数据库、判断错误和设置字符集
连接、错误判断和字符集选择都在上面已经讲过。老规矩,第一步使用 mysqli_connect 连接数据库。在第一节我们讲过,可以在第四个参数中加上库选择。就可以不用使用 mysqli_select_db 函数在后面再次选择一个数据库了。
返回的类型就是一个连接资源。我们在 mysqli_errno、mysqli_error 和 mysqli_set_charset 都要传入资源,才能确定我们操作的是哪个连接。
$conn = mysqli_connect('localhost', 'root', 'secret', 'book');
if (mysqli_errno($conn)) {
mysqli_error($conn);
exit;
}
mysqli_set_charset($conn, 'utf8');
二、准备并发送 SQL 语句
我们需要查询的的将候将用户 ID,用户名、时间和 IP 都查出来。并且使用 order by id 进行降序排序。
按照人的思维人们一般喜欢看最新注册的一批用户。而 ID 自增,也就是 ID 在越大,就是时间注册越新的用户。因此我们在写 SQL 语句的时写上的是 order by id desc。
$sql = "select id,username,createtime,createip from user order by id desc";
$result = mysqli_query($conn, $sql);
三、判断结果
查询出来的结果只要 SQL 语句正确结果变量$result 就为真。因此,在实现的时候我们需要多加一步判断,不仅判断$result。而且,判断查询出来的行数。
查询出来的行数可以使用 mysqli_num_rows。这个函数要求传入$result 查询的结果变量。
如果有结果则显示列表,如果没有结果我们产生一句提示即可。
代码片段如下:
if($result && mysqli_num_rows($result)){
//显示列表代码段
}else{
//提示没有结果的代码段
}
四、循环显示数据
所有结果我们需要使用列表的形式展示出来。表格的行和列和数据表的行和列是一样的。所示展示起来很方便。
先声明一个表格,每次循环的时候输出一行。将结果展示到各个列里面。
使用到的函数是 mysqli_fetch_assoc,返回的会是一个关联数组。
这个函数读取一个结果集,会向后移动一次。读取到最后没有结果的时候会返回 bool 值的 false。因此,我们选择 while 来配合 mysqli_fetch_assoc。
每次循环的结果赋值给$row,$row 中是关联数组。因此我在这次循环中,可以将行和列都显示出来。
echo '<table width="800" border="1">';
while ($row = mysqli_fetch_assoc($result)) {
echo '<tr>';
echo '<td>' . $row['username'] . '</td>';
echo '<td>' . date('Y-m-d H:i:s', $row['createtime']) . '</td>';
echo '<td>' . long2ip($row['createip']) . '</td>';
echo '</tr>';
}
echo '</table>';
五、增加编辑和删除控制
- 在删除的时候我们分为单选删除和多选删除。
- 而编辑的时候,我们会选择一个用户
我们在上一步的代码中增加几个小东西就在页面中实现了删除和编编。
我们来看看实际的效果图,来推理具体的实现过程,效果如下:
在实现过程当中有几个要点:
- 单选择删除和编辑时需使用 get 方法传入 ID,我们才知道要编辑或者删除的是哪个用户。
- 多选删除时,需要使用传入多个用户。因此,我们可以使用 form 表单,使用 post 方法来提交这批用户 ID。
单选删除我们可以在 delete.php 后面我们跟上?加上 id 和值就点击时进行删除请求即可。echo '<td><a href="delete.php?id=' . $row['id'] . '">删除用户</a></td>';
编辑用户也是同理,我们在 edit.php 加上?写上 id 和值,点击时就知道是需要编辑的哪个用户了。echo '<td><a href="edit.php?id=' . $row['id'] . '">编辑用户</a></td>';
而多选删除,我们需要使用到 html 中的 checkbox,传入多个用户 ID 的时候需要在 name 后加上 id[]。使用 form 表单将表格包起来,在表格外加上一个 submit 标签就实现了多选删除。
<form action="delete.php" method="post">
echo '<td><input type="checkbox" name="id[]" value="' . $row['id'] . '" /></td>';
echo '<input type="submit" value="删除" />';
echo '</form>';
代码如下:
echo '<form action="delete.php" method="post">';
echo '<table width="800" border="1">';
while ($row = mysqli_fetch_assoc($result)) {
echo '<tr>';
echo '<td><input type="checkbox" name="id[]" value="' . $row['id'] . '" /></td>';
echo '<td>' . $row['username'] . '</td>';
echo '<td>' . date('Y-m-d H:i:s', $row['createtime']) . '</td>';
echo '<td>' . long2ip($row['createip']) . '</td>';
echo '<td><a href="edit.php?id=' . $row['id'] . '">编辑用户</a></td>';
echo '<td><a href="delete.php?id=' . $row['id'] . '">删除用户</a></td>';
echo '</tr>';
}
echo '</table>';
echo '<input type="submit" value="删除" />';
echo '</form>';
六、关闭数据库连接
我们操作完数据库,关闭掉这个数据库连接。
mysqli_close($conn);
我们整实现的用户列表 list.php 代码如下:
<?php
$conn = mysqli_connect('localhost', 'root', 'secret', 'book');
if (mysqli_errno($conn)) {
mysqli_error($conn);
exit;
}
mysqli_set_charset($conn, 'utf8');
$sql = "select id,username,createtime,createip from user order by id desc";
$result = mysqli_query($conn, $sql);
if ($result && mysqli_num_rows($result)) {
echo '<table width="800" border="1">';
while ($row = mysqli_fetch_assoc($result)) {
echo '<tr>';
echo '<td>' . $row['username'] . '</td>';
echo '<td>' . date('Y-m-d H:i:s', $row['createtime']) . '</td>';
echo '<td>' . long2ip($row['createip']) . '</td>';
echo '<td><a href="edit.php?id=' . $row['id'] . '">编辑用户</a></td>';
echo '<td><a href="delete.php?id=' . $row['id'] . '">删除用户</a></td>';
echo '</tr>';
}
echo '</table>';
} else {
echo '没有数据';
}
mysqli_close($conn);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论