prepare("SELECT id FROM persons WHERE name = ?"); $stmt->execute([$name]); if ($stmt->fetch()) { $error = '该姓名已存在'; } else { // 保存头像 $avatar_path = null; if (!empty($avatar_base64)) { $avatar_path = saveBase64Image($avatar_base64, AVATAR_DIR, 'avatar'); } $stmt = $db->prepare("INSERT INTO persons (name, color, avatar) VALUES (?, ?, ?)"); $stmt->execute([$name, $color, $avatar_path]); $message = '观影人添加成功'; } } } // ---------- 处理编辑 ---------- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'edit') { $id = (int)$_POST['id']; $name = trim($_POST['name'] ?? ''); $color = normalizeHexColor($_POST['color'] ?? '#888888'); $avatar_base64 = $_POST['avatar_base64'] ?? ''; if (empty($name)) { $error = '姓名不能为空'; } else { // 检查重复 $stmt = $db->prepare("SELECT id FROM persons WHERE name = ? AND id != ?"); $stmt->execute([$name, $id]); if ($stmt->fetch()) { $error = '该姓名已存在'; } else { // 获取旧头像 $stmt = $db->prepare("SELECT avatar FROM persons WHERE id = ?"); $stmt->execute([$id]); $old = $stmt->fetch(); $old_avatar = $old['avatar'] ?? null; // 保存新头像 $avatar_path = $old_avatar; if (!empty($avatar_base64)) { // 删除旧头像 deleteStoredFile($old_avatar); $avatar_path = saveBase64Image($avatar_base64, AVATAR_DIR, 'avatar'); } $stmt = $db->prepare("UPDATE persons SET name = ?, color = ?, avatar = ? WHERE id = ?"); $stmt->execute([$name, $color, $avatar_path, $id]); $message = '观影人信息已更新'; } } } // ---------- 处理删除 ---------- if (isset($_GET['action']) && $_GET['action'] === 'delete' && isset($_GET['id'])) { $id = (int)$_GET['id']; $stmt = $db->prepare("SELECT COUNT(*) FROM viewers WHERE person_id = ?"); $stmt->execute([$id]); $count = $stmt->fetchColumn(); if ($count > 0) { $error = "该观影人关联了 {$count} 部电影,不能直接删除。请先移除关联。"; } else { // 删除头像文件 $stmt = $db->prepare("SELECT avatar FROM persons WHERE id = ?"); $stmt->execute([$id]); $row = $stmt->fetch(); if ($row) { deleteStoredFile($row['avatar']); } $stmt = $db->prepare("DELETE FROM persons WHERE id = ?"); $stmt->execute([$id]); $message = '观影人已删除'; } } // ---------- 获取列表 ---------- $stmt = $db->query("SELECT * FROM persons ORDER BY name"); $persons = $stmt->fetchAll(); // ---------- 获取编辑数据 ---------- $edit_data = null; if (isset($_GET['action']) && $_GET['action'] === 'edit' && isset($_GET['id'])) { $id = (int)$_GET['id']; $stmt = $db->prepare("SELECT * FROM persons WHERE id = ?"); $stmt->execute([$id]); $edit_data = $stmt->fetch(); if (!$edit_data) header('Location: persons.php'); } // 50种预设颜色 $preset_colors = [ '#e74c3c','#c0392b','#e67e22','#d35400','#f39c12', '#f1c40f','#f7dc6f','#2ecc71','#27ae60','#1abc9c', '#16a085','#3498db','#2980b9','#9b59b6','#8e44ad', '#34495e','#2c3e50','#e84393','#fd79a8','#00b894', '#00cec9','#0984e3','#6c5ce7','#fdcb6e','#e17055', '#d63031','#f0932b','#6ab04c','#22a6b3','#4834d4', '#be2edd','#130f40','#535c68','#95afc0','#7ed6df', '#e056a0','#ffb142','#33d9b2','#227093','#218c74', '#b33939','#cd6133','#f97f51','#82589f','#3dc1d3', '#b8e994','#78e08f','#f6b93b','#e55039','#4a69bd' ]; ?>