File manager - Edit - /home/ipsc/api/target_hit.php
Back
<?php require_once "../connection.php"; header("Content-Type: application/json"); $player_code = $_POST['player_code'] ?? null; $target_id = $_POST['target_id'] ?? null; // แก้จาก intval เป็น floatval เพื่อรองรับทศนิยม (เช่น 5.500 วินาที) $time = floatval($_POST['time'] ?? 0); if (!$player_code) { echo json_encode(["success" => false, "message" => "No player_code"]); exit; } /* 1) หา player ที่กำลังแข่ง */ $stmt = $conn->prepare("SELECT id, status FROM players WHERE code = ? AND status = 'running' LIMIT 1"); $stmt->bind_param("s", $player_code); $stmt->execute(); $player = $stmt->get_result()->fetch_assoc(); if (!$player) { echo json_encode(["success" => false, "message" => "No running player"]); exit; } $player_id = (int)$player['id']; /* 2) บันทึก log เป้า (บันทึกเฉพาะเป้าที่มี ID และไม่ใช่ Heartbeat) */ if ($target_id && $target_id !== "0") { $check = $conn->prepare("SELECT id FROM target_log WHERE player_id = ? AND target_id = ?"); $check->bind_param("is", $player_id, $target_id); $check->execute(); if ($check->get_result()->num_rows == 0) { $insert = $conn->prepare("INSERT INTO target_log (player_id, target_id, hit_time) VALUES (?, ?, NOW())"); $insert->bind_param("is", $player_id, $target_id); $insert->execute(); } } /* 3) นับจำนวนเป้าที่ล้มจริงจาก Database */ $resCount = $conn->query("SELECT COUNT(*) AS total FROM target_log WHERE player_id = $player_id"); $count = $resCount->fetch_assoc()['total']; /* 4) อัปเดตเวลา (อัปเดตเฉพาะตอนสถานะยังเป็น running เท่านั้น) */ $update = $conn->prepare("UPDATE players SET time = ? WHERE id = ? AND status = 'running'"); $update->bind_param("di", $time, $player_id); // ใช้ "d" สำหรับ double/float $update->execute(); /* 5) เช็คจำนวนเป้าจากตาราง event */ $event = $conn->query("SELECT target_count FROM event LIMIT 1")->fetch_assoc(); $target_required = (int)($event['target_count'] ?? 0); $finished = false; // ต้องยิงให้ "เท่ากับ" หรือ "มากกว่า" จำนวนที่ตั้งไว้ในหน้า Admin ถึงจะจบ if ($count >= $target_required && $target_required > 0) { $conn->query("UPDATE players SET status = 'finished' WHERE id = $player_id"); // ตั้งคนถัดไปเป็น ready $conn->query("UPDATE players SET status = 'ready' WHERE status = 'waiting' ORDER BY id ASC LIMIT 1"); $finished = true; } echo json_encode([ "success" => true, "player" => $player_code, "time" => $time, "hit" => $count, "target_required" => $target_required, "finished" => $finished ]);
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.84 |
proxy
|
phpinfo
|
Settings