Al final he tenido que controlar el array de chekbox a través de PHP, ya que en AJAX solo había conseguido obtener el primer elemento de array.
Expongo el código que he usado:
Código PHP:
<?php
session_name('opciones'); //defino la session como “opciones”
session_start(); //inicio la session que me servirá para guardar
//el array $opciones
$numSesiones = $_POST['numSesiones']; //obtengo las sesiones deseadas
$oper = $_POST['oper']; //obtengo el caso para el switch
if (isset($_POST['oper'])) $oper = $_POST['oper'];
switch($oper)
{
case "alta": //en el caso de alta dibujo el formulario
for ($i=0; $i<=$numSesiones-1;$i++){
$opciones[$i]=$i; //pongo el valor de la posición en cada checkbox
echo"<table><tr>
<td><input type=\"checkbox\" name=\"opcion[]\" value=\"".$opciones[$i]."\" /></td>
</tr></table>";
}
$_SESSION['opciones']=$opciones; //asigno la variable SESSION con el array
//$opciones obtenido
break;
case "guardar": //caso guardar donde recupero tanto los checkboxs que están
//marcados como los que no lo están
$i=0; //inicializo a 0
//compruebo que la sesion exista y que no estén vacíos los arrays de sesion y opcion
if (isset($_SESSION['opciones']) && (!empty($_SESSION['opciones'])) && (!empty($opcion))){
foreach ($_SESSION['opciones'] as $opcion){
if (in_array($opcion,$_POST['opcion']))
$_POST['opcion2'][$i]="SI";
else
$_POST['opcion2'][$i]="NO";
$i++;
}
}else{ //significa que no hay marcado ningún checkbox con lo que relleno el
//array de todos los checkbox conforme no están marcados.
for ($j=0; $j<=$numSesiones-1;$j++)
$_POST['opcion2'][$j]="NO";
}
break;
} //fin del switch
session_destroy(); //finalizo la sesion
//para ver los datos del formulario enviados a través de POST
echo"Datos enviados: <pre>";
print_r($_POST);
echo"</pre>";
?>
PD: He tenido que asignar los valores a otro array: $_POST['opcion2'] debido a que con $_POST['opcion'] no lo hacía bien.
PD2: En el caso de no haber ningún checkbox marcado he realizado un for para llenar el contenido del array a “no”.
PD3: Para mostrar el formulario el <table> lo he puesto dentro del for, ya que sino no me dejaba la linea de separacion.
Saludos.