CREATE TABLE pictures (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
picture_id VARCHAR(50),
picture_name VARCHAR(255),
picture_path VARCHAR(500), -- 存儲相對路徑
save_time DATETIME DEFAULT CURRENT_TIMESTAMP,
class VARCHAR(50)
);
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="text" name="name" placeholder="名稱" required>
<input type="text" name="picture_id" placeholder="圖片ID" required>
<input type="file" name="picturefile" accept="image/*" required>
<input type="text" name="class" placeholder="分類">
<button type="submit">上傳</button>
</form>
$maxSize) {
die('文件過大');
}
// 生成唯一文件名防衝突
$ext = pathinfo($_FILES['picturefile']['name'], PATHINFO_EXTENSION);
$newName = uniqid('img_') . '.' . $ext;
$destPath = $uploadDir . $newName;
if (move_uploaded_file($_FILES['picturefile']['tmp_name'], $destPath)) {
// 存入數據庫
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare('INSERT INTO pictures (name, picture_id, picture_name, picture_path, class) VALUES (?, ?, ?, ?, ?)');
$stmt->execute([
$_POST['name'],
$_POST['picture_id'],
$newName,
'uploads/' . $newName, // 存相對路徑
$_POST['class'] ?? ''
]);
echo '上傳成功!查看列表';
} else {
echo '文件移動失敗';
}
query('SELECT * FROM pictures ORDER BY save_time DESC');
$pictures = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<table border="1" cellpadding="5">
<tr><th>ID</th><th>名稱</th><th>圖片ID</th><th>分類</th><th>上傳時間</th><th>操作</th></tr>
<?php foreach ($pictures as $pic): ?>
<tr>
<td><?= $pic['id'] ?></td>
<td><?= htmlspecialchars($pic['name']) ?></td>
<td><?= htmlspecialchars($pic['picture_id']) ?></td>
<td><?= htmlspecialchars($pic['class']) ?></td>
<td><?= $pic['save_time'] ?></td>
<td>
<a href="<?= $pic['picture_path'] ?>" target="_blank">查看圖片</a>
</td>
</tr>
<?php endforeach; ?>
</table>
getimagesize() 或 finfo_file() 檢測真實 MIME 類型uniqid() + 隨機字符串php_flag engine off)upload_max_filesize、post_max_size 及代碼邏輯雙重限制完整示例代碼可參考:PHP 圖片上傳系統教程