Page 1 sur 1

Rafraichissement après un INSERT

Posté : 26 mai 2008, 16:51
par Koumalo
Bonjour à tous,

Je ne sais pas si c'est bien ici que je dois poster, mais comme je ne sais pas d'où vient l'erreur...
Voici de quoi il s'agit :
- J'ai un formulaire qui contient un objet select dont les données sont prises dans une table mysql via un script php. Là pas de problème.
- L'utilisateur à la possibilité d'ajouter des champs dans ce 'select' ce qui doit alimenter la table mysql. Ca aussi ça fonctionne.
- Ce qui ne fonctionne pas, c'est qu'après l'ajout de ce nouvel item, quand je relis la table avec mon script php, il ne me renvoie pas l'élément ajouté alors que cet élément est bien dans la table (vérifié sous phpMyAdmin). Ca ressemble à un problème de rafraichissement comme si la table était lue en mémoire et pas sur le site. Si je relance la page, là l'élément est bien pris en compte. Mais comme j'utilise AJAX, le rafraichissement n'est pas envisageable...

L'un de vous a-t'il une idée de l'erreur que j'ai dû faire ?

Je développe sur pc / IE7 & Firefox / EasyPHP / et ma base est chez un hébergeur

Merci d'avance pour vos réponses

Koum

Posté : 26 mai 2008, 16:54
par guilt92
Sans code cela va être difficile...

Il faut que ta seconde requete de SELECT soit elle aussi faite grâce à l'Ajax après l'insertion de la nouvelle valeur, c'est à peu près tout ce que je peux dire si tu ne montres pas tes appels... :p

Posté : 26 mai 2008, 16:58
par Koumalo
Voici le script qui charge les éléments du select :
<?php
  header('Content-type: text/html; charset=windows-1252'); // 
  /* -============================- <FONCTIONS> -============================- */
  function recherche() {
    $requete  = "SELECT * FROM b_genre ORDER BY `liste` ASC";
    $connexion = ouvrir_connexion();
    mysql_select_db(BDD,$connexion);
    $res = mysql_query($requete, $connexion);
    if ($res) {
      $nbr_lignes = mysql_num_rows($res);   
      if ($nbr_lignes > 0) {
        $ret = "";
        for($i=0; $i < $nbr_lignes; $i++){
          $ligne = mysql_fetch_row($res);   
          $ret .= $ligne[0];
          if($i < ($nbr_lignes - 1)){
            $ret .= "þ";
          }
        }
      } else {
        $ret = "Erreur " . mysql_error() . " - " . mysql_errno();
      }
    } else {
      $ret = "Erreur " . mysql_error() . " - " . mysql_errno();
    }
    mysql_close($connexion);
    return $ret;
  }
  /* -============================- <DEBUT DU SCRIPT> -============================- */
  require ("connexion_id.php");
  $rep = recherche();
  echo $rep;
?>
Et voici celui qui modifie la table :
<?php
  header('Content-type: text/html; charset=windows-1252'); // 
  /* -============================- <FONCTIONS> -============================- */
  function ajoute($ng,$nu) {
    $requete  = "INSERT INTO b_genre (liste,genre) VALUES ('$ng','$nu')";
    $connexion = ouvrir_connexion();
    mysql_select_db(BDD,$connexion);
    $res = mysql_query($requete, $connexion) ;
    if ($res) {
      $ret = "ok";
    } else {
      $ret = mysql_error() . " - " . mysql_errno();
    }
    mysql_close($connexion) ; // Fermeture de la connexion
    }
    return $ret;
  }
  /* -============================- <SCRIPT> -============================- */
  require ("connexion_id.php");
  $rep = array();
  $ret = array();
  $exp  = null;
  $num  = null;
  if ( isset( $_GET['newg'] ) && $_GET['newg'] != ""){
    $exp=$_GET['newg'];
  }
  if ( isset( $_GET['num'] )  && $_GET['num']  != ""){
    $num=$_GET['num'];
  }
  if($exp != null && $exp != null){
    $rep = ajoute($exp,$num);
    echo $rep;
  } else {
    echo "Prb para : newg=" . $exp . " - num=" .$num;
  }
?>
Et bien sûr tout est fait en ajax. Tout fonctionne sauf ce rafraichissement.

Merci pour ta réponse "éclair"

Koum

Posté : 26 mai 2008, 21:09
par mcorgnet
Je ne connais pas très bien AJAX, juste théoriquement, en fait, mais comme ça, par hasard, en relançant ta fonction après insertion dans ta base, ça ne va pas forcer AJAX à mettre à jour ?

Posté : 27 mai 2008, 09:26
par guilt92
Comment sont appelés ces fichiers dans ton code ? dans quel ordre ?

Posté : 27 mai 2008, 11:01
par Koumalo
Bonjour,

J'ai trouvé une solution, en fait le problème vient d'un mauvais rafraichissement du cache.
La solution consiste à ajouter un paramètre à l'appel du script php :

Depuis le javascript :
ajax.open('get', 'php/b_genre.php?d=' + (new Date()).getTime(), false);
j'ai donc ajouté [?d=' + (new Date()).getTime()] ce qui a l'air de forcer le rafraichissement.

Merci encore pour vos réponses.

Koum

Posté : 27 mai 2008, 13:58
par Ryle
Modération :
Koumalo, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

Posté : 27 mai 2008, 14:42
par Koumalo
Autant pour moi, je suis désolé.

Koum