Bonjour,
Je suis en train de réaliser mon premier formulaire PHP / Javascript. J'ai déjà pas mal avancé dessus, mais je souhaiterais demandé un premier avis et des conseils avant la suite de mon développement.
Mon formulaire consiste à entrer des période d'occupation pour des logements :
http://www.jibego.com/rrps/reservation.php
La base Mysql est constituée de ces 3 tables :
- Les logements (nom + adresse + cp + ville + + id du propriétaire + dernière date d'insertion et/ou modification)
- Les occupants (prenom + nom + email + type d'occupant (propriétaire ou non) + dernière date d'insertion et/ou modification)
- Les occupations (date d'arrivée + date de départ + id de l'occupant + date d'ajout)
Je souhaiterais utiliser l'autocompletion avec Jquery, qui va chercher les logement inscrit en base de données (essayer en tapant "r" dans le champ "nom" du logement) puis ensuite insérer les données correspondantes au logement dans le reste des champs une fois sélectionné (adresse, cp, ville, propriétaire...).
Une fois rempli, un email sera envoyé à la personne qui a remplie le formulaire, ainsi qu'à l'administrateur, avec un récapitulatif des infos enregistrées.
Mes questions actuelles sont les suivantes :
- Quelle est la meilleure façon de récupérer les valeurs des logements inscrits en base de données suite à l'autocompletion et les insérer dans les champs sur le formulaire ?
- Comment vérifier au mieux les données inscrites dans le formulaire pour éviter les erreurs de saisie (php ou javascript ?) ?
- Comment sécuriser au mieux mon formulaire ?
- Que me conseilleriez vous comme amélioration ?
Script PHP de la page de reservation.php :
Script PHP de la page d'envoi du formulaire :
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 <?php //import fichier config include("config.inc.php"); //connection BDD try { $bdd = new PDO($hote, $user, $password); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="css/bootstrap-theme.css" /> <link rel="stylesheet" href="css/bootstrap.css" /> <link rel="stylesheet" href="css/aristo/aristo .css"> <script src="js/jquery-1.10.2.js"></script> <script src="js/jquery-ui-1.10.4.custom.js"></script> <script src="js/script.js"></script> <title>Formulaire d'occupation</title> </head> <body style="width:1000px; margin: 0 auto;"> <header style="height:200px; width:100%; background-color: #bbbbbb;"> </header> <h1>Formulaire d'occupation</h1> <p> Ce formulaire vous permet d'inscrire vos périodes d'occupation pour régler votre taxe sur les résidences secondaires.Une fois que nous aurons reçu votre déclaration, nous vous communiquerons la somme a régler directement auprès de l'office du tourisme. </p> <form method="post" action="envoyer.php" name="resa"> <div style="margin-top:50px;"> <fieldset> <legend>Logement</legend> <p> <label for="logement">Nom du logement :</label> <input type="text" name="logement" value="" id="logement"/> </p> <p> <label for="prenom">Adresse :</label> <input type="text" name="adresse" value="" id="adresse"/> </p> <p> <label for="npa">NPA :</label> <input type="text" name="npa" value="" id="npa"/> </p> <p> <label for="ville">Ville :</label> <input type="text" name="ville" value="" id="ville"/> </p> </fieldset> </div> <div id="occupant" style="margin-top:50px;"> <fieldset> <legend>Occupant</legend> <p> Propriétaire : <input type="radio" name="type" value="1" id="oui" checked="checked"/> <label for="oui">Oui</label> <input type="radio" name="type" value="0" id="non" /> <label for="non">Non</label> </p> <p> <label for="nom">Nom :</label> <input type="text" name="nom" value="" id="nom"/> </p> <p> <label for="prenom">Prénom :</label> <input type="text" name="prenom" value="" id="prenom"/> </p> <p> <label for="email">Email :</label> <input type="text" name="email" value="" id="email"/> </p> </fieldset> </div> <div id="reservation1" style="margin-top:50px;"> <fieldset> <legend>Période d'occupation</legend> <p> <label for="arrive">Du :</label> <input type="text" name="arrivee" value="" id="arrivee" class="date"/> <label for="depart">Au :</label> <input type="text" name="depart" value="" id="depart" class="date"/> </p> </fieldset> </div> <div id="remarques" style="margin-top:50px;"> <fieldset> <legend>Remarques</legend> <p> <label for="arrive"></label> <textarea rows="4" cols="50"></textarea> </p> <p> <input type="checkbox" name="conditions" value="conditions" /> <label for="conditions">Le soussigné certifie, sur lhonneur, que les dates doccupation susmentionnées correspondent à loccupation effective du logement.</label> </p> </fieldset> </div> <div style="margin-top:50px;"> <input type="reset" value="Annuler" /> <input type="submit" value="Envoyer" onClick="envoie(this.form)"/> </div> </form> <footer style="height:200px; width:100%; background-color:#eeeeee; margin-top:100px;"> </footer> </body> </html>
Merci pour vos avis éclairés !
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 <?php //import fichier config include("config.inc.php"); //connection BDD try { $bdd = new PDO($hote, $user, $password); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } //récupération des variable du formulaire $logement=$_POST['logement']; $adresse=$_POST['adresse']; $npa=$_POST['npa']; $ville=$_POST['ville']; $proprietaire=$_POST['type']; $nom=$_POST['nom']; $prenom=$_POST['prenom']; $email=$_POST['email']; $arrivee=$_POST['arrivee']; $depart=$_POST['depart']; $remarques=$_POST['remarques']; //INSERT OCCUPANT // On vérifie si il n'y a pas d'occupants identiques $req = $bdd->prepare('SELECT id, nom, prenom, email, proprietaire FROM occupant WHERE nom = :nom AND prenom = :prenom'); $req->execute(array( 'nom' => $nom, 'prenom' => $prenom )); $r_occupant = $req->fetch(); //Si il n'y en a pas on insert les données if (!$r_occupant) { $ajout = $bdd->prepare('INSERT INTO occupant(nom, prenom, email, proprietaire, date) VALUES(:nom, :prenom, :email, :proprietaire, NOW())'); $ajout ->execute(array( 'nom' => $nom, 'prenom' => $prenom, 'email' => $email, 'proprietaire' => $proprietaire )); $info = 'Occupant ajouté'; $ajout->closeCursor(); } else { //Sinon on remplace les champs existant par les nouveaux $modif = $bdd->prepare('UPDATE occupant SET nom = :nom, prenom = :prenom, email = :email, proprietaire = :proprietaire, date = NOW() WHERE nom = :nom AND prenom =:prenom'); $modif ->execute(array( 'nom' => $nom, 'prenom' => $prenom, 'email' => $email, 'proprietaire' => $proprietaire )); $info = 'Occupant modifié'; $modif->closeCursor(); } $req->closeCursor(); //On récupère l'ID du dernier propriétaire modifié $occ_id = $bdd->query('SELECT id FROM occupant WHERE proprietaire =\'1\'ORDER BY date DESC LIMIT 0, 1'); $donnees = $occ_id->fetch(); $id_proprietaire = $donnees['id']; $occ_id->closeCursor(); //INSERT LOGEMENT // On vérifie si il n'y a pas de logement identique $req = $bdd->prepare('SELECT nom, adresse, npa, ville, proprietaire FROM logement WHERE nom = :nom_logement'); $req->execute(array( 'nom_logement' => $logement )); $r_logement = $req->fetch(); //Si il n'y en a pas on insert les données if (!$r_logement) { $ajout = $bdd->prepare('INSERT INTO logement(nom, adresse, npa, ville, proprietaire, date) VALUES(:nom_logement, :adresse, :npa, :ville, :proprietaire, NOW())'); $ajout ->execute(array( 'nom_logement' => $logement, 'adresse' => $adresse, 'npa' => $npa, 'ville' => $ville, 'proprietaire' => $id_proprietaire )); $info2 = 'occupation ajouté'; $ajout->closeCursor(); } else { //Sinon on remplace les champs existant par les nouveaux $modif = $bdd->prepare('UPDATE logement SET nom = :nom_logement, adresse = :adresse, npa = :npa, ville = :ville, proprietaire = :proprietaire, date = NOW() WHERE nom = :nom_logement'); $modif ->execute(array( 'nom_logement' => $logement, 'adresse' => $adresse, 'npa' => $npa, 'ville' => $ville, 'proprietaire' => $id_proprietaire )); $info2 = 'logement ajouté'; $modif->closeCursor(); } $req->closeCursor(); //On récupère l'ID du dernier logement modifié $log_id = $bdd->query('SELECT id FROM logement ORDER BY date DESC LIMIT 0, 1'); $donnees = $log_id->fetch(); $id_logement = $donnees['id']; //INSERT OCCUPATION //On récupère l'ID du dernier occupant modifié $log_id = $bdd->query('SELECT id FROM occupant ORDER BY date DESC LIMIT 0, 1'); $donnees = $log_id->fetch(); $id_occupant = $donnees['id']; //On insére l'occupation $ajout = $bdd->prepare('INSERT INTO occupation(arrivee, depart, occupant, logement, date) VALUES(:date_arrivee, :date_depart, :occupant, :logement, NOW())'); $ajout ->execute(array( 'date_arrivee' => $arrivee, 'date_depart' => $depart, 'occupant' => $id_occupant, 'logement' => $id_logement )); $info3 = 'occupation ajouté'; $ajout->closeCursor(); ?> <!DOCTYPE html PUBLIC "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="css/bootstrap-theme.css" /> <link rel="stylesheet" href="css/bootstrap.css" /> <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> <script type="text/javascript"> </script> <title>Formulaire de réservation</title> </head> <body style="width:1000px; margin: 0 auto;"> <header style="height:200px; width:100%; background-color: #bbbbbb;"> </header> <h1>Formulaire de réservation</h1> <p> <?php echo 'Merci '. $prenom . ' ' . $nom; ?>. Votre demande a été envoyé. Vous recevrez d'ici peu un email de confirmation avec les détails de vos périodes d'occupations.<br/> <strong><?php echo $info; ?></strong><br/> <strong><?php echo $info2; ?></strong><br/> <strong><?php echo $info3; ?></strong> </p> <a href= "<?php echo $base ?>reservation.php">Nouvelle demande de réservation</a> <footer style="height:200px; width:100%; background-color:#eeeeee; margin-top:100px;"> </footer> </body> </html>
Partager