Il n'y a plus d'erreur qui s'affiche mais les cases ne restent pas cochées après soumission du questionnaire
Version imprimable
Refait :
ps : je ne peux pas le faire à ta place !!Code:
1
2
3
4
5
6 // test echo 'requete : <br />'.$user_site_SQL.'<br /><br />'; echo 'user_site_array : <br />'; echo '<pre>'; print_r($user_site_array); echo '<pre>';
Alors, prends-en l'initiative, ok ?
- Vérifie les requetes (c'est bien les bons noms de champs ?)
- vérifie dans la base de données,
- fait des echo des données : $id_formulaire, ............
- ...
Alors ? Tu abandonnes ??
Non, non je me galère toujours autant...
A partir du moment où $user_site_nbre est tout le temps égal à zéro aucune condition n'est prise en compte, donc le problème se situe à ce niveau, j'ai bien vérifié toutes les variables et les requêtes et ça m'a l'air correct. Mais je ne sais pas d'où peut venir l'erreur, à part de la requête $user_site_SQL comme les cases cochées par l'utilisateur ne sont pas prises en compte.
Je ne peux rien faire si tu ne donnes ni code, ni résultats d'affichage, ni tests des echo, ...
En fait $id_formulaire n'affiche rien car il n'est disponible que dans l'état envoi.
Si les données ne sont pas envoyées à la bdd le code ne passe pas dans cet état et donc ne récupère pas $id_formulaire. Je me suis donc placé qu'à l'état envoi même si à cet état le formulaire ne doit pas réapparaître mais $user_site_nbre est toujours égale à 0 même si $id_formulaire est égale à 5 par exemple.Code:
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 // si etat : envoi if($etat=='envoi'){ //requêtes pour insertion des données dans la bdd étant donné que toutes les données ont été validées $sql = "INSERT INTO formulaire(id, nom, prenom, adresse, code_postal, ville, telephone, fax, email, devis, contact) VALUES('','$nom','$prenom','$adresse','$code_postal','$ville','$telephone','$fax','$email', '$devis', '$contact')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); $id_formulaire = mysql_insert_id();// on récupère l'id_formulaire qui vient d'être généré // table : siteformulaire if(isset($aSite)){// array $aSite foreach($aSite as $n_site){ $sql = "INSERT INTO siteformulaire(id_formulaire, id_site) VALUES ('$id_formulaire','$n_site')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); } } // table : demandeformulaire if(isset($aDemande)){ // array $aDemande foreach($aDemande as $n_demande){ $sql = "INSERT INTO demandeformulaire(id_formulaire, id_demande) VALUES ('$id_formulaire','$n_demande')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); } } } // fin si etat : envoi // ----------------------------------------
Je ne comprend pas, depuis que j'ai changé avec ce code que tu m'as donné...
... les expressions régulières que j'ai inséré pour vérifier le format de chaque champs (ici avec l'exemple du nom) ne sont plus pris en compte pour les accents.Code:
1
2 $nom = (isset($_POST['nom']))? htmlentities($_POST['nom'], ENT_QUOTES) : '';
Par exemple si j'entre le nom "josé", ce champ sera considéré comme nom valide alors que ma fonction de vérification acceptait ce champs comme valide avec le code ci dessous que tu m'as demandé de changer.
Ma fonction de vérification du champ nom étant sous la formeCode:
1
2
3 $nom=$_POST['nom']; if(isset($nom)){htmlentities($nom, ENT_QUOTES);}
Pour mes histoires de checkbox je verrais demain mais je ne saisi vraiment pas l'ordre dans lequel sont traitées les données. Du moins je n'arrive pas à me représenter sous forme de tableau comment les données sont gérées.Code:
1
2
3
4
5
6
7
8
9 function VerifierNom($nom) { $SyntaxeNom='`^[a-zA-ZàâÂéèêÊîôÔûùÛç-\s]{2,}$`'; //"-\s" autorise le tiret et l'espace etc... if(preg_match($SyntaxeNom,$nom)) return true; else return false; }
Bonne nuit
1/ Tu as raison, il faudrait revoir la logique de l'enchainement des évènements.
En cas de bug :Citation:
Dans le principe :
a- initialisation des données
$etat = 'initialisation';
-- au départ, toutes les données sont vides '' (et id_formulaire = 0)
b- si formulaire transmis :
$etat = 'récupération';
b1-- récupération des données depuis le formulaire ($_POST)
b2-- gestion d'erreur
$etat = 'gestion d\'erreur';
------ vérification des données en fonction des conditions imposées
------ champs obligatoires
------ email valide
------ ...
b3-- si pas d'erreur :
$etat = 'enregistrement en cours';
------ protection des données avant enregistrement en bdd
------ enregistrement en bdd
------ récupération id_formulaire (last_insert_id)
------ si tout s'est bien passé
$etat = 'enregistrement ok';
b4-- si erreur :
$etat = 'erreur';
------ message + ré-affichage du formulaire
c- affichage du formulaire
SI ($etat != 'enregistrement ok') :
-- ...
-- checkbox : on affiche la liste.
-- si ($id_formulaire>0) -> formulaire transmis : doit récupérer la liste enregistrée pour pouvoir ré-afficher les cases cochées
-- ...
en mettant des echo $etat; un peu partout, tu peux aussi vérifier "par où ca passe" et "où ca coince" ...
2/ Récupération des données : on va suivre ces conseils, et virer les htmlentities
Par contre, à l'affichage, il faudra utiliser htmlspecialchars($nom)Code:$nom = (isset($_POST['nom']))? $_POST['nom'] : ''; // ca suffit.
3/ tes fonctions de vérification ne servent pas à grand'chose, surtout si tu ne fais que vérifier si la chaine à plus de 2 caractères !
- Intéresse-toi à : filter_input(), Validate filters (exemples), Sanitize filters, ...
- et pour vérifier la longueur des chaines : strlen()
4/ Pour les checkbox : là aussi, il faudrait que tu comprennes bien comment tout fonctionne :
- affichage de la liste,
- récupération des cases cochées pour enregistrement en bdd,
- puis récupération des cases cochées pour ré-affichage dans la liste.
Bref : il faut en effet revoir tout ca.
Pour la CONCEPTION des tables, on va simplifier :
on peut se débarasser des tables intermédiaires "demandeformulaire" et "siteformulaire" :
Au moment de récupérer les checkbox cochées par l'utilisateur :Citation:
Table "formulaire" (=> infos sur l'utilisateur. 1 utilisateur = 1 formulaire)
- id_formulaire (clé, auto-increment)
- nom
- prenom
- adresse
- code_postal
- ville
- list_id_site (de la forme : 1,3,7,8,...)
- list_id_demande (de la forme : 1,2,5,9,...)
Table "siteformulaire" (table intermédiaire): supprimée
Table "demandeformulaire" (table intermédiaire): supprimée
Table "site" (=> liste pour les checkbox "site")
- id_site (clé, auto-increment)
- n_site
Table "demande" (=> liste pour les checkbox "demande")
- id_demande (clé, auto-increment)
- n_demande
Pour ré-afficher les checbox cochées :Citation:
- on récupère donc un array $aSite et un array $aDemande
- on les transforme en liste (de la forme : 1,2,5,9,...) :
---- $liste_idSite = implode(',',$aSite);
---- $liste_idDemande = implode(',',$aDemande);
- on enregistre ces 2 listes dans la table "formulaire", dans list_id_site et list_id_demande
Citation:
- recuperation de ces listes de checkbox cochées par l'utilisateur :
---- "SELECT list_id_site, list_id_demande FROM formulaire WHERE id_formulaire = '".$id_formulaire.";"
---- $list_id_site = ...; // (de la forme : 1,3,7,8,...)
---- $list_id_demande = ...; // (de la forme : 1,2,5,9,...)
---- on reforme des array :
---- $array_id_site = explode(',', $list_id_site);
---- $array_id_demande = explode(',', $list_id_demande);
A/ "site" :
- on liste TOUTES les checkbox
---- "SELECT id_site, n_site FROM site ORDER BY n_site;"
- pour chaque checkbox :
---- while {...}
---- ---- SI le formulaire a été transmis :
---- ---- if( $id_formulaire>0)
---- ---- ---- on teste si l'id_site est ou non dans la liste des id_site de l'utilisateur
---- ---- ---- if(in_array($site_row['id_site'], $array_id_demande)) -> la case est cochée
---- ---- ---- ---- $is_site_checked = ' checked="checked"';
---- ---- ---- sinon -> la case n'est pas cochée
---- ---- ---- ---- $is_site_checked = '';
B/ "demande" : (idem que pour "site")
Salut
J'ai déjà commencé par corriger les déclarations de variable et je me demandais si cela est utile de mettre des htmlspecialchars ou des array_map("htmlentities",...) pour les champs de type radioboutons et checkbox puisqu'on n'y affiche jamais de texte ?
Les variables concernées étant celles ci.
Sinon pour ce qui est de la requête des checkbox site, je me suis mis toujours dans le cas envoi. Je remettrai de l'ordre après par rapport aux états. Pour l'instant je souhaiterais comprendre pourquoi cette requête ne fonctionne pas.Code:
1
2
3
4
5
6
7
8
9
10 $client = (isset($_POST['client']))? $_POST['client'] : ''; $aSite = (isset($_POST['site']))? $_POST['site'] : ''; $aDemande = (isset($_POST['demande']))? $_POST['demande'] : ''; $devis = (isset($_POST['devis']))? $_POST['devis'] : ''; $contact = (isset($_POST['contact']))? $_POST['contact'] : '';
La voici pour rappel
Dedans l'$id_formulaire est bien récupéré. Comme je te disais "$user_site_nbre" reste à zéro et ce quelque soit la saisie de l'utilisateur. Le but de cette requête est bien de sélectionner tous les "id_site" en lien avec le $id_formulaire créé et de compter leur nombre. Je suis donc reparti sur cette requête qui insère chaque $id_formulaire et $id_site.Code:
1
2
3
4
5
6
7
8
9
10 $user_site_SQL = "SELECT site.id AS id_site FROM site INNER JOIN siteformulaire ON site.id = siteformulaire.id_site INNER JOIN formulaire ON siteformulaire.id_formulaire = formulaire.id WHERE formulaire.id = '".$id_formulaire."' ORDER BY n_site"; $user_site_resu = mysql_query($user_site_SQL); $user_site_nbre = mysql_num_rows($user_site_resu);
J'ai analysé donc $id_site mais seul le dernier id_site est sélectionné. Si on clique par exemple sur deux cases on obtiendra l'$id_site ="2" et non $id_site="1" et et "2" pour $id_formulaire = "5". De plus il n'y a pas de lien entre "$user_site_nbre" et $id_site donc il ne peut pas récupérer le nombre d'id_site enregistrés. Et je ne vois pas comment faire.Code:
1
2
3
4
5
6
7
8 // table : siteformulaire if(isset($aSite)){// array $aSite foreach($aSite as $id_site){ $sql = "INSERT INTO siteformulaire(id_formulaire, id_site) VALUES ('$id_formulaire','$id_site')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); } }
Si possible j'aimerais garder ces tables intermédiaires que sont "siteformulaire" et "demandeformulaire".
Avant de parler de $user_site_nbre qui affiche tout le temps 0, j'aurai du te parler de $user_site_resu qui affiche le résultat suivant
requete :
SELECT s.id FROM site s INNER JOIN siteformulaire sf ON s.id = sf.id_site INNER JOIN formulaire f ON f.id = sf.id_formulaire WHERE f.id = '42' ORDER BY s.n_site
$user_site_resu :
Resource id #11
Je t'ai expliqué ici comment et pourqoui te débarasser de tes tables intermédiaires ...
Commence par là.
Ca simplifiera toutes les requêtes.
Si tu veux vraiment les garder, ... fait comme tu le sens.
Je crois voir le problème. Essaye :
Et du coup :Code:
1
2
3
4
5 $user_site_SQL = "SELECT site.id AS id_site FROM site INNER JOIN siteformulaire ON site.id = siteformulaire.id_site WHERE siteformulaire.id_formulaire = '".$id_formulaire."' ORDER BY n_site";
Code:
1
2
3
4
5 $user_demande_SQL = "SELECT demande.id AS id_demande FROM demande INNER JOIN demandeformulaire ON demande.id = demandeformulaire.id_demande WHERE demandeformulaire.id_formulaire = '".$id_formulaire."' ORDER BY n_demande";
J'y croyais plus :) Un changement de nom id_site en id et tout a l'air de fonctionner. Ya juste un bug qui apparait si je coche aucune checkbox "site" mais l'erreur est signalée pour la checkbox "demande" (assez bizarre...) donc si je reprend le modèle de la checkbox site sur celle de demande y devrait plus y avoir de bug ;). Par contre j'ai pas compris la différence qu'il y a entre la requête que tu viens de me donner et celle qu'il y avait avant mais je vais tacher de regarder ça de plus près tout à l'heure. Je te redis ça sinon !
Je te l'avais dit dès le départ que ca prêterai à confusion !
60 messages pour en arriver là ...
ps : pour les 2 requêtes, j'ai juste enlevé une jointure inutile (on n'a pas besoin de regarder dans la table formulaire pour ces requêtes).
Tu remettras tout ton code une fois corrigé, ok ?
Oui pas de problème. Sinon il y a encore un problème dans traitement.php par rapport aux éléments dans le foreach
Voici l'erreur au niveau du foreachCode:
1
2
3
4
5
6
7 if(isset($aDemande)){ // array $aDemande foreach($aDemande as $id_demande){ $sql = "INSERT INTO demandeformulaire(id_formulaire, id_demande) VALUES ('$id_formulaire','$id_demande')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); } }
=> Warning: Invalid argument supplied for foreach() in C:\wamp\www/SI2I\traitement.php on line 136
L'erreur était déjà présente avant que je ne reproduise le code des checkbox "demande".
$user_demande_nbre est de nouveau égal à 0 comme pour la checkbox "site". Il doit donc y avoir un problème avec la requête ci dessous.
Il y a surement une "interférence" avec la checckbox "site" du fait de reprendre $id_formulaire.Code:
1
2
3
4
5
6 $user_demande_SQL = "SELECT demande.id FROM demande INNER JOIN demandeformulaire ON demande.id = demandeformulaire.id_formulaire WHERE demandeformulaire.id_formulaire = '".$id_formulaire."' ORDER BY n_demande";
Il faut que tu apprennes l'anglais ! au moins, à comprendre les messages d'errreurs :
foreach demande un array en 1er argument :Citation:
=> Warning: Invalid argument supplied for foreach() in C:\wamp\www/SI2I\traitement.php on line 136
-> as-tu vérifié que $aDemande existe, et est bien un array ?
Je te dis ça justement parce qu'avec les checkbox "sites" il n'y a pas ce problème alors que les requêtes sont construites exactement de la même manière. Sinon oui j'ai bien tout vérifier si $aDemande existe, il est bien déclaré dans les variables et il s'agit bien d'un array
As-tu fais ca pour vérifier ce qu'il contient :
Peux-tu afficher le résultat ?Code:
1
2
3 echo '<pre>'; print_r($aDemande); echo '</pre>';
(c'est pénible de te le demander à chaque fois ...)
ps: arrête de cliquer sur le bouton "Citer" : inutile de copier à chaque fois tout mon message précédent ...
Clique sur le bouton "Répondre", ok ?
Si je coche la première case de la checkbox "demande" il m'affiche le résultat suivant :
Array
(
[0] => 1
)
Si je coche toutes les cases voici le résultat
[0] => 1
[1] => 3
[2] => 2
Remarque : l'ordre dans lequel sont donnés les id étant rangé en fonction des n_demande et non en fonction des id_demande (juste un petit détail)
etc pour les résultats...
Donc ... ? c'est bon, non ?
a++ (je sors ce soir ;))
En fait ça marche si j'efface toutes les données de la bdd et que je coche une case. Mais il y a des incohérences si j'en coche deux, au renvoi du formulaire il va cocher celle qui n'a pas été coché. Et si je renvoie une deuxième fois les données (même si je coche qu'une case) il va en cocher une autre sans comprendre pourquoi. Je pense que le problème vient de l'ordre des id.
J'ai bien laissé tel quel les order by. Je n'ai absolument rien changé mais le problème persiste...
Ma foi je te dérange pas plus :) et bonne soirée !
Voilà les deux fichiers ! Encore merci. Ça marche nickel maintenant :)
formulaire.php
traitement.phpCode:
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234 <?php include ('traitement.php'); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>formulaire</title> </head> <body> <form method="post" action="formulaire.php"> <fieldset style="margin:25px"> <legend><b>Vos coordonnées</b></legend> <table> <tr> <td width="300"><label for="nom">Nom : <i>[Mot de plus de deux lettres]</i></label></td> <td><input type="text" name="nom" value ="<?php if(!empty($nom)&&(VerifierNom($nom)===true)){echo htmlentities($nom, ENT_QUOTES);}?>"/> <?php if (!empty($nom)&&(VerifierNom($nom)===false)){echo 'champ non valide';} if(empty($nom)&&(isset($_POST['valider']))) echo "champ vide"; else {echo " ";}?></td> </tr> <tr> <td width="250"><label for="prenom">Prénom : <i>[Mot de plus de deux lettres]</i></label></td> <td><input type="text" name="prenom" value ="<?php if(!empty($prenom)&&(VerifierPrenom($prenom)===true)){echo htmlentities($prenom, ENT_QUOTES);}?>"/> <?php if(!empty($prenom)&&(VerifierPrenom($prenom)===false)){echo 'champ non valide';} if(empty($prenom)&&(isset($_POST['valider']))) echo "champ vide"; else {echo " ";}?></td> </tr> <tr> <td width="250"><label for="adresse">Adresse : <i>[Phrase de plus de deux lettres]</i></label></td> <td><input type="text" name="adresse" value ="<?php if(!empty($adresse)&&(VerifierAdresse($adresse)===true)){echo htmlentities($adresse, ENT_QUOTES);}?>"/> <?php if(!empty($adresse)&&(VerifierAdresse($adresse)===false)){echo 'champ non valide';} if(empty($adresse)&&(isset($_POST['valider']))) echo "champ vide"; else {echo " ";}?></td> </tr> <tr> <td width="250"><label for="code_postal">Code postal : <i>[Numéro à cinq chiffres]</i></label></td> <td><input type="text" name="code_postal" value ="<?php if(!empty($code_postal)&&(VerifierCodePostal($code_postal)===true)){echo htmlentities($code_postal, ENT_QUOTES);}?>"/> <?php if(!empty($code_postal)&&(VerifierCodePostal($code_postal)===false)){echo 'champ non valide';} if(empty($code_postal)&&(isset($_POST['valider']))) echo "champ vide"; else {echo " ";}?></td> </tr> <tr> <td width="250"><label for="ville">Ville : <i>[Mot de plus de deux lettres]</i></label></td> <td><input type="text" name="ville" value ="<?php if(!empty($ville)&&(VerifierVille($ville)===true)){echo htmlentities($ville, ENT_QUOTES);}?>"/> <?php if(!empty($ville)&&(VerifierVille($ville)===false)){echo 'champ non valide';} if(empty($ville)&&(isset($_POST['valider']))) echo "champ vide"; else {echo " ";}?></td> </tr> <tr> <td width="250"><label for="telephone">Téléphone : <i>[Numéro à dix chiffres]</i></label></td> <td><input type="text" name="telephone" value ="<?php if(!empty($telephone)&&(VerifierTelephone($telephone)===true)){echo htmlentities($telephone, ENT_QUOTES);}?>"/> <?php if(!empty($telephone)&&(VerifierTelephone($telephone)===false)){echo 'champ non valide';} if(empty($telephone)&&(isset($_POST['valider']))) echo "champ vide"; else {echo " ";}?></td> </tr> <tr> <td width="250"><label for="fax">Fax : <i>[Numéro à dix chiffres]</i></label></td> <td><input type="text" name="fax" value ="<?php if(!empty($fax)&&(VerifierFax($fax)===true)){echo htmlentities($fax, ENT_QUOTES);}?>"/> <?php if(!empty($fax)&&(VerifierFax($fax)===false)){echo 'champ non valide';} if(empty($fax)&&(isset($_POST['valider']))) echo "champ vide"; else {echo " ";}?></td> </tr> <tr> <td width="250"><label for="email">Email : <i>[Email sous format standard]</i></label></td> <td><input type="text" name="email" value ="<?php if(!empty($email)&&(VerifierEmail($email)===true)){echo htmlentities($email, ENT_QUOTES);}?>"/> <?php if(!empty($email)&&(VerifierEmail($email)===false)){echo 'champ non valide';} if(empty($email)&&(isset($_POST['valider']))) echo "champ vide"; else {echo " ";}?></td> </tr> </table> </fieldset> <fieldset style="margin:25px"> <legend><b>Vos informations</b></legend> <table> <tr> <td width="250"><label for="client">Vous êtes client de l'entreprise ?</label></td> <td> <input type="radio" name="client" id="client_oui" value="1" <?php if ($client=='1') {echo 'checked="checked"';}?>/> <label for="client_oui">Oui</label> <input type="radio" name="client" id="client_non" value="0" <?php if ($client=='0') {echo 'checked="checked"';}?>/> <label for="client_non">Non</label> <?php if (($client!='0')&&($client!='1')&&(isset($_POST['valider']))){echo" => champ vide";}?> </td> </tr> <tr> <td width="50"><label for="site[]">Comment connaissez vous le site ?</label></td> <td><?php // ---------------------------------------- // affichage des checkbox "SITE" // ---------------------------------------- // les checkbox SITE de l'utilisateur $user_site_SQL = "SELECT site.id FROM site INNER JOIN siteformulaire ON site.id = siteformulaire.id_site INNER JOIN formulaire ON formulaire.id = siteformulaire.id_formulaire WHERE siteformulaire.id_formulaire = '".$id_formulaire."' ORDER BY n_site"; $user_site_resu = mysql_query($user_site_SQL); $user_site_nbre = mysql_num_rows($user_site_resu); // on crée un array $user_site_array des id_site de l'utilisteur if($user_site_resu && $user_site_nbre>0){ $i = 0; while ($user_site_row = mysql_fetch_array($user_site_resu)) { $user_site_array[$i] = $user_site_row['id']; $i++; } } // ---------------------------------------- // requete : TOUTES les cases sites $all_site_SQL = "SELECT id, n_site FROM site ORDER BY n_site;" ; $all_site_resu = mysql_query($all_site_SQL); $all_site_nbre = mysql_num_rows($all_site_resu); // ---------------------------------------- while ($all_site_row = mysql_fetch_array($all_site_resu)) { // la checkbox est cochée ? (si l'id est dans l'array des id_site de l'utilisteur : on coche) $is_site_checked = ($user_site_nbre>0 && in_array($all_site_row['id'], $user_site_array))? ' checked="checked"' : ''; ?> <input type="checkbox" name="site[]" value="<?php echo $all_site_row['id'];?>"<?php echo $is_site_checked;?>/> <label><?php echo $all_site_row['n_site']; ?></label> <?php } ?> </td> </tr> <tr> <td width="50"><label for="demande[]">Quelles sont vos demandes de site ?</label></td> <td><?php // ---------------------------------------- // affichage des checkbox "DEMANDE" // ---------------------------------------- // les checkbox DEMANDES de l'utilisateur $user_demande_SQL = "SELECT demande.id FROM demande INNER JOIN demandeformulaire ON demande.id = demandeformulaire.id_demande INNER JOIN formulaire ON formulaire.id = demandeformulaire.id_formulaire WHERE demandeformulaire.id_formulaire = '".$id_formulaire."' ORDER BY demande.id"; $user_demande_resu = mysql_query($user_demande_SQL); $user_demande_nbre = mysql_num_rows($user_demande_resu); // on crée un array $user_site_array des id_site de l'utilisteur if($user_demande_resu && $user_demande_nbre>0){ $j = 0; while ($user_demande_row = mysql_fetch_array($user_demande_resu)) { $user_demande_array[$j] = $user_demande_row['id']; $j++; } } // ---------------------------------------- // requete : TOUTES les cases demandes $all_demande_SQL = "SELECT demande.id, demande.n_demande FROM demande ORDER BY demande.id;" ; $all_demande_resu = mysql_query($all_demande_SQL); $all_demande_nbre = mysql_num_rows($all_demande_resu); // ---------------------------------------- while ($all_demande_row = mysql_fetch_array($all_demande_resu)) { // la checkbox est cochée ? (si l'id est dans l'array des id_demande de l'utilisteur : on coche) $is_demande_checked = ($user_demande_nbre>0 && in_array($all_demande_row['id'], $user_demande_array))? ' checked="checked"' : ''; ?> <input type="checkbox" name="demande[]" value="<?php echo $all_demande_row['id'];?>"<?php echo $is_demande_checked;?>/> <label><?php echo $all_demande_row['n_demande']; ?></label> <?php } ?> </td> </tr> </table> </fieldset> <fieldset style="margin:25px"> <legend><b>Vos options</b></legend> <table> <tr> <td width="250"><label for="devis">Demande de devis :</label></td> <td> <input type="radio" name="devis" id="devis_oui" value="1" <?php if ($devis=='1') {echo 'checked="checked"';}?>/> <label for="devis_oui">Oui</label> <input type="radio" name="devis" id="devis_non" value="0" <?php if ($devis=='0') {echo 'checked="checked"';}?>/> <label for="devis_non">Non</label> <?php if (($devis!='0')&&($devis!='1')&&(isset($_POST['valider']))){echo" => champ vide";}?> </td> </tr> <tr> <td width="250"><label for="contact">Demande de contact :</label></td> <td> <input type="radio" name="contact" id="contact_oui" value="1" <?php if ($contact=='1') {echo 'checked="checked"';}?>/> <label for="contact_oui">Oui</label> <input type="radio" name="contact" id="contact_non" value="0" <?php if ($contact=='0') {echo 'checked="checked"';}?>/> <label for="contact_non">Non</label> <?php if (($contact!='0')&&($contact!='1')&&(isset($_POST['valider']))){echo" => champ vide";}?> </td> </tr> </table> </fieldset> <fieldset style="margin:25px"> <legend><b>Opérations</b></legend> <table> <tr> <td width="250"><label for="valider"></label></td> <td><input type="submit" value="Valider" name="valider"/></td> <td><input type="reset" value="Effacer"></td> </tr> </table> </fieldset> <?php //affichage des messages d'erreur suite à la saisie du formulaire if(isset($MsgEchecNPE)&&($etat='attente')){echo $MsgEchecNPE;} if(isset($MsgEchecNE)&&($etat='attente')){echo $MsgEchecNE;} if(isset($MsgEchecE)&&($etat='attente')){echo $MsgEchecE;} if(($etat!='envoi') &&(isset($_POST['valider']))){echo "Veuillez ressaisir les données manquantes ou non valides";} ?> </form> </body> </html>
Code:
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 <?php //---------------------------------------------------------------------------- // Etat par défaut du formulaire lorsqu'aucune saisie n'a été effectuée $etat = 'affichage'; //------------------------------------------------------ // INITIALISATION / AFFECTATION DES VARIABLES //------------------------------------------------------ // Déclaration des variables $id = (isset($_POST['id']))? intval($_POST['id']) : ''; $nom = (isset($_POST['nom']))? $_POST['nom'] : ''; $prenom = (isset($_POST['prenom']))? $_POST['prenom'] : ''; $adresse = (isset($_POST['adresse']))? $_POST['adresse'] : ''; $code_postal = (isset($_POST['code_postal']))? $_POST['code_postal'] : ''; $ville = (isset($_POST['ville']))? $_POST['ville'] : ''; $telephone = (isset($_POST['telephone']))? $_POST['telephone'] : ''; $fax = (isset($_POST['fax']))? $_POST['fax'] : ''; $email = (isset($_POST['email']))? $_POST['email'] : ''; $client = (isset($_POST['client']))? $_POST['client'] : ''; $aSite = (isset($_POST['site']))? $_POST['site'] : ''; $aDemande = (isset($_POST['demande']))? $_POST['demande'] : ''; $devis = (isset($_POST['devis']))? $_POST['devis'] : ''; $contact = (isset($_POST['contact']))? $_POST['contact'] : ''; //----------------------------------------------------------- include ("fonctions.php");// fonctions de vérification des champs du formulaire //----------------------------------------------------------- // TRAITEMENT DU FORMULAIRE si transmis //----------------------------------------------------------- // si : formulaire transmis if(isset($_POST['valider'])){ if ((VerifierNom($nom) === true) && (VerifierPrenom($prenom) === true) && (VerifierAdresse($adresse) === true) && (VerifierCodePostal($code_postal) === true) && (VerifierVille($ville) === true) && (VerifierTelephone($telephone) === true) && (VerifierFax($fax) === true) && (VerifierEmail($email) === true) && ($client==='0' || $client==='1') && isset($aSite) && isset($aDemande) && ($devis==='0' || $devis==='1') && ($contact==='0' || $contact==='1')){ $etat='envoi'; // ok : envoi } } // fin si : formulaire transmis // ---------------------------------------- // si etat : envoi if($etat=='envoi'){ //requêtes pour insertion des données dans la bdd étant donné que toutes les données ont été validées $sql = "INSERT INTO formulaire(id, nom, prenom, adresse, code_postal, ville, telephone, fax, email, devis, contact) VALUES('','$nom','$prenom','$adresse','$code_postal','$ville','$telephone','$fax','$email', '$devis', '$contact')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); $id_formulaire = mysql_insert_id();// on récupère l'id_formulaire qui vient d'être généré // table : siteformulaire if(isset($aSite)){ // array $aSite foreach($aSite as $id_site){ $sql = "INSERT INTO siteformulaire(id_formulaire, id_site) VALUES ('$id_formulaire','$id_site')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); } } // table : demandeformulaire if(isset($aDemande)){ // array $aDemande foreach($aDemande as $id_demande){ $sql = "INSERT INTO demandeformulaire(id_formulaire, id_demande) VALUES ('$id_formulaire','$id_demande')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); } } } // fin si etat : envoi // ---------------------------------------- ?>
:ccool: ton acharnement a fini par payer ! :ccool: