Ver Mensaje Individual
  #10 (permalink)  
Antiguo 15/07/2013, 06:52
Avatar de Italico76
Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Como capturar las respuestas correctas o incorrectas de un TEST Online.

@Triby: me gusto lo de que los value sean numericos.....

Ve directo al final que te dejo una idea aunque seguro lo resolveras mejor.

@CHAEEZ: el puntaje se puede calcular tienendo en cuenta valores para respuestas correctas, incorrectas y preguntas sin contestar:

Cita:
$valor_rta_ok = 1; // suma +1
$valor_rta_not_ok = 0; // no suma, podria restar
$valor_rta_null = 0; // no suma, podria restar algo
Preguntas (agrego una, corrijo otra)

Código HTML:
Ver original
  1. <form method="POST" action='<?=$_SERVER['PHP_SELF']?>' >
  2.     Cual es la capital de Argentina ? <br/>
  3.     <input type="radio" name="pregunta0" value="1"/>Paris<br/>
  4.     <input type="radio" name="pregunta0" value="2"/>Caracas<br/>
  5.     <input type="radio" name="pregunta0" value="3"/>Bogota DC<br/>
  6.     <input type="radio" name="pregunta0" value="4"/>Ninguna de las anteriores<br/>
  7.     <p/>
  8.     Que es la Metamorfosis  <br/>
  9.     <input type="radio" name="pregunta1"  value="1"/>Cambio de forma<br/>
  10.     <input type="radio" name="pregunta1"  value="2"/>Un cometa<br/>    
  11.     <input type="radio" name="pregunta1"  value="3"/>Una droga<br/>    
  12.     <input type="submit" value="Enviar" />
  13.     La cartografia del Gran descubrimiento (America) fue ...  <br/>    
  14.     <input type="radio" name="pregunta2"  value="1"/>Española<br/>    
  15.     <input type="radio" name="pregunta2"  value="2"/>Italiana<br/>
  16.     <p/>
  17.     <input type="submit" value="Enviar" />
  18. </form>

Programa:

Código PHP:
Ver original
  1. <?php
  2. // Configuracion:
  3. $valor_rta_ok = 1;
  4. $valor_rta_not_ok = 0;
  5. $valor_rta_null = 0;
  6.  
  7. // respuestas correctas
  8. $correctas = array(4,1,2);
  9.  
  10. $cant_preguntas = count($correctas);
  11. $rtas = array();
  12. $coincidencias = array();
  13.  
  14.  
  15. for ($i=0;$i<$cant_preguntas;$i++){
  16.     $var = 'pregunta'.$i;
  17.     $rtas[] = (isset($_POST[$var]) ? $_POST[$var] : null);    
  18. }
  19.  
  20. // Calculo puntaje
  21. $cant_correctas = 0;
  22. $cant_nulas = 0;
  23.  
  24. foreach ($rtas as $pos=>$rta)
  25. {  
  26.     if ($rta ==null)
  27.         $cant_nulas++;
  28.     else
  29.         $cant_correctas += ($rta == $correctas[$pos]);    
  30. }  
  31.  
  32. $cant_incorrectas = $cant_preguntas - $cant_correctas ;
  33.  
  34. if ($cant_nulas != $cant_preguntas)
  35. {
  36.     $puntaje = ($valor_rta_ok*$cant_correctas) + ($valor_rta_not_ok*$cant_incorrectas) + ($valor_rta_null*$cant_nulas);
  37.     echo "<p/><b>Puntaje: $puntaje";
  38. }


Cita:
Sigo trabajando en esto, pero el plan es incluir en el name del radio la id de cada pregunta, porque las voy a mostrar modificando el orden cada que se resuelva el test... no me sirve consecutivo, aunque podría ser, pero me complicaría más.
Una forma de alterar el orden y que sea dificil / imposible pillar si esa respuesta estubo en otro examen seria generar VALUEs y NAMEs ambos numericos grandes ó alfanumericos complicados como los unique_id() de PHP, luego al momento de leer $_POST o $_GET se buscan esos NAMEs alfanumericos ('AF34534jh34g37447535542') en vez de los tipicos "pregunta23" y... para validar las respuestas en vez de comparar con VALUE="3" lo haces contra VALUE="jj5jj54j554j45j45UUkio" ... lo cual complica un poco la lectura....

Adicional, yo guardaria esos identificadores para respuestas (name y value) en una tabla de "test_generados" y asi los puedo cambiar por cada test realizado !

Podrias guardar el "numero de alumno", "documento" o "IP" en esa tablita de generados (o el ID de la tabla usuarios si son usuarios registrados) ... asi evitas tambien que generen otro test y vuelvan a probar suerte ;)
__________________
Salu2!

Última edición por Italico76; 15/07/2013 a las 08:11