Bonjour à tous; ceci est mon premier post alors merci de m'accueillir parmi vous.
J'ai un petit site applicatif, pour assurer les gestion des adhérents dans mon club de sport. J'utilisais les fonctions mysql_* de PHP sans problème.
J'ai décidé de passer à PDO pour voir, et j'ai un pépin à un endroit précis, et je n'arrive pas à résoudre.
Je vous donne déjà l'extrait du code.
Alors en gros, cette page sert à la fois a créer un nouvel enregistrement , ou à en modifier un existant. cette fonction est indiquée par une variable passée en paramètre ($mode).
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
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 <?php require_once("./scripts/php/common.php"); require_once("./scripts/php/adherent.class.php"); require_once("./scripts/php/inscription.class.php"); require_once("./scripts/php/grade.class.php"); require_once("./scripts/php/ville.class.php"); $adherent = new Adherent(); $inscription = new Inscription(); $grade = new Grade(); /********** Recuperation des variables passees en parametres **********/ if (isset($get_mode)) { $mode = $get_mode; } else { $mode = 'new'; } if (isset($get_adh_id)) { $adherent->adh_id = $get_adh_id; } else { $adherent->adh_id = ''; } //[...] /********** Vue / Edition d un enregistrement **********/ if (($mode == "view") || ($mode == "edit")) { $adherent->SelectAdherent($connection); /********** Recuperation de la derniere inscription associe **********/ $inscription->adh_id = $adherent->adh_id; $inscription->DerniereInscriptionAdherent($connection); /********** Recuperation de l historique des grades **********/ $grade->adh_id = $adherent->adh_id; $grade->PalmaresAdherent($connection); } /********** Ajout / Edition d un enregistrement **********/ /********** Recuperation des variables du formulaire **********/ //[...] if (isset($post_vil_cp)) { $adherent->vil_cp = $post_vil_cp; } if (isset($post_vil_nom)) { $adherent->vil_nom = $post_vil_nom; $adherent->vil_nom2 = $post_vil_nom; } //[...] $err_msg = ''; if (isset($post_valider)) { /********** Ajout d un enregistrement **********/ if ($mode == "new") { /********** Si tous les champs requis sont renseignes **********/ /********** recherche de l' id de la ville **********/ $ville = new Ville(); $ville->vil_cp = $adherent->vil_cp; $ville->vil_nom= $adherent->vil_nom; $ville->SelectVilleFromCpName($connection); $adherent->vil_id = $ville->vil_id; if ($adherent->ValideAdherent()) { /********** Si l insertion dans 'adherents' et 'contacts' est OK **********/ if ($adherent->adh_id = $adherent->InsertAdherent($connection)) { /********** Si l insertion dans 'inscrire' est OK **********/ $inscription->adh_id = $adherent->adh_id; if ($inscription->InsertInscription($connection)) { /********** Si l insertion dans 'passer' est OK **********/ $grade->adh_id = $adherent->adh_id; if ($grade->InsertPasser($connection)) { /********** Raffraichissment de la page appelante, message d information et fermeture du popup **********/ echo '<script type="text/javascript">window.opener.location.reload(); window.opener.alert("Nouvelle fiche créée pour\n\n'.$adherent->con_nom.' '.$adherent->con_prenom.'"); window.close();</script>'; exit(); } else { /********** Message d erreur **********/ $err_msg .= 'Erreur de base de donnees : '.mysql_error().''; } } else { /********** Message d erreur **********/ $err_msg .= 'Erreur de base de donnees : '.mysql_error().''; } } else { /********** Message d erreur **********/ $err_msg .= 'Erreur de base de donnees : '.mysql_error().''; } } else { /********** Message d erreur **********/ $err_msg .= 'Des champs obligatoires ne sont pas remplis'; } } } /********** recherche de la ville en fonction du cp **********/ function GetVillesFromCp($cp, $connection) { if ($cp) { $req_villes = 'SELECT v1.* FROM villes v1 WHERE v1.vil_cp LIKE "'.$cp.'%" ORDER BY v1.vil_nom'; return $connection->query($req_villes); } } $nbvilles = 0; if ($adherent->vil_cp) { $req_nbvilles = 'SELECT COUNT(*) FROM villes v WHERE v.vil_cp LIKE "'.$adherent->vil_cp.'%"'; $resultat = $connection->query($req_nbvilles); if (is_object($resultat)) { $nbvilles = $resultat->fetchColumn(); $resultat->closeCursor(); } } if ($nbvilles == 1) { $res_villes = GetVillesFromCp($adherent->vil_cp, $connection); $enr_villes = $res_villes->fetch(PDO::FETCH_OBJ); $adherent->vil_cp = $enr_villes->vil_cp; $adherent->vil_nom = $enr_villes->vil_nom; $adherent->vil_nom2 = $enr_villes->vil_nom; $res_villes->closeCursor(); } //[...] require_once("./popup_haut.php"); ?> <div id="popup_conteneur"> <h1><?php switch ($mode) { case 'view': echo 'détails d\'un adhérent'; break; case 'edit': echo 'modifier un adhérent'; break; case 'new': echo 'nouvel adhérent'; break; } ?></h1> <form id="adh_edit" action="#" method="post" class="form_popup" onsubmit="return VerifForm(this);"> <fieldset> <?php if ($err_msg) { echo '<span style="color:#FF0000;font-weight:bold;text-align:left;">'.$err_msg.'</span>'; } ?> <input type="hidden" id="adh_id" name="adh_id" value="<?php echo $adherent->adh_id; ?>" /> [...] <label for="vil_cp">code postal</label> <input type="text" style="width:5em;" maxlength="5" id="vil_cp" name="vil_cp" value="<?php echo $adherent->vil_cp; ?>" onchange="submit();" <?php if ($mode == "view") { echo 'readonly="readonly"'; } ?> /><br /> <label for="vil_nom">ville</label> <?php if ($mode == "view") { echo ' <input type="text" id="vil_nom2" name="vil_nom2" value="'.$adherent->vil_nom.'" readonly="readonly" />'; } else { $res_villes = GetVillesFromCp($adherent->vil_cp, $connection); if (is_object($res_villes)) { echo ' <select id="vil_nom2" name="vil_nom2" size="1" onchange="document.getElementById(\'vil_cp\').value=this.options[this.selectedIndex].value;document.getElementById(\'vil_nom\').value=this.options[this.selectedIndex].text;">'; if ($nbvilles == 0) { $adherent->vil_nom = ""; echo ' <option>Code postal inconnu</option>'; } elseif ($nbvilles > 1) { $adherent->vil_nom = ""; echo ' <option value="">Choisissez une ville</option>'; } while ($enr_villes = $res_villes->fetch(PDO::FETCH_OBJ)) { if ($adherent->vil_nom2 == ($enr_villes->vil_nom)) { echo ' <option value="'.$enr_villes->vil_cp.'" selected="selected">'.$enr_villes->vil_nom.'</option>'; } else { echo ' <option value="'.$enr_villes->vil_cp.'">'.$enr_villes->vil_nom.'</option>'; } } echo ' </select>'; $res_villes->closeCursor(); } else { echo ' <input type="text" id="vil_nom2" name="vil_nom2" value="" readonly="readonly" />'; } } ?> <input type="hidden" id="vil_nom" name="vil_nom" value="<?php echo $adherent->vil_nom; ?>" /><?php if ($mode != "view") { if (isset($_SESSION['admins']) && ($_SESSION['admins'] == True)) { echo '<a title="Renseignez tout ou partie du code postal pour obtenir une liste des communes correspondantes. Cliquez sur ce bouton pour ajouter une nouvelle ville"><img src="../img/ico/aide2.png" alt="aide" /></a> <img src="../img/ico/inserer.png" alt="Nouveau" onclick="ville=window.open(\'villes_nouveau.php?form=adh_edit&field=vil_cp\', \'ville\',\'width=400px,height=400px,location=0\');ville.focus();" style="position:absolute;" />';} else { echo '<a title="Renseignez tout ou partie du code postal pour obtenir une liste des communes correspondantes."><img src="../img/ico/aide2.png" alt="aide" /></a>'; }} ?><br /> [...] </fieldset> <fieldset> <input type="reset" class="bouton_gauche" style="background-image: url(../img/ico/effacer.png);" value="annuler" onclick="window.close();" /> <?php if ($mode == 'new') { echo ' <input type="submit" id="valider" name="valider" class="bouton_droit" style="background-image: url(../img/ico/nouveau.png);" value="valider" />'; } elseif ($mode == 'edit') { echo ' <input type="submit" id="valider" name="valider" class="bouton_droit" style="background-image: url(../img/ico/modifier.png);" value="valider" onclick="if (confirm(\'Etes vous sur de vouloir modifier\nles informations concernant\n\n'.$adherent->con_prenom.' '.$adherent->con_nom.'?\')) { return true; } else {return false; }" />'; } elseif ($mode == 'view') { echo ' <input type="button" class="bouton_droit" style="background-image: url(../img/ico/modifier.png);" value="éditer" onclick="window.location=\'adh_edit.php?mode=edit&adh_id='.$adherent->adh_id.'\';" /><br /><br /> <input type="button" class="bouton_droit" style="background-image: url(../img/ico/effacer.png);" value="supprimer" onclick="if (confirm(\'Etes-vous sur de vouloir effacer\ntoutes les informations concernant\n\n'.$adherent->con_prenom.' '.$adherent->con_nom.'?\')) { window.location=\'adh_edit.php?mode=delete&adh_id='.$adherent->adh_id.'\'; }" />'; } ?> </fieldset> </form> </div> <?php require_once("popup_bas.php"); ?>
Le problème que je rencontre est le suivant. Lorsque je renseigne tout ou partie du code postal, la page se raffraîchit est doit rechercher l'ensemble des communes correspondantes grace à cette portion de code:
pour offrir une liste de choix dans le select vil_nom2 (la champ caché vil_nom sert à un contrôle de validation du formulaire). Quand je suis en mode "new", donc pour un nouvel enregistrement, pas de problème, le select est renseigné et tout roule.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $nbvilles = 0; if ($adherent->vil_cp) { $req_nbvilles = 'SELECT COUNT(*) FROM villes v WHERE v.vil_cp LIKE "'.$adherent->vil_cp.'%"'; $resultat = $connection->query($req_nbvilles); if (is_object($resultat)) { $nbvilles = $resultat->fetchColumn(); $resultat->closeCursor(); } }
Quand je suis en mode "edit", $resultat et le retour de GetVillesFromCp sont vides (et ne sont même pas des objets). j'ai bien testé mes requêtes, elle sont OK, et je suis incapable de comprendre pourquoi....
Si une personne voit ou je fais une boulette, je la remercie d'avance.
Anjin
Partager