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

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);
Une fois l'insertion effectuée celle ci s'affiche dans un tableau sous le formulaire crée en ajax+prototype+dom.

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.

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);
Je vous remercie d'avance pour votre compréhension et votre aide.