Checkbox et popup

Eléphanteau du PHP | 30 Messages

23 nov. 2006, 17:51

Hello tout le monde !

J'ai un petit problème de checkbox. Je m'explique :
j'ai un formulaire qui contient des cases à cocher (dans une boucle). Ce formulaire est en POST. Par contre, le bouton ne sert pas à valider le formulaire mais à ouvrir un popup.

Sur la page du popup, je récupère donc la valeur des checkbox avec $_GET. Lorsque je souhaite afficher une valeur de mon tableau provenant des cases à cocher, j'obtiens une valeur très étranges du style "rr". Je devrais normalement obtenir quelque chose comme ceci "2006-11-239".

De plus, si j'essai d'afficher les élèments du tableau avec la fonction foreach, l'erreur "Invalid argument supplied for foreach()" est retournée.

Voila mon bout de formulaire où il y a la case à cocher
<INPUT  type="checkbox" /><Label><?php echo "LIBRE"; ?></Label>
										<INPUT type="hidden" name="res_info[]" id="res_info" value="<?php echo $jour[$z].$row_periodes['per_num']; ?>" <?php $res_info[$z] = $jour[$z].$row_periodes['per_num'];  ?>/>
Puis mon bouton pour le popup
<INPUT type="button" id="aff_popup" onclick="MM_openBrWindow('validation_reservation.php?sal_num=<?php echo $sal_num; ?>&gro_num=<?php echo $gro_num; ?>&res_info=<?php echo $res_info; ?>','validation','scrollbars=yes,width=500')" value="Valider" />
Enfin ma récupération de mes valeurs ainsi que ma petite boucle foreach()
// récupération des informations de la check box
$res_info = (isset($_GET['res_info']))?$_GET['res_info']:null; 

//test pour voir s'il y a bien qqch dans le tableau
echo $res_info[1] ;
echo $res_info[2] ;
<?php
	 	if (!empty($res_info)) {
    		foreach($res_info as $cle => $valeur) {
        		echo $cle.' : '.$valeur.'<br>';
    		}
		} 
		else {
			echo "vide";
		}
		?>
Voila, si quelqu'un voit l'erreur et pourrait me venir en aide, j'en serai grandement reconnaissant !

Ah oui ! Que ce passerait-il s'il devait y avoir plusieurs checkbox ? Quel(s) changement(s) faudrait-il effectuer au niveau de l'id ?

Vala vala... Merci d'avance !

a+ :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 nov. 2006, 18:26

Alors déjà une petite remarque sur ta case à cocher : vu qu'elle n'a pas de nom et pas de valeur, que tu ne soumet pas le formulaire mais que tu ouvre une popup en passant des paramètres directement dans l'url, elle n'intervient en rien :)

Ton problème vient du fait que tu essayes de passer un tableau php dans une url, chose que l'on ne peut pas faire sans le serialiser (cf. la fonction serialize()). Lorsque tu fais :
&res_info=<?php echo $res_info; ?>
C'est la variable php que tu passes, c'est à dire le tableau que tu as au chargement de ta page, qui n'a donc rien à voir avec les cases cochées, ou les champs cachés...

Il y a à mon avis quelques soucis de conception par rapport à ce que je présume que tu veux faire.

Ce qu'il faudrait faire selon moi, c'est soumettre le formulaire dans une nouvelle fenêtre afin de récupérer les données sans trop se compliquer la vie. Il faudrait également ajouter un nom à tes cases à cocher (avec des crochets s'il y en a plusieurs, car cela permet de récupérer un tableau) et de coller l'id comme valeur.
Ainsi tu ne recevras les id que des cases qui ont été cochées :)

(bon chuis peut être à côté de la plaque par rapport à ce que tu veux faire, m'enfin maintenant que c'est tapé hein ?! ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 30 Messages

23 nov. 2006, 18:48

Merci ! Effectivement, cela serait mieux de mettre les infos dans la checkbox plutôt que dans un champ hidden ! ^^

Ce que j'ai du mal à saisir, c'est à quel momement la fonction serialize() intervient. Je ne comprends vraiment où je dois la placer.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 nov. 2006, 01:36

Le serialise, c'était par rapport à ton code précédent :)

Comme tu passais la variable $res_info en paramète d'une url, et que celle-ci correspond à priori à un tableau (echo $res_info[$z]) tu vas récupérer la chaine "Array()" au lieu des valeurs du tableau :)

Si jamais tu voulais faire passer un tableau dans une url, il te faudrait le transformer en chaine en le sérialisant avec serialize(), ce qui te permet de le reconstruire de l'aute côté avec la fonction unserialize()

Mais si tes valeurs sont dans tes cases et que ce sont elles que tu envois, tu peux l'oublier ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 152 Messages

24 nov. 2006, 11:44

Ce type de config devrait marcher. Suit l'exemple


PAGE HTML

Code : Tout sélectionner

<form action="test.php" method="get"> <input type="checkbox" name="question[]"> <input type="checkbox" name="question[]"> <input type="checkbox" name="question[]"> <input type="checkbox" name="question[]"> <input type="submit" value="envoyer">
PAGE PHP

Code : Tout sélectionner

<? if (isset($_POST['question'])) { $question=$_POST['question']; echo "mes réponses ont bien été posté"; foreach($question as $key $val) { echo "$val"; } } else { echo "mes réponses n'ont pas été posté"; } ?>
voilou @+

Eléphanteau du PHP | 30 Messages

24 nov. 2006, 23:27

Okay ! Merci beaucoup ! Vraiment très sympa :wink:
Je vais voir tout ça ce week-end. Aujourd'hui j'ai pas eu le temps de toucher à php.

Merci en tous cas !