清單顯示
一、連接資料庫、判斷錯誤和設定字元集
#連接、錯誤判斷和字元集選擇都在上面已經講過。舊規矩,第一步使用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);