diff --git a/clases/ClaseRespuestaAlmacenada.php b/clases/ClaseRespuestaAlmacenada.php new file mode 100644 index 0000000..50e82cb --- /dev/null +++ b/clases/ClaseRespuestaAlmacenada.php @@ -0,0 +1,79 @@ +idRespuestaAlmacenada = $idRespuestaAlmacenada; + $this->idPartidaxPregunta = $idPartidaxPregunta; + $this->idUsuario = $idUsuario; + $this->idRespuesta = $idRespuesta; + $this->primero = $primero; + } + + /** + * Guarda la respuesta que ha seleccionado un usuario en una pregunta de la partida. + */ + public function guardarRespuesta() { + $conexion = conexionBD(); + if (is_array($conexion)) return $conexion; + + try { + $sql = "INSERT INTO respuestaalmacenada (idPartidaxPregunta, idUsuario, idRespuesta, primero) + VALUES (:idPartidaxPregunta, :idUsuario, :idRespuesta, :primero)"; + $consulta = $conexion->prepare($sql); + + $consulta->bindParam(':idPartidaxPregunta', $this->idPartidaxPregunta); + $consulta->bindParam(':idUsuario', $this->idUsuario); + $consulta->bindParam(':idRespuesta', $this->idRespuesta); + $consulta->bindParam(':primero', $this->primero, PDO::PARAM_INT); + $consulta->execute(); + + return [ + 'exito' => 'Respuesta del usuario almacenada correctamente.', + 'exito_tecnico' => $conexion->lastInsertId() + ]; + } catch (PDOException $error) { + return [ + 'error' => 'Ocurrió un error al guardar la respuesta del jugador.', + 'error_tecnico' => $error->getMessage() + ]; + } + } + + /** + * Obtiene los aciertos totales de un usuario en una partida específica. + * Útil para calcular las estadísticas individuales al terminar el juego. + */ + public static function obtenerAciertosUsuarioEnPartida($idPartida, $idUsuario) { + $conexion = conexionBD(); + if (is_array($conexion)) return $conexion; + + try { + $sql = "SELECT COUNT(*) AS aciertos + FROM respuestaalmacenada ra + INNER JOIN partidaxpregunta pxp ON ra.idPartidaxPregunta = pxp.idPartidaxPregunta + INNER JOIN respuesta r ON ra.idRespuesta = r.idRespuesta + WHERE pxp.idPartida = :idPartida AND ra.idUsuario = :idUsuario AND r.correcta = 1"; + + $consulta = $conexion->prepare($sql); + $consulta->bindParam(':idPartida', $idPartida); + $consulta->bindParam(':idUsuario', $idUsuario); + $consulta->execute(); + + $resultado = $consulta->fetch(PDO::FETCH_ASSOC); + return (int)$resultado['aciertos']; + } catch (PDOException $error) { + return [ + 'error' => 'Ocurrió un error al calcular los aciertos.', + 'error_tecnico' => $error->getMessage() + ]; + } + } +} \ No newline at end of file