"No se recibieron asientos para la compra."]); exit; } $conn->begin_transaction(); try { // Generar un ID de transacción único $transaction_id = uniqid("trx_"); foreach ($asientos as $asiento_id) { // **Depuración** error_log("Procesando asiento ID: $asiento_id para Concierto ID: $concierto_id"); // Marcar asiento como vendido $sql = "UPDATE asientos SET estado = 'vendido' WHERE id = ?"; $stmt = $conn->prepare($sql); if (!$stmt) { throw new Exception("Error en la preparación del UPDATE: " . $conn->error); } $stmt->bind_param("i", $asiento_id); $stmt->execute(); // Insertar en la tabla de boletos $sql_boleto = "INSERT INTO boletos (asiento_id, concierto_id, transaction_id, fecha_venta, precio) SELECT ?, ?, ?, NOW(), z.precio FROM asientos a JOIN zonas z ON a.zona_id = z.id WHERE a.id = ?"; $stmt_boleto = $conn->prepare($sql_boleto); if (!$stmt_boleto) { throw new Exception("Error en la preparación del INSERT: " . $conn->error); } $stmt_boleto->bind_param("iisi", $asiento_id, $concierto_id, $transaction_id, $asiento_id); $stmt_boleto->execute(); } $conn->commit(); echo json_encode(["success" => "Compra realizada con éxito", "transaction_id" => $transaction_id]); } catch (Exception $e) { $conn->rollback(); error_log("Error en la compra: " . $e->getMessage()); echo json_encode(["error" => "Error en la compra: " . $e->getMessage()]); } ?>