10.6 更新記錄

  更新記錄會同時用到 UPDATE 指令與 SELECT 指令,請先開啟 detail.php,我們要為輸出標題的那個儲存格加上動態連結。
<td><?php echo $row['nTitle']; ?>
&nbsp;[<a href="edit.php?id=<?php echo $row['nIndex']; ?>">編輯</a>]
&nbsp;[<a href="delete.php?id=<?php echo $row['nIndex']; ?>">刪除</a>]
</td>
  接著就能開始撰寫 edit.php 的 PHP 程式碼了,我們要先用 SELECT 指令搭配 URL 參數篩選並建立資料集,再用 UPDATE 指令更新記錄。我們已經準備好 edit.php 的表單了,以下是它的程式碼,請跟著本文的指示操作:
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
<table>
    <tr><td colspan="2">編輯訊息<input type="hidden" name="Index"/>
    </td></tr>
    <tr><td>標題</td><td><input type="text" name="Title"/></td></tr>
    <tr><td>作者</td><td><input type="text" name="Name"/></td></tr>
    <tr><td>內容</td><td><textarea name="Content"></textarea></td></tr>
    <tr><td colspan="2"><input type="submit" value="更新"/></td></tr>
</table>
</form>
  我們要為 edit.php 加入 SELECT 指令與 UPDATE 指令,並修改網頁的 HTML 程式碼,完成後如下所示。我們將主鍵值儲存在隱藏欄位「Index」裡,提供 UPDATE 指令的 WHERE 子句使用。
<?php
require_once 'lib_mysql.php';
$db = new Mysql;
$db -> init('localhost', 'root', 'root', 'web_announce', '',
    'utf8mb4_general_ci');
if (isset($_POST['Index'])) {
    foreach ($_POST as $value)
        if (empty($value))
            die('<p style="color: red;">請填寫所有欄位</p>');
    $value = $db -> checkValues($_POST);
    $value = "nTitle=$value[Title], nName=$value[Name],
        nContent=$value[Content]";
    $db -> update('news', $value, "nIndex=$value[Index]");
    header("Refresh: 0; url=index.php");
    exit;
}
$index = isset($_GET['id']) ? intval($_GET['id']) : -1;
$result = $db -> select('*', 'news', "nIndex=$index");
?>
<?php $row = $result -> fetch_assoc(); ?>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
<table>
    <tr><td colspan="2">編輯訊息
    <input type="hidden" name="Index"
        value="<?php echo $row['nIndex']; ?>"/></td></tr>
    <tr><td>標題</td>
    <td><input type="text" name="Title"
        value="<?php echo $row['nTitle']; ?>"/></td></tr>
    <tr><td>作者</td>
    <td><input type="text" name="Name"
        value="<?php echo $row['nName']; ?>"/></td></tr>
    <tr><td>內容</td>
    <td><textarea name="Content"><?php echo $row['nContent']; ?>
    </textarea></td></tr>
    <tr><td colspan="2"><input type="submit" value="更新"/></td></tr>
</table>
</form>
<?php $result -> free(); ?>