Bonjour,
Désolé pour le titre pas très original ni forcément explicite mais je n'ai pas trouvé mieux.
J'ai un formulaire que je génère en php :
- je stock dans un champ d'une base les caractéristiques des champs à afficher sous la forme suivante : Nomduchamp-typeduchamp-soustype/choix1-choix2-choixX#NomduchampSuivant-typeduchampSuivant etc. . .
Sachant que le sous-type n'est présent que si le type du champ n'est pas radio,text,textarea. . . bref le problème n'est pas là.
Avec quelques "explode" je construis mon formulaire et tout bien comme il faut. (code à venir un peu plus bas n'vous inquietez pas)
Le problème est que . . . pour les champs n'ayant qu'une valeur possible (input text,radio,textarea, select non-multiple) tout va bien. Mais lorsqu'il s'agit d'un champ Checkbox ou Select Multiple, c'est là que tout se complique.
J'ai évidemment lu ceci : http://julp.developpez.com/php/formulaires/
J'ai évidemment compris. J'ai évidemment testé.
Et il s'avère une chose plus qu'étonnante. Lorsque le code est exécuté (formView.php) et généré avec le php (if et tout se qui s'en suit), un var_dump($_POST) m'indique que mon champ de checkbox est de type String comportant "Array". Losque que je fais un copier/coller du code HTML généré par le navigateur (fichier Test.php), ça fonctionne comme attendu : mon champ de checkbox est de type Array comportant évidemment le contenu coché dans le formulaire.
J'ai essayé de généré mon code via des echo uniquement au lieu de fermer/rouvrir php à chaque fois pour voir si ça venait d'ici > Niet. J'ai viré mes commentaires (sait-on jamais) > Niet. J'ai essayé de comprendre la différence entre test.php et formView.php : l'un contient l'entete d'encodage utf8 et l'autre aucune > j'ai donc mis l'entete sur les deux : rien ne change non plus.
Je poste très très rarement ici mais je suis à court de propositions.
Voici le code :
formView.php
Test.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 <?php //$message=""; if (isset($_POST['permispossedes'])) { var_dump($_POST); echo "Vous avez choisi :"; for ($i = 0, $c = count($_POST['permispossedes']); $i < $c; $i++) { echo "<br/><b>" . $_POST['permispossedes'][$i] . "</b>"; } } /* for($i=0;$i<sizeof($_POST)-1;$i++){ if(is_array($value)){ echo "<br/>"; $value=implode('-',$value); echo $value."<br/>"; } $message.=$key." : ".$value."\n"; } $subject = "Pré-inscription - ".$_POST['nom'].' '.$_POST['prenom']; /* $from = "From: ".$_POST['nom'].' '.$_POST['prenom']."<".MAIL.">"; if(mail('fougerascarl@gmail.com', $subject, $message,$from)){ $alert="<p class='valid'>Votre e-mail a bien été envoyé</p>"; } else { $alert= "<p class='error'>Une erreur est survenue et votre message n'a pu être envoyé. Nous vous invitons à nous contacter par téléphone afin d'effectuer votre demande et de nous notifier le dysfonctionnement.</p>"; }*/ echo $alert; ?> <h2><span><?php echo utf8_encode($content->name); ?></span></h2> <form method="POST"> <?php $contenu=explode("#",$content->content); // chaque champ est enregistré et séparé des les autres dans la variable content->content avec le caractère " # " foreach($contenu as $cont){ $form=explode("/",$cont); // à l'intérieur de chaque "champ" les caractéristiques (nom et type du champ) et les données sont séparées par le caractère " / " $formU[0]=explode("-",$form[0]); // chaque partie est séparée par des tirets " - " $formU[1]=explode('-',$form[1]); // formU[0][0] = Nom du champ // formU[0][1-2] = Caractéristiques du champ (radio, checkbox, ...) // formU[1] = Données du champ séparées par des tirets " - " // Valeurs possibles de formU[0][1-2] // formU[0][1] = radio // formU[0][1] = checkbox // formU[0][1] = text // formU[0][1] = textarea // formU[0][1] = select // formU[0][2] = unique // formU[0][2] = multiple // h4 > label de chaque champ de formulaire ?> <h4><?php echo utf8_encode($formU[0][0]); ?></h4> <p class="formU"> <?php if(sizeof($formU[0])<3 && $formU[0][1]!='textarea'){ // si formU[0] > 3 alors le champ ne peut-être ni radio ni checkbox alors on fait une balise INPUT sauf dans le cas d'un textarea for($i=0;$i<sizeof($formU[1]);$i++){ ?> <input type="<?php echo $formU[0][1]; ?>" name="<?php echo strtolower(str_replace(" ","",stripAccents(utf8_encode($formU[0][0])))); if($formU[0][1]=='checkbox'){ echo '[]'; }?>" value="<?php echo utf8_encode($formU[1][$i]); ?>" id="<?php if($formU[0][1]=='text'){ echo $formU[0][0].$i.'" />'; } else { echo utf8_encode($formU[1][$i]); ?>" /><label for="<?php echo utf8_encode($formU[1][$i]); ?>"><?php echo utf8_encode($formU[1][$i]); ?></label> <?php } ?> <?php } } elseif(sizeof($formU[0])<3 && $formU[0][1]=='textarea'){ // sinon si formU[0] > 3 et que ce coup-ci c'est un textarea alors on fait un textarea ?> <textarea rows="3" cols="10" name="<?php echo utf8_encode($formU[0][0]); ?>"></textarea> <?php } // sinon c'est un select et on déroule le select/option elseif($formU[0][1]=='select'){ switch($formU[0][2]){ case 'multiple': $msg=' multiple="multiple"'; break; default: $msg=''; break; }?> <select name="<?php echo str_replace(" ","",stripAccents(utf8_encode($formU[0][0]))); ?>[]" size="<?php echo sizeof($formU[1]); ?>"<?php echo $msg; ?>> <?php for($j=0;$j<sizeof($formU[1]);$j++){ ?> <option value="<?php echo $formU[1][$j]; ?>"><?php echo $formU[1][$j] ?></option> <?php } ?> </select> <?php } ?> </p> <?php } ?> <p><input type="submit" id="submito" name="submito" value="Pré-inscription" /></p> </form>
l'adresse de la page incriminée : http://www.abc-conduite.fr/1/8-Accueil
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="description" content="essai" /> <meta name="keywords" content="essai" /> <title>ABC Conduite - Accueil</title> <link rel="stylesheet" href="http://www.abc-conduite.fr/css/reset.css" type="text/css"/> <link rel="stylesheet" href="http://www.abc-conduite.fr/css/style.css" type="text/css"/> <link rel="shortcut icon" type="image/x-icon" href="http://www.abc-conduite.fr/images/favicon.ico" /> </head> <body> <div id="header"> </div> <div id="corps"> <div id="menu"> <ul id="menu_1"> <li id="item_1" class=" first current"><a href="/1/2-7-Accueil">Accueil</a></li> <li id="item_5" class=""><a href="/5/3-6-Permis-B">Formations</a></li> <li id="item_6" class=""><a href="/6/4-Horaires">Horaires</a></li> <li id="item_7" class=""><a href="/7/5-Tarifs">Tarifs</a></li> <li id="item_2" class=" last"><a href="/2/1-Contact">Contact</a></li> </ul> </div> <div id="contenu"> <h2><span>Essai</span></h2> <form method="POST"> <h4>Genre</h4> <p class="formU"> <input type="radio" name="genre" value="Mme" id="Mme" /><label for="Mme">Mme</label> <input type="radio" name="genre" value="Mlle" id="Mlle" /><label for="Mlle">Mlle</label> <input type="radio" name="genre" value="M" id="M" /><label for="M">M</label> </p> <h4>Permis possédés</h4> <p class="formU"> <input type="checkbox" name="permispossedes[]" value="B" id="B" /><label for="B">B</label> <input type="checkbox" name="permispossedes[]" value="EB" id="EB" /><label for="EB">EB</label> <input type="checkbox" name="permispossedes[]" value="C" id="C" /><label for="C">C</label> <input type="checkbox" name="permispossedes[]" value="D" id="D" /><label for="D">D</label> <input type="checkbox" name="permispossedes[]" value="E" id="E" /><label for="E">E</label> </p> <h4>Nom</h4> <p class="formU"> <input type="text" name="nom" value="" id="Nom0" /> </p> <h4>Commentaires</h4> <p class="formU"> <textarea rows="3" cols="10" name="Commentaires"></textarea> </p> <p><input type="submit" id="submito" name="submito" value="Pré-inscription" /></p> </form> <script src="http://www.abc-conduite.fr/js/jquery-1.3.2.min.js" type="text/javascript"></script> <link rel="stylesheet" href="http://www.abc-conduite.fr/includes/prettyPhoto3.0/css/prettyPhoto.css" type="text/css" media="screen" title="prettyPhoto main stylesheet" charset="utf-8" /> <script src="http://www.abc-conduite.fr/js/jquery.prettyPhoto.js" type="text/javascript" charset="utf-8"></script> </ul> <script type="text/javascript" charset="utf-8"> $(document).ready(function(){ $("a[rel^='prettyPhoto']").prettyPhoto(); }); </script> </div> </div> <div id="footer"><p><a href="http://www.couleur-favorite.fr/" target="_blank"><img src="http://www.abc-conduite.fr/images/logoCF.png" width="30" height="30" alt="logo Couleur Favorite" /> <span>© Couleur Favorite 2011</a></span></p></div> </body> </html>
Partager