Como hacer un examen o test con PHP
Hola nuevamente, aquí estoy con otra de las mías… Esta vez vamos a hacer un test, como esos que sueles intentar pasar mientras pierdes el tiempo en Internet, en lugar de ponerte a estudiar ¬¬.
Bueno, en realidad estaba aburrido y como no tenia nada que hacer, pensé en ponerme a ver de que manera podía crear uno de estos, con el objetivo principal de aprender yo y para brindárselo a ustedes aquí, entonces al grano y basta ya de muela.
Introducción
Nuestro script constara de un formulario con varias preguntas (3 para este ejemplo) y tres posibles respuestas (puedes agregar las que quieras), de ellas solo una será la correcta y la nota o evaluación será en base a 5 puntos.
Algo que debo explicar entes de presentar el código, es que para dar la nota al examinado, lo haremos por la bien conocida cuenta para calcular promedio, la suma del valor de las respuestas divididas por la cantidad de preguntas. Les comento esto, pues me paso, que yo le ponía a las respuestas incorrectas el valor 0 (value=”0″), pues de lo contrario me daría una evaluación falsa, pero esto me dio el palo a la hora de validar el formulario para obligar el examinado a responder todas las preguntas, pues evaluaba el valor cero como vacío, entonces me lo resolví dándole valor 1 (value=”1″) y sustituyéndolo por cero con str_replace.
El código
<?php
// como siempre
// comprobamos si ha sido enviado el formulario
if(isset($_POST['evaluar']) && $_POST['evaluar'] == 'Evaluar') {
// y que no llegue vacío
if(!empty($_POST['respuesta_1']) && !empty($_POST['respuesta_2']) && !empty($_POST['respuesta_3'])){
// asignamos los valores a la variables que usaremos
// y sustituimos los 1 por 0, en caso de respuestas incorrectas
$respuesta_1 = str_replace(1, 0, $_POST['respuesta_1']);
$respuesta_2 = str_replace(1, 0, $_POST['respuesta_2']);
$respuesta_3 = str_replace(1, 0, $_POST['respuesta_3']);
// calculamos el promedio
// y redondeamos el resultado (round()) para evitar números decimales
$promedio = round(($respuesta_1 + $respuesta_2 + $respuesta_3) / 3);
// usamos la sentencia switch
// para darle la evaluación al examinado
switch ($promedio){
case 5:
$nota = "Usted tiene $promedio puntos, Excelente...!";
break;
case 4:
$nota = "Usted tiene $promedio puntos, Bien...!";
break;
case 3:
$nota = "Usted tiene $promedio puntos, Por los pelos...!";
break;
case 2:
$nota = "Usted tiene $promedio puntos, Suspenso, lo esperamos el próximo curso...!";
break;
case 1:
case 0:
$nota = "Definitivamente, este curso no es para usted...!";
break;
}
echo $nota;
}else{
// mensaje de error en caso que no se respondan todas las preguntas
echo "Debe responder todas las preguntas";
}
}
?>
<!-- el formulario -->
<form name="examen" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<p>Pregunta 1</p>
<input type="radio" value="1" name="respuesta_1" /> mal<br />
<input type="radio" value="5" name="respuesta_1" /> bien<br />
<input type="radio" value="1" name="respuesta_1" /> mal<br />
<p>Pregunta 2</p>
<input type="radio" value="1" name="respuesta_2" /> mal<br />
<input type="radio" value="5" name="respuesta_2" /> bien<br />
<input type="radio" value="1" name="respuesta_2" /> mal<br />
<p>Pregunta 3</p>
<input type="radio" value="1" name="respuesta_3" /> mal<br />
<input type="radio" value="5" name="respuesta_3" /> bien<br />
<input type="radio" value="1" name="respuesta_3" /> mal<br />
<p><input type="submit" name="evaluar" value="Evaluar" /></p>
</form>
NOTA: Como mejor se ve el funcionamiento de este script, es poniendo 5 o mas preguntas en el formulario o dando respuestas regulares que tengan valor 3 (value=”3″), pues como se muestra aquí, la función round() nunca devolverá el promedio con valor 4.
Conclusiones
Para terminar, pues lo de siempre, la esperanza de que algún aburrido pase por aquí y esto le sirva de algo y en lugar de ponerse a llenar un test, que haga el suyo propio y lo cuelgue en su web para hacer que los demás pierdan el tiempo xDDD.
Y decirles, que la dudilla de que el cero se enviara como un valor vacío, la resolví como siempre en Foros del Web, en este post: Que el cero no sea un valor vacío.
Saludos y suerte
Post relacionados
9 Comentarios »
RSS feed para comentarios en este post. TrackBack URL



quiero que me manden informacion a mi correo electronico relcaionada a realizar bases de datos utilizando mysql y php porfis.
mil gracias.
hola que tal mira use el scpript y me salio un error en pa linea 19 :S , no se que es lo que sucede podrias ayudarme , porfa a mi mail podrias pasar la info o por msn , gracias
Eso es facil, el scrip funciona, pero tiene errores, fijate que en vez de las tipicas comillas (”) o (’) salen otras, mira
$nota = “Usted tiene $promedio puntos, Excelente…!”;
Vez?? Salen estas (“)
Lo que tenes que hacer es reemplazarlas por las comillas del shif+2
Si @Masato, el problema es que WP las cambia, pero para la proxima intentare con shif + 2 como dices a ver que pasa, aunque en realidad tendria que buscar la forma de escribirlo en HTML… ;) y soy un poco vago para eso.
Saludos y gracias por visitar mi Blog
hola amigo disculpa com le hago para hacer un ejemplo parecido a este, es decir, hacer un examen en linea.. que utilice bases de datos,, en si lo que quiero saber es como hacerle para almacenar las preguntas y respuestas en una base de datos..
@Monkey para responderte lo que quieres saber, tendría que escribir un nuevo post…
No has intentado hacer algún código? Puedes usar este ejemplo y ver como guardar los registros en una base de datos. Te recomiendo que mires las funciones de MySQL en el manual de PHP y si tienes dudas, hay un lugar donde puedes aclararlas todas
Saludos y suerte
Excelente aporte mi estimado, muchas gracias estuvo de poca..
Salu2, desde México.
Hola que tal… ps me parece muy util tu test
ocupo saber como hacer uno para un tutorial
que funcione asi:
el usuario entra al tutorial y todo luego
despues de haber pasado la primera unidad
se le somete a una prueba con el diseño igual
al que tienes en ese codigo
y si pasa la prueba con 100% puede pasar a
la siguiente unidad y si no lo pasa con 100%
pues se queda ahy mismo asta sacar el 100%
ayudame porfavor y te lo agradecere mucho
bye bye
hola como estas me interesa mucho sobre el tema que trataste aca lo que pasa e sque yo tengo que hacer ese tipo de test para mis residencias y no se bien que onda con esto la verdad no he manejado bien php y mi pag la hice en dreamweaber pero no se como logar ni nada de eso habria forma de que me ayudaras gracias