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- CREATE 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 original- foreach($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 original- function 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 original- foreach($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.