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 originalCREATE TABLE `preguntas'(
`id` INT AUTO_INCREMENT PRIMARY KEY,
`numero` INT UNIQUE,
`pregunta` VARCHAR(100),
`correcta` VARCHAR(50),
`opciones` VARCHAR(255)
);
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 originalforeach($num_preg as $i => $value){
echo "<p>" .$num_preg[$i]. ".- ¿" .$pregunta[$i]. "? </p>"
.
.
.
}
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 originalfunction mostrarRespuestas($num_pregunta){
/* aquí es lo único de batalla que debes hacer;
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)
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.
Al mismo arreglo agrego la respuesta correcta
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.
Retorno el arreglo re-ordenado
*/
}
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 originalforeach($num_preg as $i => $value){
echo "<p>" .$num_preg[$i]. ".- ¿" .$pregunta[$i]. "? </p>"
.
.
//llamo a la funcion
foreach($arr_temp as $key => $respuesta){
echo "<input type='radio' onClick='?num=".$num_preg[$key]."&answ=".$respuesta;
//Esta linea no hará por el momento nada pues hay que darle control con href
}
}
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.