Comme le titre l'indique, mon problème concerne le réaffichage de cases à cocher
dans un formulaire.
Je suis dans une session à accès réservé.
J'ai une page de formulaire et une page de traitement de formulaire.
Voici le code des checkbox dans la page du formulaire:
<input type="checkbox" name="plage[]" value="matinee" <?php if(isset($_SESSION['plage'][0]) && $_SESSION['plage'][0] == 'matinee') { echo 'checked="checked"';}; ?> /> la matinée
<input type="checkbox" name="plage[]" value="apres-midi" <?php if(isset($_SESSION['plage'][1]) && $_SESSION['plage'][1] == 'apres-midi') { echo 'checked="checked"';}; ?> /> l'après-midi
<input type="checkbox" name="plage[]" value="soiree" <?php if(isset($_SESSION['plage'][2]) && $_SESSION['plage'][2] == 'soiree') { echo 'checked="checked"';}; ?> /> la soirée
Il y a trois cases, donc huit combinaisons possibles pour l'utilisateur.Le réaffichage marche parfaitement du moment qu'il n'y a jamais de case(s) cochée(s) à la suite d'une case non cochée.
Les cases qui suivent une case non cochée et qui ont été cochées ne se réaffichent plus.
Par exemple, si l'utilisateur coche la matinée et la soirée mais pas après-midi le réaffichage donne la matinée seulement.
S'il coche la matinée et l'après-midi seulement le réaffichage se fera correctement.
J'ai l'impression que le problème se situe avec le pointeur interne du tableau plage.
C'est un tableau numérique et lorsque le pointeur se réinitialise sur une nouvelle ligne sans valeur cochée,
il doit passer à la ligne suivante en attribuant le numéro de la ligne précédente car celui-ci n'a pas encore servi.
Si je fais des var_dump derrière le code suivante, de la sorte (page de traitement du formulaire):
if (isset($_POST['plage'][0])){
$matinee=$_POST[plage][0];
};
if (isset($_POST[plage][1])){
$apres_midi=$_POST[plage][1];
};
if (isset($_POST['plage'][2])){
$soiree=$_POST['plage'][2];
};
if(isset($matinee)){
$_POST[plage][0] = "matinee";
}
if(isset($apres_midi)){
$_POST[plage][1] = "apres-midi";
}
if(isset($soiree)){
$_POST[plage][2] = "soiree";
}
var_dump($matinee);
var_dump($apres_midi);
var_dump($soiree);
Le navigateur renvoit bien les bonnes valeurs, par exemplematinee et soirée si l'utilisateur a coché matinée et soirée.
Mais j'aurai le droit à Undefined variable: soiree et Undefined offset: 2
sûrement car il a vu que le numéro 1 destiné à l'après-midi
n'était pas affecté et il a utilisé ce numéro pour la soirée au lieu du 2,
ce qui fait que le 2 se retrouve sans rien.
J'ai entre autres essayé array_valeus et une boucle foreach mais en vain.
Voilà, si quelqu'un peut me venir en aide ce serait très sympa