Checkboxes ne donne pas tous leurs résultats

Résolu/Fermé
Judes-Emile Bornes IV - 23 janv. 2009 à 12:25
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 - 26 janv. 2009 à 23:12
Bonjour,

J'ai encore un petit problème, cette fois avec mes checkboxes.
J'ai écrit le code suivant, et il fonctionne presque bien si n'était le fait qu'il ne récupère pas toutes les infos des boutons checkboxes de la page qu'il gère.
En effet si l'on coche deux cases, il ne donne que la dernière réponse. je vais chercher sur le ouèbe, mais si qqn pout m'aider, qu'il le fasse please!

<?php
$destinataire = 'fabien@laplumesurlatoile.com';
$sujet='questionnaire';
$FORM1=$_POST['sexe'];
$FORM2=$_POST['age'];
$FORM3=$_POST['profession'];
$FORM4=$_POST['commandesautres'];
$FORM5=$_POST['raisons'];
$FORM6=$_POST['raisonsautres'];
$FORM7=$_POST['delai'];
$FORM8=$_POST['symbole'];
$FORM9=$_POST['symboleautre'];
$FORM10=$_POST['conditionnement'];
$FORM11=$_POST['frequenceachat'];
$FORM12=$_POST['preferences'];
$FORM13=$_POST['habitude'];
$FORM14=$_POST['montant'];
$FORM15=$_POST['souhaitssite'];
$FORM16=$_POST['autressouhaitssite'];
$FORM17=$_POST['infos'];
$tableau = array ($FORM1, $FORM2, $FORM3, $FORM4, $FORM5, $FORM6, $FORM7, $FORM8, $FORM9, $FORM10, $FORM11, $FORM12, $FORM13, $FORM14, $FORM15, $FORM16, $FORM17);
$afficher_check = "";

mail($destinataire, $sujet, implode(" - ",$tableau));

?>

4 réponses

Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
25 janv. 2009 à 01:32
Bonjour, je n'arrive pas à imaginer le formulaire derrière cette gestion ni même à comprendre quel résultat incorrect te fournit $tableau par rapport au résultat attendu. Merci de développer pour augmenter tes chances d'obtenir de l'aide. Bien à toi.

Sinon, tant que j'y suis, je trouve quand même risqué d'utiliser la chaîne " - " comme séparateur de champs. Qui te dit que dans l'un des champs, l'utilisateur n'encodera pas un tiret ? Soit tu développes un système pour échapper les tirets, soit tu génères ton résultat au format XML (si tu connais) grâce aux méthodes DOM intégrées dans PHP (la méthode XML est bien évidemment beaucoup plus compliquée à mettre en œuvre mais c'est la plus "logique").
0
Judes-Emile Bornes IV Messages postés 123 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 23 février 2010 12
25 janv. 2009 à 10:02
Les résultats que j'obtiens sont les derniers choix de chaque série de checkbox, quand le choix est multiple...
J'aimerais regrouper les infos par série de checkbox/boutons radio en espérant que ça fonctionne.

merci pour le conseil pour la fonction implode, je vais essayer de générer un fichier xml.

à bientôt
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
25 janv. 2009 à 14:35
Ok, enfin je comprends ce qui ne va pas mais je ne comprends pas pourquoi ça ne fonctionne pas dans ton cas puisque je n'ai pas ton code mais c'est pas grave, reprenons depuis le début :

Pour tes checkboxes à choix multiple d'un même groupe, il faut que chaque checkbox porte un nom de cette forme :
<input type="checkbox" name="interets[]" value="Musique" />Musique
<input type="checkbox" name="interets[]" value="Arts" />Arts
<input type="checkbox" name="interets[]" value="Jardinage" />Jardinage

Côté PHP, la variable $_POST['interets'] te fournira un tableau de taille égale aux choix de l'utilisateur. C'est à dire que s'il a choisi (coché) "Musique" et "Jardinage", tu auras un tableau de 2 éléments. Ensuite je suppose que tu sais comment parcourir un tableau. Donc vérifie bien que le nom (attribut name) de tes checkboxes se termine par "[]" et qu'ils soient tous identiques (pour chaque groupe je veux dire), c'est peut-être de là que vient ton problème puisque tu obtiens une variable simple au lieu d'un tableau.

Ca fait un bon moment que je ne fais plus de PHP mais je me suis inspiré de http://actuel.fr.selfhtml.org/articles/phpasp/boitacocher/index.htm pour avancer ce que j'écris.
0
Judes-Emile Bornes IV Messages postés 123 Date d'inscription dimanche 6 avril 2008 Statut Membre Dernière intervention 23 février 2010 12
26 janv. 2009 à 16:13
c'est bon ça marche! merci posotaz,
l'opérateur [] m'a sauvé sur ce coup.
maintenant le truc, c'est que le script autorise l'absence de réponse... est-ce possible?
Car je ne veux pas obliger les internautes à remplir tous les QCM
Je me doute que oui sinon je demanderais pas, mais bon.
dans un premier temps je pense à un truc du genre:
if(!empty($FORM1), $FORM1="pas de reponse") mais est-ce conventionnel?

à +

Fab
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
26 janv. 2009 à 23:12
Salut Fab,

Content d'avoir pu t'aider. N'oublie pas de mettre le statut "résolu". ;-)

Pour ce qui est des choix non obligatoires, c'est tout à fait correct de dire "empty($le_tableau_de_checks)" mais tu peux tout simplement garder la variable vide puisqu'un "implode séparé par des virgules" d'un tableau de 0 éléments te retournera une chaîne vide, au même titre qu'un champ "texte commentaire" vide.

Cas 2 choix : $form1 = array('bleu', 'vert') => implode(', ', $form1) => "bleu, vert"
Cas 0 choix : $form1 = array() => implode(', ', $form1) => ""
0