完整流程
<?php
session_start();
$conn = mysqli_connect('localhost', 'root', 'root', 'demo');
mysqli_set_charset($conn, 'gbk');
$user = $_SESSION['username'] ?? '';
$sql = "SELECT * FROM blog WHERE author='$user' ORDER BY id DESC";
$res = mysqli_query($conn, $sql);
?>
<?php while ($row = mysqli_fetch_assoc($res)): ?>
<form method="post">
<table border="1" width="100%">
<tr><td width="100">作者:</td>
<td><?= htmlspecialchars($user) ?> <?= $row['redate'] ?></td></tr>
<tr><td>標題:</td><td><?= htmlspecialchars($row['title']) ?></td></tr>
<tr><td>內容:</td><td><?= htmlspecialchars($row['content']) ?></td></tr>
<tr><td colspan="2" align="center"><input type="submit" name="sub" value="修改"></td></tr>
</table>
</form><br>
<?php endwhile; ?>
資料表結構
CREATE TABLE `blog` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`author` VARCHAR(50) NOT NULL,
`title` VARCHAR(50) NOT NULL,
`content` TEXT,
`redate` DATE NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
安全與改進重點
- 原碼直接拼接變數進 SQL,**極高風險 SQL Injection**,必須改用
prepare() + bind_param()。
- 輸出前務必
htmlspecialchars() 防 XSS。
- 密碼不應明文儲存,請用
password_hash()。
- 編輯功能建議另建
edit.php?id=...,採用 POST + CSRF Token 驗證。