Cuando el usuario pinche en un botón tendremos que averiguar si la respuesta es correcta y guardar el resultado de la acción en la base de datos. Es más sencillo de lo que parece. En primer lugar enlazamos el click de los botones por jQuery:
$('button').click(function () {
....
}
Ahí tendremos que hacer dos cosas. Comprobar que la respuesta es correcta o no y mostrar un mensaje en consecuencia y guardar en la base de datos. Lo primero es simple:
var puntos = 0;
if ($(this).text() === preguntas.correcta) {
$('#mensaje').html('<div class="alert alert-success alert-dismissible"> <button type="button" class="close" data-dismiss="alert">×</button> <strong>¡Bien! </strong> Respuesta correcta.</div>')
puntos = 1;
} else {
$('#mensaje').html('<div class="alert alert-danger alert-dismissible"> <button type="button" class="close" data-dismiss="alert">×</button> <strong>¡Error! </strong> Respuesta incorrecta.</div>')
}
Lo segundo, también:
$.post("resultado.php", {idPregunta: preguntas.id, puntos: puntos}, function (datos, status) {
$('#puntuacion').text(datos);
cargarPregunta();
});
Todo junto:
$('button').click(function () {
var puntos = 0;
//Comprobamos que el botón pulsado es la respuesta correcta
if ($(this).text() === preguntas.correcta) {
$('#mensaje').html('<div class="alert alert-success alert-dismissible"> <button type="button" class="close" data-dismiss="alert">×</button> <strong>¡Bien! </strong> Respuesta correcta.</div>')
puntos = 1;
} else {
$('#mensaje').html('<div class="alert alert-danger alert-dismissible"> <button type="button" class="close" data-dismiss="alert">×</button> <strong>¡Error! </strong> Respuesta incorrecta.</div>')
}
//Escondemos el tablero para queno pueda pulsar más botones
$(".tablero").hide();
//LLamamos por ajax con post para guardar los resultados, la función nos devuelve la puntuación
$.post("resultado.php", {idPregunta: preguntas.id, puntos: puntos}, function (datos, status) {
$('#puntuacion').text(datos);
cargarPregunta();
});
});
La página a la que llamamos se limita a guardar los datos y devolver la puntuación:
<?php require_once 'libreria.php'; session_start(); //Recuperamos los datos $idUsuario= $_SESSION['idUsuario']; $idPregunta= filter_input(INPUT_POST, 'idPregunta'); $puntos= filter_input(INPUT_POST, 'puntos'); //Y guardamos el resultado $puntos=guardaResultado($idUsuario,$idPregunta,$puntos); //Devolvemos los puntos echo $puntos;
Guardar resultado es un simple insert:
function guardaResultado($idUsuario, $idPregunta, $puntos) {
try {
$conn = conectar();
$sql = "insert into resultados (idusuarios,idpreguntas,puntos) values (:idu,:idp,:puntos)";
$st = $conn->prepare($sql);
$st->execute(['idu' => $idUsuario, 'idp' => $idPregunta, 'puntos' => $puntos]);
return getPuntuacion($idUsuario);
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
Y obtener los resultados un simple sql:
function getPuntuacion($idUsuario) {
try {
$conn = conectar();
$sql = "SELECT ifnull(sum(puntos),0) puntuacion FROM resultados where idusuarios=:id";
$st = $conn->prepare($sql);
$st->execute(['id' => $idUsuario]);
$fila = $st->fetch();
return $fila['puntuacion'];
} catch (Exception $ex) {
echo $ex->getMessage();
}
}