新增评价与讨论:打分 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:
+38
@@ -100,6 +100,44 @@ function initDB() {
|
||||
)
|
||||
");
|
||||
|
||||
// 电影评价表
|
||||
// 评价人是「登录账号」(admins)——不是观影人(persons / viewers):
|
||||
// 没一起去看的人只要有账号,也能打分、写评价并参与讨论。
|
||||
$db->exec("
|
||||
CREATE TABLE IF NOT EXISTS reviews (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
movie_id INTEGER NOT NULL,
|
||||
admin_id INTEGER NOT NULL,
|
||||
rating INTEGER NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (movie_id) REFERENCES movies(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (admin_id) REFERENCES admins(id) ON DELETE CASCADE
|
||||
)
|
||||
");
|
||||
|
||||
// 评价下的讨论(评论)。
|
||||
// feelings 存的是感受 key 的 JSON 数组(如 [\"happy\",\"sad\"]),
|
||||
// emoji 与文案不入库——统一在 lib/reviews.php 的目录里维护,改文案不用动数据。
|
||||
$db->exec("
|
||||
CREATE TABLE IF NOT EXISTS review_comments (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
review_id INTEGER NOT NULL,
|
||||
admin_id INTEGER NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
feelings TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (review_id) REFERENCES reviews(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (admin_id) REFERENCES admins(id) ON DELETE CASCADE
|
||||
)
|
||||
");
|
||||
|
||||
// 一部电影每个账号只保留一条评价:再次提交就是修改(见 saveReview)
|
||||
$db->exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_reviews_movie_admin ON reviews(movie_id, admin_id)");
|
||||
$db->exec("CREATE INDEX IF NOT EXISTS idx_reviews_movie ON reviews(movie_id)");
|
||||
$db->exec("CREATE INDEX IF NOT EXISTS idx_review_comments_review ON review_comments(review_id)");
|
||||
|
||||
// ===== 迁移字段 =====
|
||||
try { $db->exec("ALTER TABLE cinemas ADD COLUMN color TEXT DEFAULT '#888888'"); } catch (PDOException $e) {}
|
||||
try { $db->exec("ALTER TABLE admins ADD COLUMN avatar TEXT"); } catch (PDOException $e) {}
|
||||
|
||||
Reference in New Issue
Block a user