Ver Mensaje Individual
  #7 (permalink)  
Antiguo 13/08/2011, 11:45
iovan
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 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