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

AJAX Discussion :

[AJAX] Maj d'1 table mysql avec ajax, javascript en cliquant sur un radiobutton


Sujet :

AJAX

  1. #1
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut [AJAX] Maj d'1 table mysql avec ajax, javascript en cliquant sur un radiobutton
    Bonjour,
    Je souhaitais faire la mise à jour d'une table mysql avec une méthode ajax (pas très pure ).
    Alors voilà sur ma page php un tableau avec avec des radiobutton; et je voudrais quant je clique sur l'un d'eux, mettre à jour ma table.
    page.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo '<tr><td>...</td>
    			<td>...</td>
    			<td>
    <input type="radio" name="fragment_ref" id="fragment_ref" value="'.$B3['ID'].'" '.($B3['fragment_ref']===true?'checked':'').' onchange="changeFragmentRef('.$B3['ID_citation'].', '.$B3['ID'].')"/>
    			</td>
    			</tr>';
    le javascript (vous reconnaitrez le code de siddh)
    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
    function getXhr(){
    	var xhr = null;
    	if(window.XMLHttpRequest) // Firefox et autres
    		xhr = new XMLHttpRequest();
    	else if(window.ActiveXObject){ // Internet Explorer
    		try {
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    			xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
    	else { // XMLHttpRequest non supporté par le navigateur
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    		xhr = false;
    	}
    	return xhr;
    }
     
    /**
    * Méthode qui sera appelée sur le onchange du select
    */
    function changeFragmentRef(id_cit, frag_ref){
     
    	var xhr = getXhr();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    			alert('Mise à jour du fragment de référence ok');
    		}
    	}
     
    	// Ici on va voir comment faire du post
    	xhr.open("POST","action_ajax.php",true);
     
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
    	//  poster les arguments
    	xhr.send("fragment_ref="+frag_ref+"&id_cit="+id_cit);
    	alert("id_cit = "+id_cit+" et frag_ref = "+frag_ref);
    }
    et la page php, action_ajax.php, qui devrait faire l'action qu'elle ne fait pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $db = new db();
    $sql='UPDATE citations SET ID_fragment_ref = :ID_fragment_ref 
                    WHERE ID = :id_citation';
    $req = $db->res->prepare($sql);
    $temp = $req->execute(array('ID_fragment_ref' => $_POST["fragment_ref"], 'id_citation' => $_POST["id_cit"]));
    ?>
    Mais je n'ai aucun message d'erreur, et la table n'est pas mise à jour; je précise que les 2 variables, id_cit et frag_ref, sont définit.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 139
    Points : 171
    Points
    171
    Par défaut
    A première vue, le code a l'air correct. Regarde dans les logs serveur si tu peux, la fonction php retourne peut-être une erreur.
    Les librairies SQL pour traiter les requêtes sont bien disponibles dans ta fonction php ? Tu n'inclues rien donc je ne sais pas.

    Dans tous les cas, je pense que tu devrais tester si l'update s'est bien passé pour retourner quelque-chose au javascript qui fera quelque-chose en fonction.

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Essaie de faire un alert sur le retour de la requête AJAX.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(xhr.readyState == 4 && xhr.status == 200){
    			alert(xhr.responseText);
    		}
    Coté php ajoute des echo
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_POST["fragment_ref"];

    Sinon, montre nous le code HTML généré pour le formulaire mais pas le php

    A+.

  4. #4
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Merci de votre aide !
    Apparemment, les includes se font bien: xhr.js pour la fonction changeFragmentRef(..), et j'ai ajouté un require_once pour inclure la class db.class.inc.php qui permet l'accès à la base par PDO dans le fichier action_ajax.php. Mais cela ne change rien.

    J'ai essayé d' afficher les POST dans action_ajax.php mais ils n'apparaissent jamais, c'est comme si cette page n'était jamais executée.

    Ensuite, je ne passe jamais dans la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (xhr.readyState == 4 && xhr.status == 200)
    ( c'est pas bon signe docteur? ) et si je place des alert ailleurs: alert(xhr.responseText) n'affiche rien, bien qu'il y est bien un objet XMLHttpRequest.

    Voici le code généré pour page.php:
    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
    <tbody><tr><td width="10px">
     
    <a href="..." relation onclick="javascript:nv=window.open('...','nv','height=200,width=600,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes,status=yes');nv.opener=self;return false;;" title="Supprimer cette relation" target="_blank"><img src="images/delete.png" alt="-"/></a>
    </td><td width="10px">
    <a href="..." relation onclick="javascript:nv=window.open('...','nv','height=600,width=640,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes,status=yes');nv.opener=self;return false;;" title="Modifier cette référence critique" target="_blank"><img src="images/edit.png" alt="-"/></a>
    </td><td><span style="text-decoration: underline;">Culottes</span>.</td><td>g226_7_f_107__v____</td>
    			<td>PP</td>
    			<td>
    				<input type="radio" name="fragment_ref" id="fragment_ref" value="2030"  onchange="changeFragmentRef(679, 2030)"/>
    			</td>
    			</tr><tr><td width="10px">
    <a href="..." relation onclick="javascript:nv=window.open('...','nv','height=200,width=600,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes,status=yes');nv.opener=self;return false;;" title="Supprimer cette relation" target="_blank"><img src="images/delete.png" alt="-"/></a>
    </td><td width="10px">
    <a href="..." relation onclick="javascript:nv=window.open('...','nv','height=600,width=640,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes,status=yes');nv.opener=self;return false;;" title="Modifier cette référence critique" target="_blank"><img src="images/edit.png" alt="-"/></a>
    </td><td><span style="text-decoration: underline;">Culotte</span>. [...] Percy.</td><td>g226_7_f_108__r____</td>
     
    			<td>PP</td>
    			<td>
    				<input type="radio" name="fragment_ref" id="fragment_ref" value="2031" checked onchange="changeFragmentRef(679, 2031)"/>
    			</td>
    			</tr><tr><td width="10px">...
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Re,

    Essaie de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4){
    			if (xhr.status==200 || xhr.status==0){
                               alert(xhr.responseText);
                               }else{
                               alert (xhr.status);
                            }
    		}
    et retire cette partie
    alert("id_cit = "+id_cit+" et frag_ref = "+frag_ref);
    A+.

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Un id doit être unique dans un document
    Et utilise l’événement onclick à la place de onchange.

    A+.

  7. #7
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Alors, j'ai utilisé l'evt onclick, ainsi qu'un id unique (effectivement c'est moins conflictuel).
    J'ai viré le alert en fin de fonction changeFragmentRef();
    et remplacé le contenu de xhr.onreadystatechange = function () {} par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		if(xhr.readyState == 4){
    			if (xhr.status==200 || xhr.status==0){
                	alert(xhr.responseText);
                }else{
                    alert (xhr.status);
                }
    		}
    Il m'affiche un statut 404, donc il n'arrive pas à trouver mon fichier action_ajax.php ? mais il est dans le même répertoire.
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xhr.open("POST","action_ajax.php",true);
    xhr.open("POST","./action_ajax.php",true);
    // et meme:
    xhr.open("POST",".\action_ajax.php",true);
    rien n'y fait j'ai toujours xhr.status=404

    -----------------------------------------------------------
    Pour limiter les possibilités d'erreur, j'ai définit mes 2 fonctions javascript dans la page.php qui se trouve maintenant dans le même répertoire que action_ajax.php; et le xhr.status a changé en 500 => pb sur le serveur.
    Mais quel pb??
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Re,

    Le fichier qui fait la requête AJAX (en non pas le fichier javascript) et le fichier action_ajax.php sont dans le même répertoire?
    Si tu es sous linux, vérifie la casse.

    A+.

  9. #9
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    page.php et action_ajax.php sont dans le même répertoire: www
    J'ai enlevé la déclaration des fonctions javascript utilisées pour les remettre dans xhr.js;
    et j'ai replacé xhr.js dans www/jscripts.

    Pas d'autres modifs, et maintenant le statut est 500 - internal Server Error. DOnc il doit trouver action_ajax.php?!

    Sinon, le serveur de dev est une distrib linux.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  10. #10
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Met tes projets dans un dossier mais pas directement dans www.

  11. #11
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    c'est le cas : c'est l'arborescence qui est ainsi :
    Serveur/NomProjet/www_NomProjet (et non www)
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  12. #12
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    UN grand merci à vous deux, et un très humble pardon ;
    j'ai trouvé l'erreur qui venait bien d'un include mal fait, la classe db dans action_ajax.php qui nécessitait l'include du fichier de conf (où est définit entre autre le nom de la bdd =>ah j'ai honte )
    Mais il a tout de même fallut que j'aille dans les logs du serveur, pour comprendre.
    Enfin, ça marche !

    @siddh: Très bon code en fait!
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

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

Discussions similaires

  1. MAJ table MySql avec composants
    Par Dudule89 dans le forum Delphi
    Réponses: 2
    Dernier message: 07/02/2018, 12h56
  2. [AJAX] Appel ajax pour lire une table Mysql
    Par theo17 dans le forum jQuery
    Réponses: 32
    Dernier message: 26/02/2013, 15h44
  3. Réponses: 2
    Dernier message: 09/11/2006, 09h59
  4. [AJAX] Retour chariot dans un textarea avec AJAX
    Par Death83 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/09/2006, 22h32
  5. Es-ce possible de créer une table MySQL avec MS Excel
    Par pierrot10 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/10/2005, 06h30

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