connect_error) { die(json_encode(["error" => "Conexión fallida: " . $conn->connect_error])); } // Obtener la IP del cliente en el servidor $ip_address = $_SERVER['REMOTE_ADDR']; // Recibir el user_agent desde el frontend $data = json_decode(file_get_contents("php://input"), true); $user_agent = $data['user_agent'] ?? null; // Establecer las variables de sesión en MariaDB $conn->query("SET @user_agent = '$user_agent'"); $conn->query("SET @ip_address = '$ip_address'"); // Consultar los premios con cantidad mayor que 0 $sql = "SELECT id, nombre, probabilidad, cantidad, inicio, final FROM premios3 WHERE cantidad > 0"; $result = $conn->query($sql); $premios = array(); $totalProbabilidad = 0; if ($result->num_rows > 0) { // Calcular el total de probabilidades while($row = $result->fetch_assoc()) { $premios[] = $row; $totalProbabilidad += $row['probabilidad']; } // Generar un número aleatorio entre 0 y el total de probabilidades $random = mt_rand(0, $totalProbabilidad * 1000) / 1000; // Se multiplica por 1000 para trabajar con 3 decimales $suma = 0; // Seleccionar el premio basado en la probabilidad acumulada foreach ($premios as $premio) { $suma += $premio['probabilidad']; if ($random <= $suma) { // copiar esta parte Establecer las variables de sesión en MariaDB $conn->query("SET @user_agent = '$user_agent'"); $conn->query("SET @ip_address = '$ip_address'"); // Actualizar la cantidad del premio seleccionado $stmt = $conn->prepare("UPDATE premios3 SET cantidad = cantidad - 1 WHERE id = ?"); if ($stmt) { $stmt->bind_param("i", $premio['id']); $stmt->execute(); $stmt->close(); // Devolver el premio seleccionado con sus rangos de ángulo echo json_encode([ 'id' => $premio['id'], 'nombre' => $premio['nombre'], 'inicio' => $premio['inicio'], 'final' => $premio['final'] ]); exit(); // Salir inmediatamente después de devolver el premio seleccionado } else { echo json_encode(["error" => "Error en la preparación de la actualización"]); } break; } } } else { echo json_encode(["error" => "No hay premios disponibles"]); } $conn->close(); ?>