connect_error) { die("Connection failed: " . $conn->connect_error); } if (!$conn->set_charset("utf8mb4")) { throw new Exception("文字コード設定失敗: " . $conn->error); } // プロジェクト情報取得 $stmt = $conn->prepare("SELECT p.*, u.display_name as author_display_name, u.icon_url as author_icon_url FROM projects p LEFT JOIN user_data u ON p.author_id = u.google_id WHERE p.id = ?"); $stmt->bind_param("i", $project_id); $stmt->execute(); $result = $stmt->get_result(); $project = $result->fetch_assoc(); if (!$project) { die("プロジェクトが見つかりません"); } // パスワードチェック $password_required = !empty($project['password']); $password_verified = false; if ($password_required) { if (isset($_POST['project_password'])) { if ($_POST['project_password'] === $project['password']) { $_SESSION['verified_projects'][$project_id] = true; $password_verified = true; } else { $password_error = "パスワードが間違っています"; } } elseif (isset($_SESSION['verified_projects'][$project_id])) { $password_verified = true; } } else { $password_verified = true; } if (!$password_verified) { // パスワード入力フォームを表示して終了 ?> パスワードが必要です - Scratch School

このプロジェクトはパスワードで保護されています

query("UPDATE projects SET views = views + 1 WHERE id = $project_id"); // ユーザーが星を付けたかどうか確認 $has_starred = false; $starred_users = json_decode($project['starred_users'] ?? '[]', true) ?? []; if (isset($_SESSION['user_id'])) { $has_starred = in_array($_SESSION['user_id'], $starred_users); } // 星のトグル処理 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['toggle_star'])) { if ($has_starred) { // 星を削除 $starred_users = array_diff($starred_users, [$_SESSION['user_id']]); $starred_users_json = $conn->real_escape_string(json_encode(array_values($starred_users))); $conn->query("UPDATE projects SET stars = stars - 1, starred_users = '$starred_users_json' WHERE id = $project_id"); $project['stars']--; $has_starred = false; } else { // 星を追加 $starred_users[] = $_SESSION['user_id']; $starred_users_json = $conn->real_escape_string(json_encode(array_values($starred_users))); $conn->query("UPDATE projects SET stars = stars + 1, starred_users = '$starred_users_json' WHERE id = $project_id"); $project['stars']++; $has_starred = true; } } // コメント処理 $comment_error = null; $comment_success = null; $comments = []; // commentカラムのJSONデータをデコード $comment_data = json_decode($project['comment'], true) ?? ['can_comment' => false, 'history' => []]; $can_comment = $comment_data['can_comment'] ?? false; $comments = $comment_data['history'] ?? []; if ($can_comment) { // コメント送信処理 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['comment_content'])) { $content = trim($_POST['comment_content']); if (empty($content)) { $comment_error = "コメント内容を入力してください"; } elseif (strlen($content) > 1000) { $comment_error = "コメントは1000文字以内で入力してください"; } else { // ユーザー情報を取得 $stmt = $conn->prepare("SELECT display_name, icon_url FROM user_data WHERE google_id = ?"); $stmt->bind_param("s", $_SESSION['user_id']); $stmt->execute(); $user_result = $stmt->get_result(); $user_data = $user_result->fetch_assoc(); if ($user_data) { $new_comment = [ 'user_id' => $_SESSION['user_id'], 'name' => $user_data['display_name'], 'icon_url' => $user_data['icon_url'], 'content' => $content, 'timestamp' => time() ]; array_unshift($comments, $new_comment); $comment_data['history'] = $comments; // データベース更新 $json_data = json_encode($comment_data, JSON_UNESCAPED_UNICODE); $stmt = $conn->prepare("UPDATE projects SET comment = ? WHERE id = ?"); $stmt->bind_param("si", $json_data, $project_id); if ($stmt->execute()) { $comment_success = "コメントを投稿しました"; } else { $comment_error = "コメントの保存に失敗しました"; } } else { $comment_error = "ユーザー情報が見つかりません"; } } } // コメント削除/編集処理 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['comment_action'])) { $index = $_POST['comment_index'] ?? null; $is_owner = ($_SESSION['user_id'] === $project['author_id']); if ($index !== null && isset($comments[$index])) { $comment = $comments[$index]; $is_comment_owner = ($comment['user_id'] === $_SESSION['user_id']); if ($is_owner || $is_comment_owner) { if ($_POST['comment_action'] === 'delete') { // コメント削除 array_splice($comments, $index, 1); $comment_data['history'] = $comments; $json_data = json_encode($comment_data, JSON_UNESCAPED_UNICODE); $stmt = $conn->prepare("UPDATE projects SET comment = ? WHERE id = ?"); $stmt->bind_param("si", $json_data, $project_id); $stmt->execute(); } elseif ($_POST['comment_action'] === 'edit' && isset($_POST['edited_content'])) { // コメント編集 $edited_content = trim($_POST['edited_content']); if (!empty($edited_content) && strlen($edited_content) <= 1000) { $comments[$index]['content'] = $edited_content; $comments[$index]['edited'] = true; $comment_data['history'] = $comments; $json_data = json_encode($comment_data, JSON_UNESCAPED_UNICODE); $stmt = $conn->prepare("UPDATE projects SET comment = ? WHERE id = ?"); $stmt->bind_param("si", $json_data, $project_id); $stmt->execute(); } } } } } } // 現在のユーザー情報を取得 $current_user_stmt = $conn->prepare("SELECT display_name, icon_url FROM user_data WHERE google_id = ?"); $current_user_stmt->bind_param("s", $_SESSION['user_id']); $current_user_stmt->execute(); $current_user_result = $current_user_stmt->get_result(); $current_user = $current_user_result->fetch_assoc(); // コメント投稿者のアイコン情報を取得 $comment_user_ids = array_column($comments, 'user_id'); if (!empty($comment_user_ids)) { $placeholders = implode(',', array_fill(0, count($comment_user_ids), '?')); $types = str_repeat('s', count($comment_user_ids)); $stmt = $conn->prepare("SELECT google_id, icon_url FROM user_data WHERE google_id IN ($placeholders)"); $stmt->bind_param($types, ...$comment_user_ids); $stmt->execute(); $icon_result = $stmt->get_result(); $user_icons = []; while ($row = $icon_result->fetch_assoc()) { $user_icons[$row['google_id']] = $row['icon_url']; } // コメントデータにアイコンURLを追加 foreach ($comments as &$comment) { if (isset($user_icons[$comment['user_id']])) { $comment['icon_url'] = $user_icons[$comment['user_id']]; } } } $conn->close(); ?> <?php echo htmlspecialchars($project['project_name']); ?> - Scratch School
読み込み中...

作者のアイコン by

👁️ 回閲覧

コメント

$comment): $is_owner = ($_SESSION['user_id'] === $project['author_id']); $is_comment_owner = ($comment['user_id'] === $_SESSION['user_id']); $can_edit = $is_owner || $is_comment_owner; $user_icon = $comment['icon_url'] ?? ''; ?>
ユーザーアイコン (編集済み)

まだコメントはありません