php实现博客相册
实现博客相册功能
在PHP中实现博客相册功能可以通过以下方法完成。相册功能通常包括图片上传、存储、展示和管理等功能。
数据库设计
创建一个数据库表来存储相册图片的信息,例如:
CREATE TABLE `album` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`description` text,
`image_path` varchar(255) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
图片上传处理
创建一个PHP脚本来处理图片上传:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['image'])) {
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["image"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// 检查是否为真实图片
$check = getimagesize($_FILES["image"]["tmp_name"]);
if ($check === false) {
$uploadOk = 0;
}
// 检查文件大小
if ($_FILES["image"]["size"] > 500000) {
$uploadOk = 0;
}
// 允许特定格式
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
$uploadOk = 0;
}
if ($uploadOk == 1) {
if (move_uploaded_file($_FILES["image"]["tmp_name"], $targetFile)) {
// 保存到数据库
$stmt = $pdo->prepare("INSERT INTO album (title, description, image_path) VALUES (?, ?, ?)");
$stmt->execute([$_POST['title'], $_POST['description'], $targetFile]);
}
}
}
?>
图片展示
创建一个页面来展示相册中的图片:
<?php
$stmt = $pdo->query("SELECT * FROM album ORDER BY created_at DESC");
$images = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<div class="gallery">
<?php foreach ($images as $image): ?>
<div class="gallery-item">
<img src="<?= htmlspecialchars($image['image_path']) ?>" alt="<?= htmlspecialchars($image['title']) ?>">
<h3><?= htmlspecialchars($image['title']) ?></h3>
<p><?= htmlspecialchars($image['description']) ?></p>
</div>
<?php endforeach; ?>
</div>
相册管理
添加删除和编辑功能:
// 删除图片
if (isset($_GET['delete'])) {
$id = (int)$_GET['delete'];
$stmt = $pdo->prepare("SELECT image_path FROM album WHERE id = ?");
$stmt->execute([$id]);
$image = $stmt->fetch();
if ($image && file_exists($image['image_path'])) {
unlink($image['image_path']);
}
$pdo->prepare("DELETE FROM album WHERE id = ?")->execute([$id]);
header("Location: album.php");
exit;
}
前端样式
添加CSS样式美化相册展示:
.gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
padding: 20px;
}
.gallery-item img {
width: 100%;
height: 200px;
object-fit: cover;
border-radius: 5px;
}
安全注意事项
- 验证所有用户输入
- 限制上传文件类型和大小
- 对数据库查询使用预处理语句防止SQL注入
- 对输出内容使用htmlspecialchars()防止XSS攻击
以上代码和步骤可以实现一个基本的博客相册功能,可以根据实际需求进行扩展和优化。







