Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/04/2008, 16h36   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 17
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 17
Points : 13
Points : 13
Par défaut InlineMod - Ajax - Requêtes PHP-MySQL

Bonjour à tous,

Voici mon problème:

J'ai repris le tutoriel InlineMod disponible sur le site. Après de nombreuses modifications et quelques simplifications, j'arrive bien à modifier le contenu du tableau dynamiquement ( lors du double-clique sur une cellule : champ -> création de l'input -> transfert vers champ.value ).

Or, la requête SQL ne s'effectue pas lorsque l'édition de la cellule est terminée. Voici les fonctions de mon fichier inlinemod.js (je vous montre celles qui nous intéressent ) :

Code :
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
 
	function inlineMod(id,obj,nomChamp,classe){
		if(editionEnCours){
			return false;
		}else{
			editionEnCours=true;
			sauve=false;
		}
 
		champ=eval('new '+classe+'();');
		champ.valeur=obj.innerText ? obj.innerText : obj.textContent;
		champ.id=id;
		champ.nomChamp=nomChamp;
 
		champ.remplacerTexte(obj,sauverMod());
		champ.activerChamp();
	}
 
	function sauverMod(){
 
		xhr.onreadystatechange=function(){
			if(xhr.readyState == 400){
 
				if(!xhr.reponseText){
					editionEnCours = false;
					champ.terminerEdition();
					document.getElementById("erreur").innerHTML="";
					return true;
				}else{
										sauve=false;
					return false;
				}
			}
		}
	}
	Texte.prototype.remplacerTexte=function(parent,sauvegarde){
		if(!parent || sauvegarde){
			return false;
		}else{
			this.parent=parent;
		}
 
		input=document.createElement('input');
		input.value=this.valeur;
		input.style.width=getTextWidth(this.valeur)+10+"px";
		input.setAttribute('method', 'GET');
		input.onblur=function(){
			sauverMod();
			champ.terminerEdition();
		}
 
		input.onkeydown=function keyDown(event){
			if(window.event.keyCode==13){
				sauverMod();
				champ.terminerEdition();
			}
		};
		champ.terminerEdition();
		parent.replaceChild(input,parent.firstChild);
	}
 
	}
	Texte.prototype.terminerEdition=function(){
		this.parent.replaceChild(document.createTextNode(input.value), this.parent.firstChild);
 
 
		var querystring = "?champ=" + champ.nomChamp + "&valeur=" + champ.getValeur() + "&echap=" + champ.echapperValeur() + "&id=" + champ.id + ieTrick() ;
		xhr.open("GET" , "sauverMod2.php" + querystring , true);
		xhr.send(null);	
 
		delete input;
		editionEnCours=false;
		sauve=false;
	}
et voici sauverMod2.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
$con=mysql_connect("localhost","root","root") or die(mysql_error());
mysql_select_db("bootx",$con);
 
$champ=$_GET["champ"];
$valeur=$_GET["valeur"];
$id=$_GET["id"];
$sql="UPDATE clients SET ".$champ." = `".$valeur."` WHERE clients.id = ".$id;
mysql_query($sql,$con);
mysql_close($con);
 
?>
J'ai déjà vu pas mal de tutoriel là-dessus, mais à chaque fois l'input était déjà initialisé dans la page index.php (dont l'attribut method était aussi précisée). Le problème vient peut-être du fait que l'input est créé dynamiquement... j'ai déjà testé avec la methode "post" et avec d'autres syntaxes plus simples pour la requête SQL.

(Je précise que le code javascript n'a visiblement aucun problème)

Merci à vous.
funkyy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 11h14   #2
Membre du Club
 
Inscription : septembre 2005
Messages : 95
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 95
Points : 42
Points : 42
Question bete :
Tu t'es assuré que ton script PHP est bien éxécuté ?
Que ta requête SQL fonctionne ?

Genre si tu met :
Code :
1
2
echo $sql;
echo mysql_error();
Il renvoi koi ton script ?

(Pour info : j'utilise l'extension firedebug de firefox pour voir ce qui se passe sur un script PHP appelé en AJAX)
oceanbigone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 12h03   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 17
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 17
Points : 13
Points : 13
J'ai testé ce que tu m'a dis. Le script php est bien lancé, j'ai fais le test en plaçant un alert(xhr.responseText) dans mon script, et le code php renvoyait justement la requête.

Donc c'est un problème je crois purement PHP. J'ai une erreur PHP dans mon alert en testant ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
$con=mysql_connect("localhost","root","root") or die(mysql_error());
mysql_select_db("bootx",$con);
 
$champ=$_POST["champ"];
$valeur=$_POST["valeur"];
$id=$_POST["id"];
$sql="UPDATE clients SET $champ = `$valeur` WHERE clients.id = $id" or die("ERREUR!".mysql_error());
mysql_query($sql,$con);
 
if(mysql_error() =! FALSE){
	echo "Ok!";
}else{
	echo mysql_error();
}
 
mysql_close($con);
 
?>
Cette erreur me dit : "Fatal error : can't use return value in use context"
Il me fait référence à mysql_error() , je pense qu'il ne renvoi pas de réponse quand il s'agit d'une requête de type UPDATE. Et même en enlevant mysql_error(), la requête SQL n'est pas effectuée ... problème de syntaxe ?
funkyy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 14h35   #4
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 17
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 17
Points : 13
Points : 13
Je précise que j'ai fais des test pour voir quelles valeurs de variables et c'est tout bon. il s'agit d'un problème de syntaxe pour la requête SQL et non un problème au niveau d'ajax!

Merci pour ton aide oceanbigone!
funkyy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 15h07   #5
Membre du Club
 
Inscription : septembre 2005
Messages : 95
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 95
Points : 42
Points : 42
je pense que tu met le "or die"etc... dans ta requete.. c'est ca qui doit coincer

essai :

Code :
1
2
3
 
$sql="UPDATE clients SET $champ = `$valeur` WHERE clients.id = '$id'";
mysql_query($sql,$con) or die("ERREUR!".mysql_error());
Apres verifie aussi que "$champ" n'est pas un mot clé genre "DATE"...
sinon ta requete sera fausse.. pour évité ca place des `. Comme ca :
Code :
1
2
3
 
$sql="UPDATE clients SET `$champ` = '$valeur' WHERE clients.id = '$id'";
mysql_query($sql,$con) or die("ERREUR!".mysql_error());
Assure toi aussi que ta variable ne contient pas de caractères du genre " ou '... (addslashes(), mysql_real_escape_string () ...)

Voili
oceanbigone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 17h00   #6
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 17
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 17
Points : 13
Points : 13
Re

J'ai vérifié la valeur de mes trois variables avec un echo $...$...$... et un alert(xhr.responseText) du côté du script js, elles sont correctement transmises au code PHP.

J'ai essayé ta requête, ça m'affiche maintenant une erreur :
Code :
Unknown column 'valeur_que_j'entre_dans_l'input' in 'field list'
Et en la modifiant un peu, je tombe sur celle-ci :
Code :
Unknown column '1' in 'where clause'.
Ca reste un soucis de syntaxe je pense, j'ai pourtant essayé pas mal de possibilités ...

Je continue mes tentatives ..........
funkyy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 17h17   #7
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 17
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 17
Points : 13
Points : 13
Re!

J'ai trouvé la bonne syntaxe, enfin ! et ça fonctionne bien en combinaison avec mon InLineMod modifié.
Merci beaucoup oceanbigone!

Voici la syntaxe qu'il fallait utiliser :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
$con=mysql_connect("localhost","root","root") or die(mysql_error());
mysql_select_db("bootx",$con);
 
$champ=$_GET['champ'];
$valeur=$_GET['valeur'];
$id=$_GET['id'];
 
$sql="UPDATE clients SET $champ='$valeur' WHERE id='$id'";
mysql_query($sql,$con) or die("ERREUR : ".mysql_error());
 
 
echo $champ."-".$valeur."-".$id;
 
mysql_close($con);
 
?>
Merci encore! A très bientot!
funkyy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h03.


 
 
 
 
Partenaires

Hébergement Web