基本架構
<?php
// db.php - 資料庫連線
$pdo = new PDO("mysql:host=localhost;dbname=test", "user", "pass");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 處理刪除
if (isset($_GET['delete'])) {
$stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
$stmt->execute([$_GET['delete']]);
header("Location: " . $_SERVER['PHP_SELF']);
exit;
}
// 處理新增/修改表單提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['id']) && $_POST['id']) {
$stmt = $pdo->prepare("UPDATE users SET name=?, email=? WHERE id=?");
$stmt->execute([$_POST['name'], $_POST['email'], $_POST['id']]);
} else {
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$_POST['name'], $_POST['email']]);
}
header("Location: " . $_SERVER['PHP_SELF']);
exit;
}
// 讀取列表
$users = $pdo->query("SELECT * FROM users")->fetchAll(PDO::FETCH_ASSOC);
?>
HTML 表單與列表
<form method="post">
<input type="hidden" name="id" value="<?= $edit['id'] ?? '' ?>">
<input name="name" placeholder="姓名" value="<?= $edit['name'] ?? '' ?>" required>
<input name="email" placeholder="Email" value="<?= $edit['email'] ?? '' ?>" required>
<button type="submit"><?= isset($edit) ? '更新' : '新增' ?></button>
<?php if (isset($edit)): ?><a href="?><?= $_SERVER['PHP_SELF'] ?>">取消編輯</a><?php endif; ?>
</form>
<table border="1">
<tr><th>ID</th><th>姓名</th><th>Email</th><th>操作</th></tr>
<?php foreach ($users as $u): ?>
<tr>
<td><?= $u['id'] ?></td>
<td><?= htmlspecialchars($u['name']) ?></td>
<td><?= htmlspecialchars($u['email']) ?></td>
<td>
<a href="?edit=<?= $u['id'] ?>">編輯</a> |
<a href="?delete=<?= $u['id'] ?>" onclick="return confirm('確定刪除?')">刪除</a>
</td>
</tr>
<?php endforeach; ?>
</table>
編輯模式處理
<?php
$edit = null;
if (isset($_GET['edit'])) {
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_GET['edit']]);
$edit = $stmt->fetch(PDO::FETCH_ASSOC);
}
?>
安全提醒
- **全部使用 Prepared Statement** 防 SQL 注入。
- 輸出到 HTML 必須
htmlspecialchars() 防 XSS。
- 刪除/修改等敏感操作建議改用 POST + CSRF Token。
- 密碼欄位請用
password_hash() / password_verify()。