Como veo que has trabajado bastante en el código, te pongo una forma alternativa de hacer lo que quieres.
Código PHP:
Ver original<?php
array('pregunta' =>'Donde se ejecuta el codigo PHP?', 'respuestas' => Array('Servidor','Cliente'), 'correcta' => 0
),
array('pregunta' =>'Cual de estat son marcas para la insercion del codigo PHP en html?', 'respuestas' => array('< ? y ? >','< php >< /php >','<# y #>'), 'correcta' => 0
),
array('pregunta' =>'En que atributo del formulario especificamos la pagina a la que se envian los datos?', 'respuestas' => array('name','file','action','description'), 'correcta' => 2
),
array('pregunta' =>'Cual de estas instrucciones esta bien escrita en PHP?', 'respuestas' => array('if (a=0) print a','if (a==0) echo "hola mundo";','if (a==0) { echo ok }','if (a==0): print a;'), 'correcta' => 1
)
);
$totalPreguntas=count($preguntas); if (!isset($_SESSION["respuestas"])) {
$_SESSION["respuestas"]=array(); for($i=0;$i<$totalPreguntas;$i++)
{
$_SESSION["respuestas"][]=0;
}
}
$pregunta=(isset($_POST["pregunta"]))?
(int
)$_POST["pregunta"]:0; $respuesta=(isset($_POST["respuesta"]))?
(int
)$_POST["respuesta"]:0;
if (isset($_POST["solucion"])) { //Entra cuando se pulsa el boton de ver resultado
$_SESSION["respuestas"][$pregunta]=$respuesta;
$totalPreguntas=count($preguntas); $correctas=0;
for ($i=0;$i<$totalPreguntas;$i++)
{
if ($preguntas[$i]["correcta"]==$_SESSION["respuestas"][$i]) $correctas++;
}
?>
<html>
<head>
<title>Respuestas</title>
</head>
<body>
<h2>Respuestas correctas</h2>
<p>(<?php echo $correctas; ?> de <?php echo $totalPreguntas; ?>)</p>
<a href="index.php">Volver a las preguntas</a>
</body>
</html>
<?php
}
else
{ //Entra cuando se quiere responder a alguna de las preguntas
$adelante=isset($_POST["adelante"]); $atras=isset($_POST["atras"]);
if ($adelante){
$_SESSION["respuestas"][$pregunta]=$respuesta;
$pregunta=min(count($preguntas)-1,$pregunta+1); }
else if($atras){
$_SESSION["respuestas"][$pregunta]=$respuesta;
$pregunta=max(0,$pregunta-1); }
?>
<html>
<head>
<title>Pregunta N-<?php echo ($pregunta+1); ?></title>
</head>
<body>
<form action="index.php" method="POST">
<h2>Pregunta N-<?php echo ($pregunta+1); ?></h2>
<p>
<?php echo htmlentities($preguntas[$pregunta]["pregunta"]); ?></p>
<?php for($i=0;$i<count($preguntas[$pregunta]["respuestas"]);$i++) { $tachado=($_SESSION["respuestas"][$pregunta]==$i)?'checked="checked"':'';
?>
<input name="respuesta" value="<?php echo $i; ?>" type="radio" <?php echo $tachado; ?>/>
<?php echo htmlentities($preguntas[$pregunta]["respuestas"][$i]); ?><br/>
<?php } ?>
<input type="hidden" name="pregunta" value="<?php echo $pregunta; ?>" />
<input type="submit" name="adelante" value="Adelante" />
<input type="submit" name="atras" value="Atras" />
<?php if($pregunta==$totalPreguntas-1) { ?>
<input type="submit" name="solucion" value="Ver solucion" />
<?php } ?>
</form>
</body>
</html>
<?php } ?>
Copia y pega todo el código en un archivo index.php y pruébalo.
La sesión sólo contendrá un array de respuestas dadas. Lo primero que hago es comprobar si existe ese array de respuestas en la sesión. Si no existe, lo creo y lo lleno de ceros (uno por cada pregunta).
No es muy usado, pero es posible poner varios input:submit con diferentes names en los formularios, y cuando se envíe el formulario, sólo se enviará el name del onput:submit que se presionó. Eso me servirá para enviar el formulario a la vez que sabré si se ha pulsado "adelante" o "atrás", abrá un input:submit para cada uno. Y otro más para ver la solución de la página, pero sólo cuando la pregunta msotrada sea la última.
En un input:hidden del formulario pondré el índice (posición en el array) de la pregunta que estoy mostrando, para así poder almacenar la respuesta cuando el servidor reciba el formulario. Ese campo, mas el input:submit presionado, me servirá para saber qué pregunta mostrar.
Y esto es todo, entiendiendo lo escrito, el código es fácil de seguir.