• [^] # Re: ca m'interesse mais avec mysql

    Posté par . En réponse à la dépêche EditableGrid, des nouvelles du projet. Évalué à 3. Dernière modification le 25 avril 2012 à 10:35.

    Donc quand tu dis "il ne fait pas le rafraichissement de l'affichage", je me demande si ce n'est pas plutôt l'ancienne valeur qui est remise à cause d'une mauvaise réponse du PHP.

    Merci Louis, oui c'est exactement ca, faut dire que j'ai quand meme fait un violent copier/coller de l'exemple, mais que j'ai pas encore compris comment mon PHP doit dire à javascript que la reponse est OK.

    ce qui change dans le code javascript de demo.js (copier/coller de l'exemple)

     // register the function that will handle model changes
     modelChanged = function(rowIndex, columnIndex, oldValue, newValue, row) {
     displayMessage("Value for '" + this.getColumnName(columnIndex) + "' in row " + this.getRowId(rowIndex) + " has changed from '" + oldValue + "' to '" + newValue + "'");
     if (this.getColumnName(columnIndex) == "continent") this.setValueAt(rowIndex, this.getColumnIndex("country"), ""); // if we changed the continent, reset the country
     this.renderCharts();
     };
    
    

    DEVIENT ==>>

     // register the function that will handle model changes
     modelChanged = function(rowIndex, columnIndex, oldValue, newValue, row) {
    // --- Start of modification to add ajax mysql script
     $.ajax({
     url: "update_grid_cell.php",
     type: 'POST',
     dataType: "text",
     data: {
     id: editableGrid.getRowId(rowIndex),
     column: columnIndex,
     value: newValue
     },
     success: function (response) {
     // reset old value if failed
     if (response != "ok") editableGrid.setValueAt(rowIndex, columnIndex, oldValue);
     // here you could also highlight the updated row to give the user some feedback
     },
     error: function(XMLHttpRequest, textStatus, exception) {
     alert(XMLHttpRequest.responseText);
     }
     });
    //--- end of modification
     displayMessage("Value for '" + this.getColumnName(columnIndex) + "' in row " + this.getRowId(rowIndex) + " has changed from '" + oldValue + "' to '" + newValue + "'");
    if (this.getColumnName(columnIndex) == "continent") this.setValueAt(rowIndex, this.getColumnIndex("country"), ""); // if we changed the continent, reset the country
    this.renderCharts();
     };
    
    

    et mon code PHP est le suivant :

    // le code au dessus prepare une requete de mise à jour avec les données precedemment transmise, et je teste le retour de la requete pour tenter de transmettre une info à javascript
    $res=$bdd->exec($req);
    if($res === FALSE)
    {
    die('erreur dans la requete');
    }
    else if($res === 0)
    {
     return "nok";
    }
    else
    {
     return "ok";
    }
    
    

    peut-etre faut-il que je mette du code javascript dans mon php pour modifier la variable "response" qui sera utilisée dans demo.js ?

    ah, et une autre remarque, qui peut etre une piste d'amelioration, c'est dommage de devoir coder les colonnes en dur dans le javascript alors qu'il pourrait le lire depuis le xml

    ex : je ne veux pas des colonnes age/height dans mon site,
    je ne les mets pas dans le xml
    mais je dois modifier le javascript pour ne plus avoir d'erreur
    alors qu'on devrait pouvoir parser le xml pour calculer les colonnes et les valeurs des champs par defaut (liste de reponse)