Files
MovieLog_Server/delete.php
T
laoyang a2c26ad002 新增评价与讨论:打分 1-10 + 观后感受 emoji
- 规则:只要有登录账号就能评价,与「是不是观影人」无关;评价归属 admins
- 数据层 lib/reviews.php:
  · reviews(movie_id + admin_id 唯一索引,一个账号一部电影只一条)
  · review_comments(feelings 存感受 key 的 JSON 数组)
  · 感受目录 feelingCatalog():12 种,每种一个专属 emoji,文案与 emoji 不入库
- detail.php 新增「💬 评价与讨论」:1-10 打分(原生 radio,无 JS 也能用)、
  评价正文、评价列表、每条评价下的讨论与多选感受、均分概况
- index.php:有评价的电影卡片显示 ⭐ 均分
- delete.php:删电影时显式清理评价与讨论(SQLite 外键级联默认未开启)
- 顺带修一个隐患:delete.php 取一行后没关游标,读锁一直挂着,
  后续同一连接上的 DELETE 拿不到写锁,页面会卡满 60 秒
2026-09-22 11:42:27 +08:00

46 lines
1.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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();
// 取一行就够,但游标不关的话这条连接会一直挂着共享读锁,
// 后面删评价 / 删电影要升级成写锁时就会被自己挡住(PDO 默认等 60 秒,表现成页面卡死)。
$stmt->closeCursor();
if ($movie) {
// 删除海报、票根、旧单张照片
foreach (['poster_path', 'ticket_path', 'photo_path'] as $field) {
deleteStoredFile($movie[$field]);
}
// 删除多张照片(新表)
$stmt2 = $db->prepare("SELECT photo_path FROM movie_photos WHERE movie_id = ?");
$stmt2->execute([$id]);
$photos = $stmt2->fetchAll();
foreach ($photos as $p) {
deleteStoredFile($p['photo_path']);
}
// 删除这部电影的评价与评价下的讨论
// (SQLite 默认没开 PRAGMA foreign_keys,reviews 上的 ON DELETE CASCADE 不会生效,必须手动清)
// 传 $db 进去复用本连接:读写都在一条连接上,不会互相等锁。
deleteReviewsOfMovie($id, $db);
// 删除电影(viewers 和 movie_photos 会自动级联删除)
$stmt = $db->prepare("DELETE FROM movies WHERE id = ?");
$stmt->execute([$id]);
}
header('Location: index.php');
exit;