Problème cases à cocher, récupération dans mail envoyé

Eléphanteau du PHP | 14 Messages

19 août 2007, 17:29

Bonjour à tous.

Il y a quelques temps, j'ai posté une question restée sans réponse sur un problème de récupération de variables de cases à cocher ici : http://www.phpfrance.com/forums/viewtop ... highlight=

Je repose donc le problème une fois encore ^^

Après lecture du précédent message vous pouvez voir que le "var_dump" retourne bien ce qui est censé être renvoyé. Mais alors pourquoi le contenu des variables $case1, $case2 etc.. ne se retrouvent pas dans mon mail comme le reste du contenu du formulaire ? Car le reste des champs du forumlaire, sont bien présentes dans le mail envoyé...

Je n'y comprend rien...

Merci beaucoup de votrre aide !


Edit : Petite précision importante :

En fait le "var_dump" ne fonctionne pas sib bien que cela...

Code : Tout sélectionner

array(9) { ["CIVILITE"]=> string(8) "Monsieur" ["NOM"]=> string(6) "bidule" ["EMAIL"]=> string(15) "[email protected]" ["TEL"]=> string(10) "0123456789" ["case1"]=> string(11) "Appartement" ["case5"]=> string(6) "Garage" ["CHOIX"]=> string(0) "" ["MSG"]=> string(23) "blablablab blablablabla" ["VALIDER"]=> string(7) "Valider" }
$choix qui correspond à l'ensemble des cases à cocher ne retourne rien... mais pourquoi ?
Car dans le code je fais bien :

Code : Tout sélectionner

$cases = 8; for ($i = 1; $i <= $cases; $i++) { $vn="case".$i; $choix=$_POST[$vn]; }
Mais si je fais un simple "echo $choix" ca me retourne bien le contenu des cases à cocher..

Le problème ne viendrait il pas du champ hidden où se trouve $choix ?

ViPHP
ViPHP | 5924 Messages

19 août 2007, 21:07

Je ne saisis pas bien l'organisation de ton(es) script(s). Est ce que tu pourrais donner le code complet et décrire exactement le comportement que le script devrait avoir ?

Eléphanteau du PHP | 14 Messages

21 août 2007, 09:32

alors le script est juste un formulaire de demande d'information qui envoi un email...
L'email est bien envoyé avec les infos du formulaire sauf les cases à cocher...

La variable qui nous intéresse ici est "$choix".
Voici le script complet (le code concernant les checkbox se trouve en bas) :

http://pastebin.com/m2673468

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

21 août 2007, 10:52

Rappel :
- La valeur d'une case à cocher n'est envoyée que si celle-ci est cochée.
- Lorsque plusieurs cases portent le même nom, seule la dernière case cochée est récupérée
- Lorsque le nom de la case comporte des crochets (case[]) le résultat est un tableau contenant les valeurs des cases cochées.


Ta boucle :
$cases = 8; 
for ($i = 1; $i <= $cases; $i++) { // pour chacune des cases
  $vn="case".$i;   
  $choix=$_POST[$vn]; 
}
écrase à chaque itération la variable $choix, du fait, tu n'auras que la dernière valeur. Dans la mesure où tu ne testes pas si les index existent pour savoir si la case est cochée ou non, la dernière valeur sera toujours celle de case8 qui sera vide si elle n'est pas cochée.

$choix = '';
for ($i = 1; $i <= 8; $i++) { 
  $vn = 'case' . $i;   
  if (isSet($_POST[$vn])) { // si l'index existe
    $choix .= ' - ' . $_POST[$vn] . "\n"; // avec '.=' on ajoute la variable à la suite dans $choix
  }
}
echo $choix; // affiche le texte contenu dans $choix, correspondant aux cases cochées.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 14 Messages

21 août 2007, 11:46

Pour les rappel je suis d'accord...
Pour la boucle aussi, mais alors pourquoi un echo $choix m'affiche bien TOUTES les cases coché mais pas le var_dump (j'avoue ne pas bien comprendre la différence) ?!

En tout cas merci beaucoup, je test ca dès que je peux... (je suis au travail et ceci n'est pas mon boulot

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

21 août 2007, 11:49

Sans doute parce que tu avais placé ton echo dans la boucle... ainsi à chaque index trouvé il t'affichait la valeur associé, sans pour autant conserver les précédentes dans ta variable :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

21 août 2007, 13:30

Alors.. je viens de tester avec ta boucle, mais $choix est toujouts vide dans le mail et avec le var_dump... alors que le echo retourne bien le contenu de $choix alors que le echo est cette fois bien en dehors de la boucle...

Je n'y comprend rien....

Eléphanteau du PHP | 14 Messages

21 août 2007, 13:33

Alors.. je viens de tester avec ta boucle, mais $choix est toujours vide dans le mail et avec le var_dump... alors que le echo retourne bien le contenu de $choix alors que le echo est cette fois bien en dehors de la boucle...

Je n'y comprend rien....
Ooups j'ai oublié de me connecter... désolé ^

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

21 août 2007, 13:41

Faudrait voir le code modifié, mais je viens de voir que tu utilises également la variable $choix pour y stocker $_POST['choix'] ... est-ce fait avant ou après la boucle for ? si c'est après, alors tu écrases le contenu de la variable avant d'envoyer le mail.....
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 14 Messages

21 août 2007, 13:49

Voici le code modifier :http://pastebin.com/m5ef2f682

Edit :
Je déclare la variable $choix = $_POST['CHOIX'] en tout début de script après le "if(isset($_POST['VALIDER'])){" comme toutes les autres variables des autres champs du formulaire qui fonctionnent bien...

Edit2: en rapport au message du dessous : j'utilisais le navigateur safari, mais avec IE7 le forum fonctionne bien ^^
Modifié en dernier par Junfan le 21 août 2007, 13:58, modifié 2 fois.

Invité
Invité n'ayant pas de compte PHPfrance

21 août 2007, 13:52

désolé.. j'ai un problème d'édition de message sur le forum, je suis apperemment limité (très limité) en nombre de caractères...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

21 août 2007, 14:31

Voici le code modifier :http://pastebin.com/m5ef2f682

Edit :
Je déclare la variable $choix = $_POST['CHOIX'] en tout début de script après le "if(isset($_POST['VALIDER'])){" comme toutes les autres variables des autres champs du formulaire qui fonctionnent bien...

Edit2: en rapport au message du dessous : j'utilisais le navigateur safari, mais avec IE7 le forum fonctionne bien ^^
C'est quoi les lignes à regarder plus particulièrement dans ton code ?
Peux-tu cp-cv ce que donne ton var_dump() dans ce forum ?

NB : IE7 ou Safari ne devraient pas modifier le PHP
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 14 Messages

21 août 2007, 14:53

alors.. après validation du formulaire, le var_dump affiche :

Code : Tout sélectionner

array(9) { ["CIVILITE"]=> string(8) "Monsieur" ["NOM"]=> string(4) "truc" ["EMAIL"]=> string(13) "[email protected]" ["TEL"]=> string(10) "0987654321" ["case2"]=> string(6) "Maison" ["case3"]=> string(7) "Terrain" ["CHOIX"]=> string(0) "" ["MSG"]=> string(13) "testtest test" ["VALIDER"]=> string(7) "Valider" }
Les lignes à regarder plus particulièrement sont je pense entre la ligne 196 et la 220. Le reste est un script de formulaire avec envoi de mail classique. Petite précision tout fonctionne bien sauf la récupération du contenu des checkbox dans la variable $choix.

Ps: Tu peux voir le code complet sur pastebin.com ici : http://pastebin.com/m5ef2f682

Ps²: j'utilisais une version beta de safari windows...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

21 août 2007, 17:04

Et si tes checkbox (plusieurs choix possibles, tu es d'accord ?) tu les renommais CHOIX[]


Ensuite, tu auras la value choisie pour chaque checkbox dans un tableau qui sera $_POST['choix']
<input type="checkbox" name="case1" value="Appartement">&nbsp;Appartement
	  <input type="checkbox" name="choix[]" value="Maison">&nbsp;Maison
	  <input type="checkbox" name="choix[]" value="Terrain">&nbsp;Terrain
	  <input type="checkbox" name="choix[]" value="Immeuble">&nbsp;Immeuble<br />
	  <input type="checkbox" name="choix[]" value="Garage">&nbsp;Garage
	  <input type="checkbox" name="choix[]" value="Investissement">&nbsp;Investissement
	  <input type="checkbox" name="choix[]" value="Co-propri&eacute;t&eacute;">&nbsp;Co-propri&eacute;t&eacute;
	  <input type="checkbox" name="choix[]" value="Autre">&nbsp;Autre
	<input type="hidden" name="CHOIX" value="<?php echo $choix; ?>"><br />
Et dans ton traitement au début, tu ferais :
    $choix = serialize($_POST['choix']);
Car là, tu ne remplis pas du tout $choix avec $_POST['CHOIX'] puisqu'il faut que le champ caché soit rempli pour remplir cette valeur que tu remets.

Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

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

21 août 2007, 17:12

Je pense également que la solution de Mere Teresa est quand même la plus propre..

Mais sinon pour corriger le fait que ton mail ne contienne pas la bonne valeur pour $choix, c'est peut être parce que la boucle qui rempli $choix avec les valeurs cochées à lieu vers les lignes 210 alors que le corps du mail est quant à lui créé ligne 40 et envoyé ligne 49, donc bien avant l'initialisation de la variable $choix ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...