新增评价与讨论:打分 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 秒
This commit is contained in:
@@ -14,6 +14,9 @@ $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) {
|
||||
// 删除海报、票根、旧单张照片
|
||||
@@ -29,6 +32,11 @@ if ($movie) {
|
||||
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]);
|
||||
|
||||
Reference in New Issue
Block a user