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(); } }