Foros del Web » Programando para Internet » PHP »

examen tipo test

Estas en el tema de examen tipo test en el foro de PHP en Foros del Web. Hola estoy usando el codigo de un tema que cerrado: http://www.forosdelweb.com/f18/gener...on-php-341148/ Me gustaria saber si sabriais decirme como podria recoger el numero total de aciertos, ...
  #1 (permalink)  
Antiguo 10/08/2011, 20:57
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 8 meses
Puntos: 8
Pregunta examen tipo test

Hola estoy usando el codigo de un tema que cerrado: http://www.forosdelweb.com/f18/gener...on-php-341148/

Me gustaria saber si sabriais decirme como podria recoger el numero total de aciertos, el numero de fallos y el numero de preguntas no respondidas. El codigo es este: ("Aunque podeis verlo en el tema que he indicado al completo")

Código PHP:
<? 
session_start
();
// conexion db
?>
<style>
* {font-size:12px}
.acierto{border:2px solid #336699;background:#eeeeff;text-align:center}
.fallo{border:2px solid #996633;background:#ffeeee;text-align:center}
.acierto1{background:#eeeeff;text-align:center}
.fallo1{background:#ffeeee;text-align:center}
.pregunta{background:#eeffee;text-align:center}
</style>
<table border="1" align="center" width="100%">
<tr>
<th>Pregunta</th>
<th>Correcta</th>
<th>Incorrecta1</th>
<th>Incorrecta2</th>
<th>Incorrecta3</th>
</tr><?
if (is_array($_SESSION['id_pregunta']))
foreach (
$_SESSION['id_pregunta'] as $key=>$value)
{
        
$sql="SELECT * FROM preguntas WHERE id=".$value;
        if (
$sql=mysql_query($sql))
        {
?><tr><?
            $assoc
=mysql_fetch_assoc($sql);
            
$envio=$_SESSION['array'][$key];
            
$correcta=array_search("0",$envio);
            
$value1=$_POST['Pregunta'.$key];
            print 
"<td class=\"pregunta\"><b><tt>".$assoc['pregunta']."</b></tt></td>\n";
            print 
"<td".( ( array_search("0",$envio) == $value1 && $value1!="") ? " class=\"acierto\"" " class=\"acierto1\"" )."><tt>".$assoc['correcta']. "</tt></td>\n";
            print 
"<td".( ( array_search("1",$envio) == $value1 && $value1!="" ) ? " class=\"fallo\"" " class=\"fallo1\"" )."><tt>".$assoc['incorrecta1']. "</tt></td>\n";
            print 
"<td".( ( array_search("2",$envio) == $value1 && $value1!="" ) ? " class=\"fallo\"" " class=\"fallo1\"" )."><tt>".$assoc['incorrecta2']. "</tt></td>\n";
            print 
"<td".( ( array_search("3",$envio) == $value1 && $value1!="" ) ? " class=\"fallo\"" " class=\"fallo1\"" )."><tt>".$assoc['incorrecta3']. "</tt></td>\n";
?></tr><?

    
    
}

}

session_destroy();
?>    </table>
<br><br>
<table border="1" align="center" width="50%">
<tr>
<td class="acierto">&nbsp;&nbsp;</td><td>Respuesta enviada y acertada</td>
</tr>
<tr>
<td class="fallo">&nbsp;&nbsp;</td><td>Respuesta enviada y fallada</td>
</tr>
<td class="acierto1">&nbsp;&nbsp;</td><td>Respuesta correcta</td>
</tr>
<tr>
<td class="fallo1">&nbsp;&nbsp;</td><td>Respuesta incorrecta</td>
</tr>
</table>
  #2 (permalink)  
Antiguo 12/08/2011, 13:45
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 17 años, 2 meses
Puntos: 188
Respuesta: examen tipo test

Es que lo unico que se tiene que hacer es programar y ya.

Tienes que ser mucho mas especifico con la duda. Por ejemplo algun error durante la codificación, errores en el resultado esperado, cosas por el estilo.

Intenta codificar una solución a tu problema si no te sale te vamos ayudando.

Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #3 (permalink)  
Antiguo 12/08/2011, 14:12
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 8 meses
Puntos: 8
Respuesta: examen tipo test

iovan, si ya lo tengo todo incorporado pero lo que quiero saber es como puedo hacer que me saque al final el numero de aciertos, por ejemplo:

si son 10 preguntas:

Ha marcado 7 correctas.
Ha marcado 2 incorrectas.
Ha dejado 1 sin marcar.

espero entiendas lo que quiero decir.
  #4 (permalink)  
Antiguo 12/08/2011, 14:18
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 17 años, 2 meses
Puntos: 188
Respuesta: examen tipo test

si se entiende, bueno pensare que sabes programar y te diré un tip.

-> Supongamos que a cada pregunta le corresponde un indice diferente
-> crea 2 arreglos uno para almacenar los indices de las preguntas contestadas y otro para almacenar los indices de las no contestadas.

----> Para decir cuales preguntas no fueron contestadas.

Con un ciclo (recomiendo foreach) recorres el arreglo de las no contestadas e imprimes en pantalla "X pregunta no esta contestada" donde X sería el indice de la pregunta.

....
...
.
.
.
Y asi con sucesivamente. Dependiendo de lo que quieras validar e imprimir.
Si sigues mi consejo, resuelves el problema en menos de 30 lineas.

Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #5 (permalink)  
Antiguo 13/08/2011, 03:49
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 8 meses
Puntos: 8
Pregunta Respuesta: examen tipo test

iovan muchisimas gracias por tu respuesta pero me has dejao :P, me podrias dar algun ejemplo y asi yo intentar sacarlo palante?
  #6 (permalink)  
Antiguo 13/08/2011, 08:35
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 14 años, 3 meses
Puntos: 202
Respuesta: examen tipo test

En tú código ya usas variables de sesión. Lo más sencillo es 1 variable de session que sean arrays.

Ahí añades las respuestas que ha marcado, ya sea mediante formulario y $_POST o con ajax.

Buscas en la base de datos comparas con las respuestas correctas y listo.
No necesitas ningún ejemplo, ya usas variables de sesión, sólo te queda hacer el formulario.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #7 (permalink)  
Antiguo 13/08/2011, 11:45
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 17 años, 2 meses
Puntos: 188
Mensaje Respuesta: examen tipo test

Hola que tal.

Bueno, supongamos que tienes en la base de datos almacenadas las preguntas con un indice = al numero de pregunta, un campo para guardar la pregunta, otro para la respuesta correcta y uno más con una cadena de respuestas separadas por comas.

Siguiendo la idea que el test es de opción multiple:

Código SQL:
Ver original
  1. CREATE TABLE  `preguntas'(
  2. `id` INT AUTO_INCREMENT PRIMARY KEY,
  3. `numero` INT UNIQUE,
  4. `pregunta` VARCHAR(100),
  5. `correcta` VARCHAR(50),
  6. `opciones` VARCHAR(255)
  7. );

Ejemplo de uso

1.- ¿De que color es el caballo blanco de napoleón?

a) verde
b) azul
c) blanco
e) rojo

En la base de datos se almacenaría:
Código:
----------------------------------------------------------------------------
| ID | numero | pregunta             | correcta | opciones
----------------------------------------------------------------------------
| 0  | 1      | ¿De que color ...    | blanco   | verde,azul,rojo
________________________________________________
Y ahora la solución con PHP.

1.- Una consulta MySQL donde almacenes "Numero de pregunta, Pregunta, Correcta, opciones" en 4 arreglos uno para cada uno.

2.- Muestras estas preguntas en el orden correspondiente al arreglo "numero pregunta", recorriendolo con un foreach, (o un for si conoces la tamaño del arreglo).

Código PHP:
Ver original
  1. foreach($num_preg as $i => $value){
  2.              echo "<p>"   .$num_preg[$i]. ".- ¿"  .$pregunta[$i].  "?  </p>"
  3.              .
  4.              .
  5.              .
  6. }

3.- Y respecto a mostrar las respuestas, yo lo haría de forma aleatoria, Se vería extraño que la respuesta correcta sea el mismo inciso en todas las preguntas.

Esto lo haría llamando a una función pasandole como argumento el indice de la pregunta (en donde estan los 3 puntos verticales).

Código PHP:
Ver original
  1. function mostrarRespuestas($num_pregunta){
  2.  
  3. /* aquí es lo único de batalla que debes hacer;
  4. Por ejemplo las respuestas correctas ya las tienes dentro del arreglo en que las almacenaste anteriormente y las posibles opciones (o respuestas incorrectas tambien estan dentro de otro arreglo)
  5.  
  6. Lo primero que haría ser obtener todas las respuestas, en el caso de las incorrectas ya que son una cadena y están separadas por comas: Tomaría esta cadena y con un explode obtendría todas las opciones disponibles almacenandolas en un arreglo temporal.
  7.  
  8. Al mismo arreglo agrego la respuesta correcta
  9.  
  10. Posteriormente me valgo de la funcion rand para generar indices aleatorios y tengo cuidado de que estos indices no se repitan mientras se generan el mismo numero de indices que de respuestas.
  11.  
  12. Retorno el arreglo re-ordenado
  13.  
  14. */
  15.  
  16. }


Regresando al foreach que genera la pregunta, tendras que usar otro ciclo anidado para mostrar las respuestas y sería todo.

Para comprobar si la respuesta es correcta o incorrecta, si utilizas radíos. Puedes hacerlo de muchas formas.

La más didactica que se me ocurre es que utilices un evento javascript onClick


Código PHP:
Ver original
  1. foreach($num_preg as $i => $value){
  2.              echo "<p>"   .$num_preg[$i]. ".- ¿"  .$pregunta[$i].  "?  </p>"
  3.              .
  4.              .
  5.              //llamo a la funcion
  6.              foreach($arr_temp as $key => $respuesta){
  7.  
  8.                            echo "<input type='radio' onClick='?num=".$num_preg[$key]."&answ=".$respuesta;
  9.                                      //Esta linea no hará por el momento nada pues hay que darle control con href
  10.              }
  11.              
  12. }

entonces en tu script PHP validador recibes como argumento el numero de pregunta y la respuesta que se selecciono, solo comparas ya se con consultas MySql o con los arreglos. Obviamente si comparas en este mismo script ya todo lo tienes en los arreglos, compara con estos.

Saludos.

____________________
EDITO.

Por supuesto que tambien podrias hacer que el name del los radios sea el numero de pregunta y el value sea la respuesta elegida, entonces sería mas sencillo.

Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Última edición por iovan; 13/08/2011 a las 11:57

Etiquetas: examen, sql, test, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:17.