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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème cases à cocher, récupération dans mail envoyé

par Junfan » 11 oct. 2007, 00:05

Alors.. après quelques souci perso et autres joyeusetés, je me suis remis dans ce petit script qui me pose tant de problèmes...
J'ai retenue la dernière solution de Mere-theresa, avec un "vrai" tableau...

Mon code est donc maintenant celui là :
déclaration en début de script :

Code : Tout sélectionner

$choix = $_POST['CHOIX'];
Puis ensuite mes cases à cocher du formulaire :

Code : Tout sélectionner

<?php //$choix = ''; for ($i = 1; $i <= 8; $i++) { $vn = $choix[$i]; if (isSet($vn)) {// si l'index existe $choix = ' - ' . $vn . "\n"; // avec '.=' on ajoute la variable à la suite dans $choix } } //mais cette boucle ne sert apparement à rien... echo "<tr>"; echo "<td class='td_form' width='170'>Type de bien :</td>"; echo "<td class='td_form' width='253'>"; echo "<P>"; echo "<input type='checkbox' name='choix[]' value='Appartement'>&nbsp;Appartement"; echo "<input type='checkbox' name='choix[]' value='Maison'>&nbsp;Maison"; echo "<input type='checkbox' name='choix[]' value='Terrain'>&nbsp;Terrain"; echo "<input type='checkbox' name='choix[]' value='Immeuble'>&nbsp;Immeuble<br />"; echo "<input type='checkbox' name='choix[]' value='Garage'>&nbsp;Garage"; echo "<input type='checkbox' name='choix[]' value='Investissement'>&nbsp;Investissement"; echo "<input type='checkbox' name='choix[]' value='Co-propri&eacute;t&eacute;'>&nbsp;Co-propri&eacute;t&eacute;"; echo "<input type='checkbox' name='choix[]' value='Autre'>&nbsp;Autre"; echo "<input type='hidden' name='CHOIX' value='$choix'><br />"; echo $choix; ?>
Le var_dump me retourne :
array(8) {
["CIVILITE"]=>
string(8) "Monsieur"
["NOM"]=>
string(4) "test"
["EMAIL"]=>
string(13) "[email protected]"
["TEL"]=>
string(10) "0123456789"
["choix"]=>
array(3) {
[0]=>
string(6) "Garage"
[1]=>
string(14) "Investissement"
[2]=>
string(14) "Co-propriété"
}
["CHOIX"]=>
string(0) ""
["MSG"]=>
string(103) "test testtest testtest etsttgetsvcs testvetstetstst et
testteststste
test etstetstetsttest etsts etst"
["VALIDER"]=>
string(7) "Valider"
}
Mais dans le mail que je reçois, je n'ai aucune info concernant les cases cochées.... !
Rien n'est enregistré dans le champ HIDDEN... :(

J'ai également essayé de cette façon apr désespoire :

Code : Tout sélectionner

echo "<tr>"; echo "<td class='td_form' width='170'>Type de bien :</td>"; echo "<td class='td_form' width='253'>"; echo "<P>"; echo "<input type='checkbox' name='choix[]' value='Appartement'>&nbsp;Appartement"; echo "<input type='checkbox' name='choix[]' value='Maison'>&nbsp;Maison"; echo "<input type='checkbox' name='choix[]' value='Terrain'>&nbsp;Terrain"; echo "<input type='checkbox' name='choix[]' value='Immeuble'>&nbsp;Immeuble<br />"; echo "<input type='checkbox' name='choix[]' value='Garage'>&nbsp;Garage"; echo "<input type='checkbox' name='choix[]' value='Investissement'>&nbsp;Investissement"; echo "<input type='checkbox' name='choix[]' value='Co-propri&eacute;t&eacute;'>&nbsp;Co-propri&eacute;t&eacute;"; echo "<input type='checkbox' name='choix[]' value='Autre'>&nbsp;Autre"; echo "<input type='hidden' name='$choix' value='choix[]'><br />"; echo $choix; ?>
Rien ne passe dans le champ HIDDEN et donc par le mail...

Au secours ! :shock:

par Junfan » 22 août 2007, 21:28

Oui, j'ai remarqué ca entre temps, j'ai donc ôté la fonction serialize, et il n'y a plus de résultat bizzard.
Par contre je dois toujours valider 2 fois de suite pour remplir $_POST['CHOIX'].. je ne comprend pas.. on y est presque...
Malheureusement, je n'ai pas eu le temps de rechercher aujourd'hui car j'ai eu un accident de voiture ce matin en allant bosser et j'étais un peu chamboulé... je retest ca demain...

par mere-teresa » 22 août 2007, 09:43

Là tu as comme retour un tableau sérialisé (avec la fonction serialize()), d'où le résultat bizarre.
Soit tu n'utilises pas le tableau pour $_POST['choix'] (et chaque choix continue à avoir son propre nom) et tu ôtes serialize(), soit tu utilises ce tableau, et tu devras désérialiser plus tard, quand tu auras besoin de récupérer tous les choix.

par Junfan » 21 août 2007, 22:15

Premièrement, merci de votre temps passé sur mon problème.

Je suis d'accord avec tout ce que vous dites, mais...

La raison pour laquelle je n'ai pas utilisé de tableau dans le champ hidden "$CHOIX[]" est que j'avais d'abords essayé de cette façon, mais ca ne fonctionnait pas jusqu'à ce que je fasse comme maintenant... (vous me direz, ca ne marche pas beaucoup mieux ^^).

Donc.. je vais d'abord essayé de déplacer ma boucle qui est pour le moment vers les ligne 210. Si ca ne fonctionne pas, je suivrai le conseil de mere-teresa et si ca ne marche pas toujours pas, je me tire une balle :p ...

Je vous tiens au courant dès demain. ;)

Edit : j'ai du nouveau ^^

Si je place la boucle avant la partie du formulaire concernant les checkbox, le var_dump me renvoi quelque chose.. d'étrange, mais quelque chose...

Code : Tout sélectionner

<?php $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 } } ?> <tr> <td class="td_form" width="170">Type de bien :</td> <td class="td_form" width="253"> <P> <input type="checkbox" name="case1" value="Appartement">&nbsp;Appartement <input type="checkbox" name="case2" value="Maison">&nbsp;Maison <input type="checkbox" name="case3" value="Terrain">&nbsp;Terrain <input type="checkbox" name="case4" value="Immeuble">&nbsp;Immeuble<br /> <input type="checkbox" name="case5" value="Garage">&nbsp;Garage <input type="checkbox" name="case6" value="Investissement">&nbsp;Investissement <input type="checkbox" name="case7" value="Co-propri&eacute;t&eacute;">&nbsp;Co-propri&eacute;t&eacute; <input type="checkbox" name="case8" value="Autre">&nbsp;Autre <input type="hidden" name="CHOIX" value="<?php echo $choix; ?>"><br />

Code : Tout sélectionner

array(9) { ["CIVILITE"]=> string(8) "Monsieur" ["NOM"]=> string(25) "--- champ obligatoire ---" ["EMAIL"]=> string(22) "--- email invalide ---" ["TEL"]=> string(25) "--- champ obligatoire ---" ["case5"]=> string(6) "Garage" ["case6"]=> string(14) "Investissement" ["CHOIX"]=> string(4) "s:0:" ["MSG"]=> string(0) "" ["VALIDER"]=> string(7) "Valider" }
Edit 2 :
Si je clique 2 fois sur valider, alors le var_dump m'affiche bien le contenu de $_POST['CHOIX'] ... on avance...

Edit 3 :
En fait ce qu'il se passe :
Je fais exprès de ne pas remplir les champs obligatoire du formulaire pour qu'il ne soit pas envoyé, afin de tester...
Je clic une première fois, la variable $choix se rempli du contenu des cases cochées. (echo $choix; fonctionne).
Je clic une seconde fois, c'est $_POST['CHOIX'] qui se rempli avec le contenu de $choix. (le var_dump fonctionne).
Mais pourquoi ?

par Ryle » 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 ;)

par mere-teresa » 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.

par Junfan » 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...

par mere-teresa » 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

par Invité » 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...

par Junfan » 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 ^^

par Ryle » 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.....

par Junfan » 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é ^

par Invité » 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....

par Ryle » 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 :)

par Junfan » 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