IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] InlineMod - Ajax - Requêtes PHP-MySQL


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 16
    Points
    16
    Par défaut [AJAX] 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 : 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
     
    	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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 102
    Points : 77
    Points
    77
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    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 : 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
    <?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 ?

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    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!

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 102
    Points : 77
    Points
    77
    Par défaut
    je pense que tu met le "or die"etc... dans ta requete.. c'est ca qui doit coincer

    essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Unknown column 'valeur_que_j'entre_dans_l'input' in 'field list'
    Et en la modifiant un peu, je tombe sur celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ..........

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    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 : 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
    <?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!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajax,dropdown, mustache and php / mysql
    Par oitsuki dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/10/2017, 10h20
  2. Réponses: 1
    Dernier message: 11/02/2014, 12h27
  3. [AJAX] Mon premier script PHP/MYSQL/AJAX
    Par NiC1305 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/04/2008, 18h51
  4. [AJAX] Affichage de requête PHP dans un div créé par Ajax
    Par will89 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/12/2007, 19h00
  5. [AJAX] utriliser ajax pour rendre leger php
    Par jdar dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/01/2007, 10h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo