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