Bonjour je créé actuellement un admin en ajax.
Je m'auto-forme en ajax et j'ai déjà été amené à vous solliciter à plusieurs reprises et nombreux d'entre vous m'ont aidé notamment Gwyohm.
Je récapitule j'ai un formulaire qui me permet d'insérer un artiste.
Le Formulaire
Code html : 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 <?include "_debut.php";?> <script type="text/javascript" src="lib/prototype.js"></script> <script type="text/javascript" src="scripts/art_nat3.js"></script> <div id="Content"> <h1>Artistes</h1> <div class="block"> <form method="post" action="newArtist.php" name="monForm" id="monForm" enctype="multipart/form-data"> <table> <tr> <th>Ajouter Artiste </th> <td><input type="textarea" name="art_name" /></td> </tr> <tr> <th></th> <td><input type="submit" value="Valider" id="go" /></td> </tr> </table> </form> </div> <br /> </div> <?include "_fin.php";?>
Le Script Php permettant l'insertion dans la base de données
Code php : 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 <?php include_once("connexion.php"); ?> <?php mysql_select_db($database, $base); if(!empty($_POST['art_name'])){ $query_artist = sprintf("INSERT INTO artists(art_name) VALUES('%s');", $_POST['art_name']); $artist = mysql_query($query_artist, $base); if($artist == true){ $id = mysql_insert_id(); $query_artist = sprintf("SELECT * FROM artists WHERE art_id = $id"); $artist = mysql_query($query_artist, $base) or die(mysql_error()); $row_artist = mysql_fetch_assoc($artist); $result = array(); do { $result[] = $row_artist; } while ($row_artist = mysql_fetch_object($artist)); echo '{"arts":'.json_encode($result).'}'; } } else{ echo json_encode("Veuillez Entrer Un Artiste"); } ?>
Le js
Une fois l'insertion effectuée celle ci s'affiche dans un tableau sous le formulaire crée en ajax+prototype+dom.
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 var artists = { // tous les artistes lastAddedArtist: null, // le div conteneur container: null, // fonction d'init init: function() { var sbmButton = $("go"); var frm = $("monForm"); if(sbmButton && frm) { sbmButton.observe("click", artists.postArtist); } }, // pst un artiste en ajax au script php. l'url est l'action du formulaire postArtist: function(e) { // on stop l'événement e.stop(); // nouvelle requete ajax new Ajax.Request($("monForm").action, { method: "post", parameters : $("monForm").serialize(true), // on externalise le call back pour plus de lisibilité onSuccess:artists.artist_callBack }); }, // call back retour ajax artist_callBack: function(response) { // on evalue le JSON var lastArtist = response.responseText.evalJSON(); // si le resultat est de type string, c'est un message d'erreur if(Object.isString(lastArtist)) { //on affiche une erreur artists.writeError(lastArtist); } else { // reinit du formulaire $("monForm").reset(); // on, ajoute l'artiste à la liste de ceux déjà créés // note : le json retourné est de la forme : {arts:[{art_id: "id", art_name: "name"}]} // il pourait etre plus simple : {art_id: "id", art_name: "name"} // la ligne suivante serait alors simplement : artists.lastAddedArtist = lastArtist.arts[0]; // on dessine les artistes artists.drawArtists(); } }, // ecriture d'un message d'erreur writeError: function(message) { // on obtient le conteneur et on l'update avec le message artists.getContainer().update(message); }, // dessin les artistes du tableau artists.allArtists drawArtists : function() { // on construit la table var table = new Element('table'); // header var tr0 = new Element('tr'); var th0 = new Element('th').update("ID"); var th1 = new Element('th').update("Artiste"); var th2 = new Element('th', {colspan: '2'}).update("Action"); tr0.insert(th0).insert(th1).insert(th2); table.insert(tr0); // ... toujours donner les noms les plus significatifs possibles, ca aide toujours 6 mois après var artist = artists.lastAddedArtist; var tr1 = new Element('tr'); var td1 = new Element('td').update(artist.art_id); var td2 = new Element('td').update(artist.art_name); var td3 = new Element('td'); var imgModif = new Element('img', {src: 'modifier.png', alt: 'modifier', title: 'modifier'}); var imgModifLink = new Element('a',{"class":'imgModif',id: 'modif'}); td3.insert(imgModifLink); imgModifLink.insert(imgModif); var td4 = new Element('td'); var imgSuppr = new Element('img', {src: 'supprimer.png', alt: 'supprimer', title: 'supprimer'}); var imgSupprLink = new Element('a',{"class":'imgSuppr',href:'art_nat.php?suppr='+artist.art_id}); td4.insert(imgSupprLink); imgSupprLink.insert(imgSuppr); tr1.insert(td1).insert(td2).insert(td3).insert(td4); table.insert(tr1); // on obtient le conteneur var container = artists.getContainer(); // on enleve tout ce qu'il contient container.childElements().invoke("remove"); // on update à vide et on insere la table $('arts').innerHTML = ""; container.update("").insert(table); }, // renvoie le conteneur getContainer : function() { // si'il est null if(! artists.container) { // on le crée en deux fois var block = new Element("div", {"class": "block"}); $("Content").insert(block); artists.container = new Element("div", {"id": "arts"}); block.insert(artists.container); } // on le renvoie return artists.container; } }; document.observe('dom:loaded', artists.init);
J'ai créé également deux liens permettant soit de modifier ou de supprimer cette insertion.(en rouge)
C'est là que je bloque. Je ne sais pas comment récupérer la valeur de l'artiste déjà présente dans ma fonction.(en vert)
Une fois cette valeur récupérée je souhaite créé dynamiquement un formulaire avec un textarea qui aura pour valeur l'artiste en question que l'on pourra modifier.
Voici ma nouvelle version du js pour tenter d'effectuer ce que je viens d'énoncer.
Le problème se situe au niveau de la fonction ModifArtist car lorsque je clique sur le lien pour modifier l'artiste il ne se passe rien et la fonction artists se déroule parfaitement.
Je vous remercie d'avance pour votre compréhension et votre aide.
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 var artists = { // tous les artistes lastAddedArtist: null, // le div conteneur container: null, // fonction d'init init: function() { var sbmButton = $("go"); var frm = $("monForm"); if(sbmButton && frm) { sbmButton.observe("click", artists.postArtist); } }, // pst un artiste en ajax au script php. l'url est l'action du formulaire postArtist: function(e) { // on stop l'événement e.stop(); // nouvelle requete ajax new Ajax.Request($("monForm").action, { method: "post", parameters : $("monForm").serialize(true), // on externalise le call back pour plus de lisibilité onSuccess:artists.artist_callBack }); }, // call back retour ajax artist_callBack: function(response) { // on evalue le JSON var lastArtist = response.responseText.evalJSON(); // si le resultat est de type string, c'est un message d'erreur if(Object.isString(lastArtist)) { //on affiche une erreur artists.writeError(lastArtist); } else { // reinit du formulaire $("monForm").reset(); // on, ajoute l'artiste à la liste de ceux déjà créés // note : le json retourné est de la forme : {arts:[{art_id: "id", art_name: "name"}]} // il pourait etre plus simple : {art_id: "id", art_name: "name"} // la ligne suivante serait alors simplement : artists.lastAddedArtist = lastArtist.arts[0]; // on dessine les artistes artists.drawArtists(); } }, // ecriture d'un message d'erreur writeError: function(message) { // on obtient le conteneur et on l'update avec le message artists.getContainer().update(message); }, // dessine les artistes du tableau artists.allArtists drawArtists : function() { // on construit la table var table = new Element('table'); // header var tr0 = new Element('tr'); var th0 = new Element('th').update("ID"); var th1 = new Element('th').update("Artiste"); var th2 = new Element('th', {colspan: '2'}).update("Action"); tr0.insert(th0).insert(th1).insert(th2); table.insert(tr0); // ... toujours donner les noms les plus significatifs possibles, ca aide toujours 6 mois après var artist = artists.lastAddedArtist; var tr1 = new Element('tr'); var td1 = new Element('td').update(artist.art_id); var td2 = new Element('td').update(artist.art_name); var td3 = new Element('td'); var imgModif = new Element('img', {src: 'modifier.png', alt: 'modifier', title: 'modifier'}); var imgModifLink = new Element('a',{"class":'imgModif',id: 'modif'}); td3.insert(imgModifLink); imgModifLink.insert(imgModif); var td4 = new Element('td'); var imgSuppr = new Element('img', {src: 'supprimer.png', alt: 'supprimer', title: 'supprimer'}); var imgSupprLink = new Element('a',{"class":'imgSuppr',href:'art_nat.php?suppr='+artist.art_id}); td4.insert(imgSupprLink); imgSupprLink.insert(imgSuppr); tr1.insert(td1).insert(td2).insert(td3).insert(td4); table.insert(tr1); // on obtient le conteneur var container = artists.getContainer(); // on enleve tout ce qu'il contient container.childElements().invoke("remove"); // on update à vide et on insere la table $('arts').innerHTML = ""; container.update("").insert(table); }, // renvoie le conteneur getContainer : function() { // si'il est null if(! artists.container) { // on le crée en deux fois var block = new Element("div", {"class": "block"}); $("Content").insert(block); artists.container = new Element("div", {"id": "arts"}); block.insert(artists.container); } // on le renvoie return artists.container; } }; var modifArtist = { // le div conteneur container: null, // fonction d'init init: function(){ var modifLink = $("modif"); var artModif = (artist.art_name); var url = "modifArtist.php" if (modifLink && artModif){ modifLink.observe("click"); } }, // on dessine l'artiste à modifier drawArtModifier : function(){ // on construit le formulaire var form = new Element('form', {"action": url}); // on construit la table var table = new Element('table'); var tr0 = new Element('tr'); var th0 = new Element('th').update("Modifier Artiste"); var td0 = new Element('td'); var txtarea = new Element('textarea', {"name": "art_name"}).update(artist.art_name); td0.insert(txtarea); tr0.insert(th0).insert(td0); table.insert(tr0); var tr1 = new Element('tr'); var th1 = new Element('th'); var td1 = new Element('td'); var sbt = new Element('input', {"type": "submit", "value": "Valider"}); td1.insert(sbt); form.insert(sbt); var btn = new Element('input', {"type": "button", "value": "Annuler"}); td1.insert(btn); form.insert(btn); tr1.insert(td1); table.insert(tr1); form.insert(table); // on obtient le conteneur var container = modifArtist.getContainer(); // on enleve tout ce qu'il contient container.childElements().invoke("remove"); }, // renvoie le conteneur getContainer : function() { // si'il est null if(! modifArtist.container) { // on le crée en deux fois var block = new Element("div", {"class": "blockmodif"}); $("Content").insert(block); modifArtist.container = new Element("div", {"id": "arts"}); block.insert(modifArtist.container); } // on le renvoie return Modifartist.container; } }; document.observe('dom:loaded', artists.init, modifArtist.init);
Partager