php數(shù)據(jù)庫(kù)操作之通過(guò)步驟做一個(gè)列表顯示
上一章我們按照我們的“數(shù)據(jù)庫(kù)連接天龍八步”,很順利的就完成了用戶注冊(cè)。
我們來(lái)做一個(gè)后臺(tái)的用戶列表展示。在實(shí)際的管理過(guò)程當(dāng)中,我們通過(guò)后臺(tái),可以個(gè)修改用戶的密碼和用戶的相關(guān)資料。
在后臺(tái)需要將所有用戶以表格的形式展示出來(lái)就是用戶列表。
一、連接數(shù)據(jù)庫(kù)、判斷錯(cuò)誤和設(shè)置字符集
連接、錯(cuò)誤判斷和字符集選擇都在上面已經(jīng)講過(guò)。老規(guī)矩,第一步使用mysqli_connect連接數(shù)據(jù)庫(kù)。在第一節(jié)我們講過(guò),可以在第四個(gè)參數(shù)中加上庫(kù)選擇。就可以不用使用mysqli_select_db函數(shù)在后面再次選擇一個(gè)數(shù)據(jù)庫(kù)了。
返回的類型就是一個(gè)連接資源。我們?cè)趍ysqli_errno、mysqli_error和mysqli_set_charset都要傳入資源,才能確定我們操作的是哪個(gè)連接。
$conn = mysqli_connect('localhost', 'root', 'secret', 'book'); if (mysqli_errno($conn)) { mysqli_error($conn); exit; } mysqli_set_charset($conn, 'utf8');
二、準(zhǔn)備并發(fā)送SQL語(yǔ)句
我們需要查詢的的將候?qū)⒂脩鬒D,用戶名、時(shí)間和IP都查出來(lái)。并且使用order by id 進(jìn)行降序排序。
按照人的思維人們一般喜歡看最新注冊(cè)的一批用戶。而ID自增,也就是ID在越大,就是時(shí)間注冊(cè)越新的用戶。因此我們?cè)趯慡QL語(yǔ)句的時(shí)寫上的是order by id desc。
$sql = "select id,username,createtime,createip from user order by id desc"; $result = mysqli_query($conn, $sql);
三、判斷結(jié)果
查詢出來(lái)的結(jié)果只要SQL語(yǔ)句正確結(jié)果變量$result就為真。因此,在實(shí)現(xiàn)的時(shí)候我們需要多加一步判斷,不僅判斷$result。而且,判斷查詢出來(lái)的行數(shù)。
查詢出來(lái)的行數(shù)可以使用mysqli_num_rows。這個(gè)函數(shù)要求傳入$result查詢的結(jié)果變量。
如果有結(jié)果則顯示列表,如果沒(méi)有結(jié)果我們產(chǎn)生一句提示即可。
代碼片段如下:
if($result && mysqli_num_rows($result)){ //顯示列表代碼段 }else{ //提示沒(méi)有結(jié)果的代碼段 }
四、循環(huán)顯示數(shù)據(jù)
所有結(jié)果我們需要使用列表的形式展示出來(lái)。表格的行和列和數(shù)據(jù)表的行和列是一樣的。所示展示起來(lái)很方便。
先聲明一個(gè)表格,每次循環(huán)的時(shí)候輸出一行。將結(jié)果展示到各個(gè)列里面。
使用到的函數(shù)是mysqli_fetch_assoc,返回的會(huì)是一個(gè)關(guān)聯(lián)數(shù)組。
這個(gè)函數(shù)讀取一個(gè)結(jié)果集,會(huì)向后移動(dòng)一次。讀取到最后沒(méi)有結(jié)果的時(shí)候會(huì)返回bool值的false。因此,我們選擇while來(lái)配合mysqli_fetch_assoc。
每次循環(huán)的結(jié)果賦值給$row,$row中是關(guān)聯(lián)數(shù)組。因此我在這次循環(huán)中,可以將行和列都顯示出來(lái)。
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.在刪除的時(shí)候我們分為單選刪除和多選刪除。
????2.而編輯的時(shí)候,我們會(huì)選擇一個(gè)用戶
我們?cè)谏弦徊降拇a中增加幾個(gè)小東西就在頁(yè)面中實(shí)現(xiàn)了刪除和編編。
我們來(lái)看看實(shí)際的效果圖,來(lái)推理具體的實(shí)現(xiàn)過(guò)程,效果如下:
在實(shí)現(xiàn)過(guò)程當(dāng)中有幾個(gè)要點(diǎn):
????1.單選擇刪除和編輯時(shí)需使用get方法傳入ID,我們才知道要編輯或者刪除的是哪個(gè)用戶。
????2.多選刪除時(shí),需要使用傳入多個(gè)用戶。因此,我們可以使用form表單,使用post方法來(lái)提交這批用戶ID。
單選刪除我們可以在delete.php后面我們跟上?加上id和值就點(diǎn)擊時(shí)進(jìn)行刪除請(qǐng)求即可。
echo '<td><a href="delete.php?id=' . $row['id'] . '">刪除用戶</a></td>';
?編輯用戶也是同理,我們?cè)趀dit.php加上?寫上id和值,點(diǎn)擊時(shí)就知道是需要編輯的哪個(gè)用戶了。
echo '<td><a href="edit.php?id=' . $row['id'] . '">編輯用戶</a></td>';
而多選刪除,我們需要使用到html中的checkbox,傳入多個(gè)用戶ID的時(shí)候需要在name 后加上id[]。使用form表單將表格包起來(lái),在表格外加上一個(gè)submit標(biāo)簽就實(shí)現(xiàn)了多選刪除。
<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>';
六、關(guān)閉數(shù)據(jù)庫(kù)連接
我們操作完數(shù)據(jù)庫(kù),關(guān)閉掉這個(gè)數(shù)據(jù)庫(kù)連接。
mysqli_close($conn);
我們整實(shí)現(xiàn)的用戶列表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 '沒(méi)有數(shù)據(jù)'; } mysqli_close($conn); ?>