Jul
03
2008

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

Escrito por rogertm en: Tutoriales | Tags: , , , ,

9 Comentarios »

  • MARICARMEN

    quiero que me manden informacion a mi correo electronico relcaionada a realizar bases de datos utilizando mysql y php porfis.
    mil gracias.

    Comment | July 16, 2008
  • carlos

    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

    Comment | August 30, 2008
  • Masato

    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

    Comment | August 31, 2008
  • 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

    Comment | September 1, 2008
  • Monkey

    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..

    Comment | November 11, 2008
  • @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

    Comment | November 12, 2008
  • racso2099

    Excelente aporte mi estimado, muchas gracias estuvo de poca..

    Salu2, desde México.

    Comment | November 25, 2008
  • Leticia

    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

    Comment | August 3, 2009
  • jazmin

    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

    Comment | January 27, 2010

RSS feed para comentarios en este post. TrackBack URL

Comentar

Kilómetro Cero - RogerTM @ Bloggers Cuba
Powered by WordPress. Theme: TheBuckmaker. Insolvenz Konkurs, Autor werden
Modificado por: RogerTM para Kilómetro Cero

Kilómetro Cero es un Blog muy Cool para Internet Explorer