2026-09-21 08:20:56 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
require_once 'config.php';
|
|
|
|
|
|
checkLogin();
|
|
|
|
|
|
|
|
|
|
|
|
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
|
|
|
|
|
|
if ($id <= 0) {
|
|
|
|
|
|
header('Location: index.php');
|
|
|
|
|
|
exit;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$db = getDB();
|
|
|
|
|
|
|
|
|
|
|
|
// 获取所有图片路径(海报、票根、旧照片、新多照片)
|
|
|
|
|
|
$stmt = $db->prepare("SELECT poster_path, ticket_path, photo_path FROM movies WHERE id = ?");
|
|
|
|
|
|
$stmt->execute([$id]);
|
|
|
|
|
|
$movie = $stmt->fetch();
|
2026-09-22 11:42:27 +08:00
|
|
|
|
// 取一行就够,但游标不关的话这条连接会一直挂着共享读锁,
|
|
|
|
|
|
// 后面删评价 / 删电影要升级成写锁时就会被自己挡住(PDO 默认等 60 秒,表现成页面卡死)。
|
|
|
|
|
|
$stmt->closeCursor();
|
2026-09-21 08:20:56 +08:00
|
|
|
|
|
|
|
|
|
|
if ($movie) {
|
|
|
|
|
|
// 删除海报、票根、旧单张照片
|
|
|
|
|
|
foreach (['poster_path', 'ticket_path', 'photo_path'] as $field) {
|
2026-09-21 12:56:30 +08:00
|
|
|
|
deleteStoredFile($movie[$field]);
|
2026-09-21 08:20:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 删除多张照片(新表)
|
|
|
|
|
|
$stmt2 = $db->prepare("SELECT photo_path FROM movie_photos WHERE movie_id = ?");
|
|
|
|
|
|
$stmt2->execute([$id]);
|
|
|
|
|
|
$photos = $stmt2->fetchAll();
|
|
|
|
|
|
foreach ($photos as $p) {
|
2026-09-21 12:56:30 +08:00
|
|
|
|
deleteStoredFile($p['photo_path']);
|
2026-09-21 08:20:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-09-22 11:42:27 +08:00
|
|
|
|
// 删除这部电影的评价与评价下的讨论
|
|
|
|
|
|
// (SQLite 默认没开 PRAGMA foreign_keys,reviews 上的 ON DELETE CASCADE 不会生效,必须手动清)
|
|
|
|
|
|
// 传 $db 进去复用本连接:读写都在一条连接上,不会互相等锁。
|
|
|
|
|
|
deleteReviewsOfMovie($id, $db);
|
|
|
|
|
|
|
2026-09-21 08:20:56 +08:00
|
|
|
|
// 删除电影(viewers 和 movie_photos 会自动级联删除)
|
|
|
|
|
|
$stmt = $db->prepare("DELETE FROM movies WHERE id = ?");
|
|
|
|
|
|
$stmt->execute([$id]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
header('Location: index.php');
|
|
|
|
|
|
exit;
|