Rafraichissement après un INSERT

Petit nouveau ! | 9 Messages

26 mai 2008, 16:51

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

Mammouth du PHP | 1353 Messages

26 mai 2008, 16:54

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
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 9 Messages

26 mai 2008, 16:58

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

Mammouth du PHP | 514 Messages

26 mai 2008, 21:09

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 ?

Mammouth du PHP | 1353 Messages

27 mai 2008, 09:26

Comment sont appelés ces fichiers dans ton code ? dans quel ordre ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 9 Messages

27 mai 2008, 11:01

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
Modifié en dernier par Koumalo le 27 mai 2008, 14:43, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 mai 2008, 13:58

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.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 9 Messages

27 mai 2008, 14:42

Autant pour moi, je suis désolé.

Koum