diff --git a/Leaderboard.html b/Leaderboard.html index a88f02f..933c91d 100644 --- a/Leaderboard.html +++ b/Leaderboard.html @@ -21,6 +21,8 @@ +
+ diff --git a/Leaderboard.js b/Leaderboard.js index 8329105..8932575 100644 --- a/Leaderboard.js +++ b/Leaderboard.js @@ -7,12 +7,53 @@ function loadLeaderboard() { .then(response => response.json()) .then(data => { if (data.status === "success") { + // Render Top 10 renderLeaderboard(data.leaderboard); + + // Render Ranking Saya (User Rank) + if (data.user_rank) { + renderUserRank(data.user_rank); + } } }) .catch(error => console.error("Error loading leaderboard:", error)); } +// ... fungsi renderLeaderboard tetap sama ... + +// TAMBAHKAN FUNGSI INI DI BAWAH +function renderUserRank(user) { + const container = document.getElementById('userRankContainer'); + if (!container) return; + + // Format angka skor + const formattedScore = new Intl.NumberFormat().format(user.score); + + // HTML structure sesuai CSS .your-rank-container + const html = ` +
+
+
+
+
+ ${user.rank} +
+
+
${escapeHtml(user.username)}
+
+
+
${formattedScore}
+
Points
+
+
+
+ `; + + container.innerHTML = html; +} + +// ... fungsi escapeHtml tetap sama ... + function renderLeaderboard(players) { const listContainer = document.getElementById('leaderboardList'); if (!listContainer) return; // Safety check diff --git a/Leaderboard.php b/Leaderboard.php index 6af6f98..3cfb4bb 100644 --- a/Leaderboard.php +++ b/Leaderboard.php @@ -1,23 +1,58 @@ "error", + "leaderboard" => [], + "user_rank" => null +]; + +// 1. Ambil Top 10 Global $query = "SELECT username, score FROM leaderboard ORDER BY score DESC LIMIT 10"; $result = $conn->query($query); -$leaderboard = []; - if ($result && $result->num_rows > 0) { while ($row = $result->fetch_assoc()) { - $leaderboard[] = $row; + $response['leaderboard'][] = $row; } } -// Kirim data ke frontend dalam bentuk JSON -echo json_encode([ - "status" => "success", - "leaderboard" => $leaderboard -]); +// 2. Ambil Ranking User yang sedang Login (Jika ada session) +if (isset($_SESSION['user_id'])) { + $my_id = $_SESSION['user_id']; + + // Ambil score user saat ini + $scoreQuery = $conn->prepare("SELECT username, score FROM leaderboard WHERE user_id = ?"); + $scoreQuery->bind_param("i", $my_id); + $scoreQuery->execute(); + $scoreResult = $scoreQuery->get_result(); + + if ($scoreRow = $scoreResult->fetch_assoc()) { + $myScore = $scoreRow['score']; + $myUsername = $scoreRow['username']; + + // Hitung Ranking (Count berapa orang yang score-nya lebih tinggi) + // Logika: Jumlah orang dengan score > score saya, ditambah 1 + $rankQuery = $conn->prepare("SELECT COUNT(*) as rank_above FROM leaderboard WHERE score > ?"); + $rankQuery->bind_param("i", $myScore); + $rankQuery->execute(); + $rankResult = $rankQuery->get_result(); + $rankRow = $rankResult->fetch_assoc(); + + $myRank = $rankRow['rank_above'] + 1; + + $response['user_rank'] = [ + "username" => $myUsername, + "score" => $myScore, + "rank" => $myRank + ]; + } +} + +$response['status'] = "success"; +echo json_encode($response); $conn->close(); ?> \ No newline at end of file