评价本身也能填「观后感受」
- lib/db.php:reviews 表新增 feelings 列。建表语句里带上,同时补一条 ALTER TABLE 迁移 —— 上一版已经上线过没有该列的 reviews 表,老库要能自动补列。 - lib/reviews.php:saveReview() 接收感受并落库;getMovieReviews()/getMyReview() 把 feelings 解析成 key 列表(旧记录为 NULL → 空数组,不报错)。 - detail.php:评价表单加了「我看完的感受(可多选)」,与讨论用的是同一套感受; 修改评价时原勾选自动回填,取消勾选即清空;已保存的感受在评价正文下方以只读标签展示。 感受仍然只存 key(happy/sad/…),emoji 与文案统一在 feelingCatalog() 里维护。
This commit is contained in:
+18
-7
@@ -115,6 +115,11 @@ function getMovieReviews($movie_id) {
|
||||
");
|
||||
$stmt->execute([$movie_id]);
|
||||
$reviews = $stmt->fetchAll();
|
||||
foreach ($reviews as &$review) {
|
||||
// 评价本身带的观后感受(JSON 字符串 → key 列表)
|
||||
$review['feelings'] = parseStoredFeelings($review['feelings'] ?? '');
|
||||
}
|
||||
unset($review);
|
||||
attachCommentsToReviews($reviews);
|
||||
return $reviews;
|
||||
}
|
||||
@@ -155,6 +160,9 @@ function getMyReview($movie_id, $admin_id) {
|
||||
$stmt = $db->prepare("SELECT * FROM reviews WHERE movie_id = ? AND admin_id = ?");
|
||||
$stmt->execute([$movie_id, $admin_id]);
|
||||
$row = $stmt->fetch();
|
||||
if ($row) {
|
||||
$row['feelings'] = parseStoredFeelings($row['feelings'] ?? '');
|
||||
}
|
||||
return $row ?: null;
|
||||
}
|
||||
|
||||
@@ -213,13 +221,15 @@ function attachReviewStatsToMovies(array &$movies) {
|
||||
|
||||
/**
|
||||
* 发表 / 修改评价。一个账号对一部电影只保留一条:已有则更新,没有则插入。
|
||||
* $feelings 是评价人自己选的观后感受 key 数组(可以为空)。
|
||||
* 调用前请自行校验 rating 在 1-10、content 非空且未超长。
|
||||
* 成功返回 true。
|
||||
*/
|
||||
function saveReview($movie_id, $admin_id, $rating, $content) {
|
||||
function saveReview($movie_id, $admin_id, $rating, $content, array $feelings = []) {
|
||||
$db = getDB();
|
||||
$rating = (int)$rating;
|
||||
$content = trim((string)$content);
|
||||
$rating = (int)$rating;
|
||||
$content = trim((string)$content);
|
||||
$feelings = normalizeFeelings($feelings);
|
||||
if ($rating < 1 || $rating > 10 || $content === '' || (int)$admin_id <= 0) {
|
||||
return false;
|
||||
}
|
||||
@@ -232,15 +242,16 @@ function saveReview($movie_id, $admin_id, $rating, $content) {
|
||||
|
||||
if ($existing) {
|
||||
$stmt = $db->prepare("
|
||||
UPDATE reviews SET rating = ?, content = ?, updated_at = CURRENT_TIMESTAMP
|
||||
UPDATE reviews SET rating = ?, content = ?, feelings = ?, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
");
|
||||
$stmt->execute([$rating, $content, $existing['id']]);
|
||||
$stmt->execute([$rating, $content, feelingsToJson($feelings), $existing['id']]);
|
||||
} else {
|
||||
$stmt = $db->prepare("
|
||||
INSERT INTO reviews (movie_id, admin_id, rating, content) VALUES (?, ?, ?, ?)
|
||||
INSERT INTO reviews (movie_id, admin_id, rating, content, feelings)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
");
|
||||
$stmt->execute([$movie_id, $admin_id, $rating, $content]);
|
||||
$stmt->execute([$movie_id, $admin_id, $rating, $content, feelingsToJson($feelings)]);
|
||||
}
|
||||
$db->commit();
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user