prepare("SELECT id FROM visitor_logs WHERE session_id = ? LIMIT 1"); $stmt->execute([$session_id]); $visitor = $stmt->fetch(); if ($visitor) { // Update activity $stmt = $db->prepare("UPDATE visitor_logs SET last_activity = CURRENT_TIMESTAMP WHERE id = ?"); $stmt->execute([$visitor['id']]); } else { // New session, get GeoIP $country = 'Unknown'; $country_code = '??'; $lat = 0; $lon = 0; // Simple GeoIP via API (Note: This might slow down the first request, but we only do it once per session) try { $ctx = stream_context_create(['http' => ['timeout' => 2]]); $geo = file_get_contents("http://ip-api.com/json/$ip", false, $ctx); if ($geo) { $data = json_decode($geo, true); if ($data && $data['status'] === 'success') { $country = $data['country']; $country_code = $data['countryCode']; $lat = $data['lat'] ?? 0; $lon = $data['lon'] ?? 0; } } } catch (Exception $e) { // Silently fail if API is down } $stmt = $db->prepare("INSERT INTO visitor_logs (ip_address, country, country_code, lat, lon, session_id) VALUES (?, ?, ?, ?, ?, ?)"); $stmt->execute([$ip, $country, $country_code, $lat, $lon, $session_id]); } }