Page 1 sur 1

Problème de groupe de checkbox

Posté : 29 déc. 2009, 10:25
par fabrice88250
bonjour,
dans un de mes formulaire j'essai de faire un groupement d checkbox afin que les internaute puissent cocher plusieurs cases afin que j'en reçoive les informations choisi.
dans mon cas j'ai donc plusieurs checkbox dont chaque checkbox represente un choix de chambre.
lorsque l'internaute selectionne plusieurs checkbox (plusieurs choix de chambre) la valeur qui m'est retrounée est la derniere case coché par l'internaute. je n'ai donc pas tout les choix.

voici comment je fait mes cases :
      Choix de la ou des chambres :<br/>
      
     <input name="Gchambre[]" type="checkbox" value="chambre21" />21
      <input name="Gchambre[]" type="checkbox" value="chambre22" />22
      <input name="Gchambre[]" type="checkbox" value="chambre23" />23
      <input name="Gchambre[]" type="checkbox" value="chambre24" />24
      <input name="Gchambre[]" type="checkbox" value="chambre25" />25
      <input name="Gchambre[]" type="checkbox" value="chambre26" />26
      <input name="Gchambre[]" type="checkbox" value="chambre27" />27



et comment j'essai de recupérer les choix :
for ($i=0;$i<count($_POST['Gchambre']);$i++)
{
$chambre = $_POST['Gchambre'][$i];
}
comme je vous le disais le HIC et que si par exemple l'internaute cache chambre 23 -23 -24 je ne recupere que la 24 et je ne sais donc pas qu'il a cacher le 22 et 23.

Re: Problème de groupe de checkbox

Posté : 29 déc. 2009, 10:37
par Ryle
Lorsque tu ajoutes des crochets aux noms de tes champs, php récupères les valeurs des cases qui ont été cochées et en fait un tableau. Ainsi $_POST['Gchambre'] est en fait un tableau qui va contenir "chambre22", "champbre23" et "chambre24" si ton visiteur coche les cases 22, 23 et 24.

Pour le parcourir tu peux utiliser un foreach() :
if (isSet($_POST['Gchambre'])) { // on s'assure qu'au moins une des cases à été cochée
  foreach ($_POST['Gchambre'] as $numChambre) {
    // traitement
    echo 'La chambre "'.$numChambre.'" a été sélectionnée';
  }
}

Re: Problème de groupe de checkbox

Posté : 29 déc. 2009, 11:12
par fabrice88250
OK SUPER sa fonctionne j'arrive bien à afficher les chambres sélectionnées.
cependant je me retrouve confronté à un nouveau problème.

pour l'affichage des chambres pas de soucis c'est nickel, par contre si j'essaie d'envoyé par mail (d'introduire le résultat dans un message) sa ne fonctionne pas.
$msg .= "Chambre choisie:\t$numChambre\n<br/>";  
J'ai essayé :
$msg .= "if (isSet($_POST['Gchambre'])) 
{ // on s'assure qu'au moins une des cases à été cochée
  foreach ($_POST['Gchambre'] as $numChambre) 
  {
    // traitement
    echo 'La chambre "'.$numChambre.'" a été sélectionnée';
  }
}<br/>";  
mais sa me plante l'envoi.

Re: Problème de groupe de checkbox

Posté : 29 déc. 2009, 11:21
par Ryle
Si tu mets tout le code php dans une chaine, ce n'est plus du code php mais une chaine, le résultat ne pourra donc pas correspondre à ce que tu souhaite :)

Le traitement ci-dessus te permet d'identifier chacune des chambre sélectionnées par l'utilisateur. Il te faut donc le compléter et l'adapter pour correspondre à ce que tu souhaite faire :
if (isSet($_POST['Gchambre'])) { // on s'assure qu'au moins une des cases à été cochée
  $msg.= "Chambre(s) choisie(s) :<br />\n";
  foreach ($_POST['Gchambre'] as $numChambre) {
    // traitement
    $msg.= 'Chambre '.$numChambre . "<br />\n";
  }
}
Tu peux aussi simplifier (en fonction de ton besoin) pour mettre chacun des numéros à la suite :
if (isSet($_POST['Gchambre'])) { // on s'assure qu'au moins une des cases à été cochée
  // on utilise implode pour transformer le tableau en chaine, en séparant les éléments avec une virgule
  $msg.= "Chambre(s) choisie(s) :\t". implode(',' , $_POST['Gchambre']) . "<br />\n";
}

Re: Problème de groupe de checkbox

Posté : 29 déc. 2009, 11:27
par fabrice88250
Ok effectivement sa fonctionne.
Merci pour cette leçon qui me sera certainement très utile pour la suite.