php数据库操作之通过步骤做一个列表显示
上一章我们按照我们的“数据库连接天龙八步”,很顺利的就完成了用户注册。
我们来做一个后台的用户列表展示。在实际的管理过程当中,我们通过后台,可以个修改用户的密码和用户的相关资料。
在后台需要将所有用户以表格的形式展示出来就是用户列表。
一、连接数据库、判断错误和设置字符集
连接、错误判断和字符集选择都在上面已经讲过。老规矩,第一步使用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>';
五、增加编辑和删除控制
1.在删除的时候我们分为单选删除和多选删除。
2.而编辑的时候,我们会选择一个用户
我们在上一步的代码中增加几个小东西就在页面中实现了删除和编编。
我们来看看实际的效果图,来推理具体的实现过程,效果如下:
在实现过程当中有几个要点:
1.单选择删除和编辑时需使用get方法传入ID,我们才知道要编辑或者删除的是哪个用户。
2.多选删除时,需要使用传入多个用户。因此,我们可以使用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); ?>