11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Voici mon problème:
J'ai un tableau dans lequel ce trouve le contenu d'une table de ma BDD ( pour faire simple "id , code , nom" ) l'id n'est pas affiché dans le tableau.

Pour modifier un enregistrement de ma base j'ai utilisé la méthode Ajax.InPlaceEditor() du framework "scriptaculous" qui remplace la case de mon tableau à modifier en champs texte. (Jusque là pas de problème).

Le problème est que je ne vois pas comment passer l'id à mon script qui est appelé par la méthode InPlaceEditor() pour exécuter la requête Update.

Merci pour votre aide.
Guyle

ps: Si vous voulez une partie de mon code je le mettrai sur le prochain post
Modifié par Guyle54 (03 Jun 2008 - 09:45)
Pourquoi utiliser scriptaculous ?

Une fonction Javascript, prenant comme paramètres id,code et nom peut être utilisée pour envoyer des données (par la métode GET ou POST) au script PHP. L'avantage étant une plus grande flexibilité que pour InPlaceEditor().

Fonction Javascript appelant le script PHP et réécrivant la page dynamiquement

function miseAJour(id,code,nom) {

        var http_request = null;

        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Impossible de créer une instance XMLHTTP');
            return false;
        }
        var data=null;

// ----- *** Préparation de l'envoi des valeurs *** -----
        data="id="+id+"&code="+code+"&nom="+nom;
        
        http_request.onreadystatechange = function() { 
          if(http_request.readyState == 4) {
            if(http_request.status == 200) {
              
// ----- *** Traitement des données renvoyées par le script PHP au format XML *** -----

              // Récupération des valeurs contenues dans le fichier XML
              var xmldoc=http_request.responseXML;
              var newValues=xmldoc.getElementsByTagName('newvalues').item(0);
              var id=newValues.getElementsByTagName('id').item(0).firstChild.data;
              var code=newValues.getElementsByTagName('code').item(0).firstChild.data;
              var nom=newValues.getElementsByTagName('nom').item(0).firstChild.data;
              
              // Modification dynamique des éléments XHTML contenant les valeurs (par exemple)
              document.getElementById('id').innerHTML=id;
              document.getElementById('code').innerHTML=code;
              document.getElementById('nom').innerHTML=nom;
            }
          }
        };    
        http_request.open('POST','ajax_miseAJour.php',true);
        http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        http_request.send(data);

}


Script PHP gérant la mise à jour dans la base de données et renvoyant les valeurs modifiées

<?php

    // !!! Les headers doivent impérativement figurer au début du code
    header("Pragma: no-cache");
    header("Expires: 0");
    header("Last-Modified: ".gmdate("D, d M Y H:i ")." GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Content-type: application/xml");
    
    if(isset($_POST["id"]) && isset($_POST["code"]) && isset($_POST["nom"])) {
        $id=$_POST["id"];
        $code=$_POST["code"];
        $nom=$_POST["nom"];
    }
    else {
        // ...
    }

    /* [...] partie mise à jour de la base de données [...] */

    // Ecriture du fichier XML à transmettre à la fonction Javascript
    echo "<?xml version='1.0' encoding='iso-8859-1' ?>\n";
    echo "<newvalues>\n";
    echo "<id>".$id."</id>\n";
    echo "<code>".$code."</code>\n";
    echo "<nom>".$nom."</nom>\n";
    echo "</newvalues>\n";
?>

Modifié par kalipka (02 Jun 2008 - 17:10)
Merci pour ton aide mais finalement j'ai trouvé comment récupérer mon id je le passe en paramètre à mon script lors de son appel (script.php?id=$id).
Donc l'id est passé par la méthode GET et la variable a modifier par la méthode POST (c'est sale mais ça marche ....)