Bonjour !
J'ai fait un code AngularJs avec une factory pour faire du Crud avec un fichier PHP et mysql.
Ca marche... mais le code est une horreur à maintenir, car il y a 2 vues, une créer et une modifier !
Le but est de gérer des utilisateurs.
Le problème est que j'ai deux vues : une vue Créer, et une vue Modifier, du coup faut se retaper 2 modifications au lieu d'une en cas d'ajout de champs, c'est super embétant.
Auriez vous une idée? Comment faire pour n'avoir qu'une seule vue HTML qui traite la création d'un utilisateur et aussi la modification ? C'est hyper embétant, parce que je ne veux pas tout faire dans un seul controleur ?
Faudrait-il faire plutot une directive qui contiendrait tout le formulaire, à laquelle on passerait l'objet json ? Je ne comprends pas., c'est dur.
Pour tester mon programme, c'est ici :
http://nicolash.org/angular/truc27.html#/accueil
Mon code AngularJs, dans un seul fichier :
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
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235 <!DOCTYPE html> <html ng-app="monApp"> <head> <meta charset="utf8" > <title>Une factory CRUD Partagée en ligne dans une BDD MYSQL avec AngularJs et Php </title> <!-- CHARGEMENT DES LIBRAIRIES --> <!-- APPEL LIB ANGULAR --> <script type="text/javascript" src="angular-1.3.13/angular.min.js"></script> <script src="angular-route.min.js"></script> <script src="librairies/angular-locale_fr-fr.js"></script> <!-- CSS DE L'APPLICATION --> <link href="truc27.css" media="screen" rel="stylesheet" type="text/css" /> <!-- FIN DE CHARGEMENT DES LIBRAIRIES --> <script> var monApp = angular.module('monApp',['ngRoute']) .config(function ($routeProvider, $locationProvider){ <!-- ROUTING ANGULAR --> $routeProvider .when('/accueil', { templateUrl: 'defaut.html', controller: 'accueilCtrl' }) .when('/creer', { templateUrl: 'creer.html', controller: 'creerCtrl' }) .when('/modifier', { templateUrl: 'modifier.html', controller: 'accueilCtrl' }) .otherwise({redirectTo: '/accueil'}); }) <!-- LE CONTROLEUR GENERAL ET DE LA LISTE --> .controller("accueilCtrl", function($scope,crudPhp,$location) { <!-- Lire la liste des utilisateurs --> crudPhp.getUtilisateurs().success(function(data){ $scope.utilisateurs = data; }); <!-- rafraichir la liste des utilisateurs --> $scope.rf = function (){ crudPhp.getUtilisateurs().success(function(data){ $scope.utilisateurs = data; }); }; <!-- Supprimer un utilisateur --> $scope.supprimerUtilisateur = function (id){ crudPhp.supprimerUtilisateur(id).success(function(data){ $scope.rf(); //rafrachir la liste après suppression }); }; <!-- Modifier un utilisateur --> $scope.majUtilisateur = function (id){ $scope.formData = {}; $location.path('modifier'); crudPhp.editerUtilisateur(id).success(function(data){ $scope.formData = data; }); }; <!-- Valider la modification d'un utilisateur --> $scope.submit = function() { crudPhp.validerModification($scope.formData[0]).success(function(data){ $scope.rf(); //rafraichir la liste après création }); }; <!-- FIN DU CONTROLEUR --> }) <!-- LE CONTROLEUR CREER --> .controller("creerCtrl", function($scope,crudPhp) { <!-- Créer un utilisateur --> $scope.formData = {}; // Le contenu du formulaire sera dans cet objet $scope.submit = function() { console.log(this.formData); crudPhp.creerUtilisateur($scope.formData).success(function(data){ $scope.rf(); //rafraichir la liste après création }); }; <!-- FIN DU CONTROLEUR --> }) .factory("crudPhp",function($http){ var factory = {}; factory.getUtilisateurs = function(){ return $http.get('dbtruc27.php?action=get_utilisateurs') } factory.creerUtilisateur = function(formData){ return $http.post('dbtruc27.php?action=creer_utilisateur' , formData) } factory.supprimerUtilisateur = function(id){ return $http.post('dbtruc27.php?action=supprimer_utilisateur' ,{"id":id}) } factory.editerUtilisateur = function(id){ return $http.post('dbtruc27.php?action=editer_utilisateur' ,{"id":id}) } factory.validerModification = function(formData){ return $http.post('dbtruc27.php?action=valider_modification' ,formData) } return factory }); </script> </head> <!-- La page HTML générale --> <body ng-controller="accueilCtrl" class="body"> <h1>UN CRUD partagé dans une BDD Mysql avec AngularJs et un Back-end en PHP</h1> <!-- Le menu, qui appelle,grâce à HREF, les différentes vues HTML situées plus bas, puis les affiche dans la balise ng-view --> <div class="container "> <div > <a class="menu" href="#/accueil" class="">Accueil</a> <a class="menu" href="#/creer" class="">Créer</a> </div> </div> <!-- LA DIV DE LA LISTE DES OBJETS --> <div class="liste"> <div class = "personne" ng-repeat="utilisateur in utilisateurs"> <img src="cowboy-20.png" class="icone"></img><br> Prénom: {{utilisateur.prenom}} <br> Nom : {{utilisateur.nom}} <br> Age :{{utilisateur.age}} <br> Email: {{utilisateur.email}} <br> Id: {{utilisateur.id}} <br> <button ng-click="supprimerUtilisateur(utilisateur.id)" >Supprimer </button> <button ng-click="majUtilisateur(utilisateur.id)" >Mettre à jour </button> </div> </div> <!-- Cette balise NG-View va afficher les différentes vues --> <div id="main" class="designDiv"> <div ng-view></div> </div> </body> <!-- VUE HTML : DEFAUT--> <script type="text/ng-template" id="defaut.html"> <div class="desc"> </div> </script> <!-- VUE HTML : CREER--> <script type="text/ng-template" id="creer.html"> <div class="desc"> <form ng-controller="creerCtrl" ng-submit="submit()"> Nom:<br> <input type="text" name="nom" ng-model="formData.nom" ng-required="true" ><br> <span ng-show="form.size.$error.required">The value is required!</span> Prénom:<br> <input type="text" name="prenom" ng-model="formData.prenom" ng-required="true" ><br> <span ng-show="form.size.$error.required">The value is required!</span> Age:<br> <input type="text" name="nom" ng-model="formData.age" ng-required="true" ><br> <span ng-show="form.size.$error.required">The value is required!</span> Email :<br> <input type="text" name="prenom" ng-model="formData.email" ng-required="true" ><br> <span ng-show="form.size.$error.required">The value is required!</span> <input type="submit" value="Ok" > </form> </div> </script> <!-- VUE HTML : MODIFIER--> <script type="text/ng-template" id="modifier.html"> <div class="desc"> <form ng-controller="accueilCtrl" ng-submit="submit()"> Nom:<br> <input type="text" name="nom" ng-model="formData[0].nom"><br> Prénom:<br> <input type="text" name="prenom" ng-model="formData[0].prenom"><br> Age:<br> <input type="text" name="nom" ng-model="formData[0].age"><br> Email :<br> <input type="text" name="prenom" ng-model="formData[0].email"><br> <input type="submit" value="Ok"> </form> </div> </script>
Mon code PHP d'accès CRUD à Mysql :
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 <?php include('configtruc27.php'); /** Switch Case pour récupérer la l'action demandée par le controleur Angular **/ switch($_GET['action']) { case 'creer_utilisateur' : creer_utilisateur(); break; case 'get_utilisateurs' : get_utilisateurs(); break; case 'editer_utilisateur' : editer_utilisateur(); break; case 'supprimer_utilisateur' : supprimer_utilisateur(); break; case 'valider_modification' : valider_modification(); break; } /** Function qui ajoute l'utilisateur en base de données MYSQL **/ function creer_utilisateur() { $data = json_decode(file_get_contents("php://input")); $nom = $data->nom ; $prenom = $data->prenom; $age = $data->age; $email = $data->email; print_r($data); $qry = 'INSERT INTO utilisateurs2 (nom,prenom,age,email) values ("' . $nom . '","' . $prenom . '",'.$age. ' ,"'.$email .'")'; $qry_res = mysql_query($qry); if ($qry_res) { $arr = array('msg' => "Utilisateur ajouté correctement!!!", 'erreur' => ''); $jsn = json_encode($arr); // print_r($jsn); } else { $arr = array('msg' => "", 'erreur' => 'Erreur d insertion de l utilisateur'); $jsn = json_encode($arr); // print_r($jsn); } } /** Function to LIT les utilisateurs2 en Base de données Mysql **/ function get_utilisateurs() { $qry = mysql_query('SELECT * from utilisateurs2'); $data = array(); while($rows = mysql_fetch_array($qry)) { $data[] = array( "id" => $rows['id'], "iduser" => $rows['iduser'], "nom" => $rows['nom'], "prenom" => $rows['prenom'], "age" => $rows['age'], "email" => $rows['email'] ); } print_r(json_encode($data)); return json_encode($data); } /** Function qui supprime un utilisateur en base de donnée mysql **/ function supprimer_utilisateur() { $data = json_decode(file_get_contents("php://input")); $id = $data->id; print_r($data) ; $del = mysql_query("DELETE FROM utilisateurs2 WHERE id = ".$id); if($del) return true; return false; } /** Functionpour lire les caractéristiques d'un utilisateur en base mysql afin de les éditer **/ function editer_utilisateur() { $data = json_decode(file_get_contents("php://input")); $id = $data->id; $qry = mysql_query("SELECT * from utilisateurs2 WHERE id = ".$id); $data = array(); while($rows = mysql_fetch_array($qry)) { $data[] = array( "id" => $rows['id'], "iduser" => $rows['iduser'], "nom" => $rows['nom'], "prenom" => $rows['prenom'], "age" => $rows['age'], "email" => $rows['email'] ); } print_r(json_encode($data)); return json_encode($data); } /** Function de mise à jour d'un utilisateur **/ function valider_modification() { $data = json_decode(file_get_contents("php://input")); $id = $data->id; $iduser = $data->iduser; $nom = $data->nom ; $prenom = $data->prenom; $age = $data->age; $email = $data->email; // print_r($data); $qry = "UPDATE utilisateurs2 set nom='".$nom."' , prenom='".$prenom."',iduser='".$iduser."',age='".$age."',email='".$email."' WHERE id=".$id; $qry_res = mysql_query($qry); if ($qry_res) { $arr = array('msg' => "Utilisateur modifié avec succès!!!", 'error' => ''); $jsn = json_encode($arr); // print_r($jsn); } else { $arr = array('msg' => "", 'error' => 'Erreur dans la mise à jour de l enregistrement'); $jsn = json_encode($arr); // print_r($jsn); } } ?>
Partager