Ayuda con la inserción de cuestionarios tipo test en una web programada con lenguaje PHP
En hotscript.com en el apto de cuestionarios y test y he estado haciendo pruebas con prácticamente todos y entre ellos los que me funcionan son wpQuiz(http://www.wireplastik.com/) y MultiWebQuiz(http://www.multiwebvista.com/testzone/download.php), el resto; phpQuest1_5, PHP Trivia, phpTest, starXtest, PHPTestManager, Quiz-o-matic '76 me da algún tipo de problema. Me he centrado en los que me funcionan he intentado hacer lo que me dijiste, adaptarlos a mi página pero me estoy rompiendo la cabeza y desanimandome la verdad porque no consigo nada. Si no te importa echarme una mano es que no se que hacer. Te vuelvo a enviar lo que quiero conseguir:
Estoy haciendo una página para una asignatura. Necesito insertar una serie de cuestionarios tipo test para que los alumnos puedan evaluar sus conocimientos sobre la materia que se imparte en la asignatura. Me gustaría que se tuviera un tiempo limitado para resolver los test y que se evaluaran las preguntas que te haya dado tiempo ha contestar sobre el total, restando las incorrectas y no puntuando las no contestadas(modo examen tipo test). Mostrando a su conclusión un informe detallado con los aciertos y los errores. Y que los resultados obtenidos se fueran almacenando para que la próxima vez que ese alumno entrara en la web viera sus estadísticas(una especie de historial donde se pudiera ver la evolución de cada alumno). Por otro lado también me gustaría que el alumno tuviera la posibilidad de elegir resolver un cuestionario sin cuenta atrás, es decir sin un tiempo llimitado para contestar. A lo mejor hechándole tu un vistazo a los cuestionarios wpQuiz y MultiWebQuiz consigues extraer de los códigos fuente(que es lo que yo he estado intentando hacer) lo que necesito para poder crear los cuestionarios que quiero. Tengo creada la base de datos que me aconsejaste crear(los usuarios y el historial, las preguntas y las respuestas). No se si te estoy pidiendo demasiado.
Ante todo perdona por el gran retraso que me he tomado en responder. Me he puesto a desarrollar una aplicación que cumpla los requisitos que deseas, pero me he encontrado inesperadamente con problemas en mi ordenador que no me han permitido probar las sesiones. Parece ser que tengo mal instalado php, y de momento no puedo reinstalarlo ni solucionarlo. Aun así te voy a poner y explicar el código. El cuestionario se compone de dos partes principales. Una la página de entrada donde se valida el usuario y otra la página que muestra y evalúa el cuestionario. Para que todo funcione tienes que crear una base de datos con varias tablas. Las tablas con sus respectivos campos son las siguientes: USUARIOS: nombreUsuario, contrasenia, nivel PREGUNTAS: enunciado, cod_preg, nivel RESPUESTAS: enunciado, cod_resp, cod_preg, valor(0=falsa, 1=verdadera) HISTORIAL: nombreUsuario, cod_preg, puntuacion El campo nivel representa el nivel de conocimientos, lo tienes que ir aumentando a medida que el alumno vaya respondiendo las preguntas. Sirve para distinguir entre preguntas de niveles fáciles y difíciles. Cod_preg y Cod_resp tienen que ser códigos únicos, no se tienen que repetir. En PREGUNTAS vas almacenando las preguntas, y en RESPUESTAS las respuestas para cada pregunta. Como es un test cada pregunta tendrá varias respuestas y una o varias de ellas podrán ser verdaderas. En RESPUESTAS, Cod_preg es lo que indica que esa respuesta pertenece a una pregunta concreata. Todas las respuestas que tengan mismo valor en ese campo serán las respuestas de una pregunta. Es decir, la pregunta P1 tendrá como respuestas todas las que cod_preg en la tabla RESPUESTAS tengan valor P1. Por último en HISTORIAL se almacena la puntuación de cada pregunta y cada alumno. El código de la página de entrada es el siguiente: <?php session_start(); ?> <html> <head> <title> Cuestionario de preguntas con tiempo </title> </head> <body> <H2 align='center'> CUESTIONARIO </H2> <br> <hr> <br> <?php if ( !isset($_POST['Usuario'] ) ) { echo "<form name='contacto' method='POST'> \n"; echo "Alumno: <input type='text' name='Usuario'> <br> \n"; echo "Contraseña: <input type='password' name='contrasenia'> <br> \n"; echo "<input type='checkbox' name='tiempo'> Tiempo limitado. <br> \n"; echo "<input type='submit' name='Enviar' value='Enviar'> \n"; echo "</form> \n"; } else { $consulta = "SELECT nombreUsuario, contrasenia, nivel FROM usuarios WHERE nombreUsuario = '". $_POST['Usuario'] ."' AND contrasenia = '". $_POST['contrasenia'] ."'"; $db = mysql_connect('localhost', '', ''); mysql_select_db('cuestionario', $db); $resultado = mysql_query($consulta, $db); $numDatos = mysql_num_rows($resultado); if ($numdatos > 0) { $_SESSION['Validado'] = 1; $_SESSION['Usuario'] = $_POST['Usuario']; $_SESSION['nivel'] = mysql_result($resultado, 0,2); if ( $_POST['tiempo'] ) { $_SESSIO['temporizador'] = 30; //minutos del temporizador } else { $_SESSIO['temporizador'] = 0; } } else { $_SESSION['Validado'] = 0; } mysql_close($db); header("Location: ./cuestionario.php"); } ?> </body> </html> Como ves, se muestra el formulario pidiendo el usuario y contraseña, así como la opción de tiempo. Cuando se valida se va a la página del cuestionario. En la variable de sesión TEMPORIZADOR tienes que poner el tiempo en minutos que quieres permitir para responder. Yo le he asignado 30 minutos. Ahora el código del cuestionario sería el siguiente: <?php session_start(); if( $_SESSION['Validado'] == 0) { header("Location: ./entrada.php"); } ?> <html> <head> <title> Cuestionario de preguntas con tiempo </title> </head> <body> <H2 align='center'> CUESTIONARIO </H2> <br> <hr> <br> <?php if ( !isset($_POST['evaluar']) ) { $_SESSION['preguntas'] = array(); $_SESSION['respuestas'] = array(); if ($_SESSION['temporizador'] > 0) { echo "<script language='JavaScript'> \n"; echo "temporizador = setInterval('document.forms.fo.submit();', ({$_SESSION['temporizador']} *60 *1000) ); \n"; echo "</script>"; } $db = mysql_connect('localhost', '', ''); mysql_select_db('cuestionario', $db); $consulta = "SELECT cod_preg, enunciado FROM preguntas WHERE nivel = {$_SESSION['nivel']}"; $preguntas = mysql_query($consulta, $db); if ( mysql_num_rows($preguntas) ) { echo "<form name='fo' method='post'> \n"; while ($pregunta = mysql_fetch_array($preguntas) ) { $_SESSION['preguntas'][$pregunta['cod_preg']] = array(); $_SESSION['preguntas'][$pregunta['cod_preg']]['puntuacion'] = 0; $_SESSION['preguntas'][$pregunta['cod_preg']]['numrespuestas'] = 0; echo "{$pregunta['enunciado']} <br> \n"; $consulta = "SELECT cod_resp, enunciado, valor FROM respuestas WHERE cod_preg = '{$pregunta['cod_preg']}'"; $respuestas = mysql_query($consulta, $db); if ( mysql_num_rows($respuestas) ) { while ($respuesta = mysql_fetch_array($respuestas) ) { echo "{$respuesta['enunciado']} <input type='radio' value='{$respuesta['cod_resp']}' name='RB{$pregunta['cod_preg']}'> <br> \n"; $_SESSION['respuestas'][$respuesta['cod_resp']] = $respuesta['valor']; $_SESSION['preguntas'][$pregunta['cod_preg']]['numrespuestas'] ++; } } } echo "<input type='submit' name ='evaluar' value='Evaluar'> <br> \n"; echo "</form> <br> \n"; } mysql_close(); } else { $puntuacion = 0; $contestadas = 0; $acertadas = 0; $totalPreguntas = count( $_SESSION['preguntas'] ); $db = mysql_connect('localhost', '', ''); mysql_select_db('cuestionario', $db); foreach ($_POST as $nombre => $valor) { if ( substr_count($nombre, "RB") > 0 ) { $contestadas ++; $codigo_pregunta = substr( $nombre, 2 ); echo "{$_SESSION['preguntas'][$codigo_pregunta]} <br> $codigo_pregunta <br> \n"; $preguntaMal = - (1 / $_SESSION['preguntas'][ $codigo_pregunta ]['numrespuestas'] ); if ( $_SESSION['respuestas'][ $valor ] ) { $_SESSION['preguntas'][ $codigo_pregunta ]['puntuacion'] = 1; $acertadas ++; } else { $_SESSION['preguntas'][ $codigo_pregunta ]['puntuacion'] = $preguntaMal; } $puntuacion += $_SESSION['preguntas'][ $codigo_pregunta ]['puntuacion']; $respusta = "INSERT INTO historial (nombreUsuario, cod_preg, puntuacion) VALUES ('{$_SESSION['Usuario']}', '{$codigo_pregunta}', '{$_SESSION['preguntas'][ $codigo_pregunta ]['puntuacion']}' )"; $ok = mysql_query($respuesta, $db); } } mysql_close($db); echo "<B> El test ha finalizado. </B> <br> <br> \n"; echo "Los resultados son los siguientes: <br> \n"; echo " - Pregutnas contestadas: $contestadas <br> \n"; echo " - Preguntas acertadas: $acertadas <br> \n"; echo " - Preguntas falladas: " . ($contestadas - $acertadas) . " <br> \n"; echo " - Puntuación total: <B> $puntuacion </B> <br> <br> \n"; echo "Puntuación de cada pregunta (preguntas del nivel {$_SESSION['nivel']}): <br> \n"; $contador = 1; foreach ($_SESSION['preguntas'] as $preg => $valor) { $puntos = each($valor); echo "- Pregunta ". $contador++ .": {$puntos[1]} <br> \n"; } } ?> </body> </html> Comprueba si el usuario se ha validado, en caso contrario va a la página de validación. Luego se crea un array de cada pregunta y las respuestas con su puntuación. Se muestra el cuestionario cogiendo las preguntas y respuestas de la base de datos. Cuando pasa el tiempo o se pulsa el botón Evaluar, se pasa a evaluar el resultado de las respuestas respondidas. A la vez se va mostrando la pultuación de cada pregunta respondida, y se va almacenando en la tabla HISTORIAL. Por último se muestra el resumen. Espero que te sirva, y que no sea demasiado tarde.
Gracias por tu ayuda experto, no te preocupes por el retraso. Yo he tenido problemas de tipo personal y había dejado un poco de lado el proyecto, he visto tu respuesta una semana después de que me contestaras. Te insisto, muchas gracias por dedicarme tu tiempo, mañana retomo de nuevo el proyecto. Gracias, un saludo