Para recuperar las preguntas por ajax necesitamos tres cosas. Una llamada con ajax desde JS. Una página en PHP que busque la pregunta y la devuelva. Y, como somos ordenaditos, una función en la librería que busque la pregunta.
Empecemos por el JS, que se limita a pedir la pregunta:
var preguntas;
//Busca una pregunta por Ajax
function cargarPregunta() {
$.get("pregunta.php", function (datos, status) {
if (status == "success") {
preguntas = JSON.parse(datos);
pintarPregunta();
}
});
}
//Pinta la pregunta en nuestro HTML
function pintarPregunta() {
$('#pregunta').text(preguntas.pregunta);
$('#res1').text(preguntas.respuestas[0]);
$('#res2').text(preguntas.respuestas[1]);
$('#res3').text(preguntas.respuestas[2]);
$('#res4').text(preguntas.respuestas[3]);
$(".tablero").show();
$('#mensaje div').fadeOut();
}
El backend en php, donde llama el ajax, es sólo un poco más complicado:
<?php require_once 'libreria.php'; session_start(); //Obtenemos una pregunta de la base de datos $fila = getPregunta($_SESSION['idUsuario']); //La fila que recuperamos la organizamos de una manera más amigable para el JS $res['pregunta'] = $fila['pregunta']; $res['id'] = $fila['idpreguntas']; $res['correcta'] = $fila['respuesta1']; $res['respuestas'] = [$fila['respuesta1'], $fila['respuesta2'], $fila['respuesta3'], $fila['respuesta4']]; shuffle($res['respuestas']); //Lo codificamos en JSON echo json_encode($res);
Por último necesitamos en nuestra librería una función que nos busque una pregunta en la BD y nos la devuelva:
function getPregunta($idUsuario) {
try {
$conn = conectar();
//Buscamos una pregunta que no se haya hecho a este usuario al azar
$sql = "SELECT * FROM trivial.preguntas where idpreguntas not in (select idpreguntas from resultados where idusuarios=$idUsuario) order by rand() limit 1";
$resul = $conn->query($sql);
$fila = $resul->fetch();
return $fila;
} catch (Exception $ex) {
echo $ex->getMessage();
}
}