首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP + MySQL 動態網站開發教程(三):記錄編輯、刪除與表單處理實戰

     編輯:MySQL 資料庫相關知識

PHP MySQL 入門教程第三彈:編輯、刪除記錄與表單資料流向

承接前兩篇(查詢列表、新增記錄),本文詳細講解如何實現「編輯現有記錄」與「刪除記錄」功能,重點剖析表單資料流向、隱藏欄位傳遞主鍵、SQL UPDATE/DELETE 語法與安全防護。

功能架構:兩頁面模式

編輯/刪除均採用「列表頁 → 處理頁」兩階段:

  1. 列表頁:查詢資料庫,生成帶主鍵參數的超連結/表單
  2. 處理頁:接收參數,顯示預填表單(編輯)或確認刪除,執行 SQL 寫入

一、編輯記錄完整流程

1. 編輯列表頁

<?php
$conn = mysqli_connect("localhost", "user", "pass", "example");
$query = "SELECT * FROM tbl";
$result = mysqli_query($conn, $query);
?>
<table>
<tr><th>ID</th><th>姓名</th><th>姓氏</th><th>備註</th><th>操作</th></tr>
<?php while ($row = mysqli_fetch_assoc($result)): ?>
<tr>
  <td><?= $row['idx'] ?></td>
  <td><?= htmlspecialchars($row['UserName']) ?></td>
  <td><?= htmlspecialchars($row['LastName']) ?></td>
  <td><?= htmlspecialchars($row['FreeText']) ?></td>
  <td>
    <a href="edit_form.php?idx=<?= $row['idx'] ?>">編輯</a>
  </td>
</tr>
<?php endwhile; ?>
</table>

關鍵點:超連結攜帶主鍵 idx,htmlspecialchars() 防 XSS。

2. 編輯表單頁

<?php
$idx = $_GET['idx'] ?? '';
$conn = mysqli_connect("localhost", "user", "pass", "example");
$stmt = $conn->prepare("SELECT * FROM tbl WHERE idx = ?");
$stmt->bind_param("i", $idx);
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
?>
<form method="post" action="edit_process.php">
  <input type="hidden" name="idx" value="<?= $row['idx'] ?>">
  <div>姓名: <input type="text" name="UserName" value="<?= htmlspecialchars($row['UserName']) ?>"></div>
  <div>姓氏: <input type="text" name="LastName" value="<?= htmlspecialchars($row['LastName']) ?>"></div>
  <div>備註: <input type="text" name="FreeText" value="<?= htmlspecialchars($row['FreeText']) ?>"></div>
  <button type="submit">更新</button>
</form>

關鍵點:
• 隱藏欄位傳遞主鍵:<input type="hidden" name="idx"> 確保 UPDATE 定位正確記錄
• 預處理語句查詢:防 SQL 注入
• value 預填:表單載入現有值,使用者可直接修改部分欄位

3. 編輯處理頁

<?php
$idx = $_POST['idx'];
$UserName = $_POST['UserName'];
$LastName = $_POST['LastName'];
$FreeText = $_POST['FreeText'];

$conn = mysqli_connect("localhost", "user", "pass", "example");
$stmt = $conn->prepare("UPDATE tbl SET UserName=?, LastName=?, FreeText=? WHERE idx=?");
$stmt->bind_param("sssi", $UserName, $LastName, $FreeText, $idx);
$stmt->execute();

header("Location: list.php");  // PRG 模式防重複提交
exit;

安全加強:
• 嚴格 WHERE 條件:WHERE idx=? AND UserName=? ... 防並發修改衝突(樂觀鎖思想)
• 輸入驗證:長度、格式、業務規則
• CSRF Token:表單加入 <input type="hidden" name="csrf" value="">

二、刪除記錄完整流程

邏輯同編輯,處理頁執行 DELETE:

<?php
$idx = $_POST['idx'];
$conn = mysqli_connect("localhost", "user", "pass", "example");
$stmt = $conn->prepare("DELETE FROM tbl WHERE idx = ?");
$stmt->bind_param("i", $idx);
$stmt->execute();
header("Location: list.php");

最佳實踐:
• 列表頁「刪除」連結指向確認頁(GET),確認頁表單 POST 到處理頁
• 或使用 JavaScript confirm() 直接 POST(需 CSRF 保護)
• 軟刪除:UPDATE tbl SET deleted_at=NOW() WHERE idx=? 保留歷史

三、核心安全原則總結

  1. 預處理語句:所有 SQL 參數化,徹底防注入
  2. 輸出編碼:HTML 上下文用 htmlspecialchars(),JS 用 json_encode()
  3. 最小權限:DB 帳號僅擁有必要增刪改查權限
  4. PRG 模式:POST 處理後 header("Location: ...") 重導向,防刷新重複提交
  5. 錯誤處理:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) 拋出異常,統一捕獲記錄

掌握「列表→表單→處理→重導向」閉環,即具備了 PHP MySQL CRUD 開發的核心骨架。後續可引入框架、ORM、驗證庫、權限系統逐步工程化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved