[PHP] problème de séquence de traitement

Petit nouveau ! | 9 Messages

29 août 2006, 15:35

dans la suite de mon post concernant les variables.

j'ai une page fct.php avec des functions
- declaration de variables de session
- connection B.D.
- requete SQL qui remplissent les var de sess
- ...

j'ai une page Graphe.php qui appelle les fonctions et génère un graph (avec les php Artichow)

J'ai une page main.php qui doit afficher le graph et des var de sessions renseignés par les requetes SQL du graph.

/* main.php */

DCL_VarSession()         // Fonction de déclaration des var de session

echo "<img src=\"Graphe.php\"/> ";    

echo "Total: ".$_SESSION["total"];     
        // le remplissage se fait via la 'function charge()'  
        //  appelé par Graphe.php




/* charge() */
function charge()
{
    //ensemble de requete SQL  LONGUES en temps
    $_SESSION["total"] = resu requete;
}



/* Graphe.php */

charge();
$graph.draw

PROBLEME :
il m'affiche $_SESSION["total"] avant d'avoir terminé d'executé la function charge().

Comment faire pour éviter ce phénomène ?

Merci
Modifié en dernier par jdavid le 29 août 2006, 15:43, modifié 2 fois.

Mammouth du PHP | 19672 Messages

29 août 2006, 15:38

Le code est lu par l'interpréteur comme on lit un livre : du haut à gauche jusqu'en bas à droite et le code est exécuté au fur et à mesure. Mets ta fonction charge() en début de code et refais l'essai.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

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

29 août 2006, 15:41

Mets ta fonction charge() en début de code et refais l'essai.
Juste une petite précision (ben ouais, je me suis fait grillé de quelques secondes sur la réponse, alors histoire de dire quelque chose quand même ;)) C'est surtout l'appel à la fonction, et donc l'alimentation de ta variable de session qui doit être réalisé avant que tu ne demandes son affichage.. :)

Petit nouveau ! | 9 Messages

29 août 2006, 16:16

dans la chronologie elle est déjà devant, charge() est appelée par Graphe.php qui est avant l'affichage de la variable.

Par contre ce code est intégré dans du HTML :
/* main.php */ 

   <?php  DCL_VarSession()     ?>
 
   .......

   <div id="contenu_graph">
      <?php       echo "<img src=\"Graphe.php\"/> <br>";  ?>              
   </div>

   <div id="contenu_chiffre">
         <table>        
              <tr>                                  
                   <td>
                      <?php echo "Total: ".$_SESSION["total"];     ?>
                   </td>
    ..........              

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

29 août 2006, 16:24

(ah ben j'avais pas compris ca comme ça.. je croyais que c'était un seul fichier.. comme quoi des fois c'est bien de lire les commentaires ;))

Ton problème vient du fait que ton appel a graph.php se fait via l'affichage d'une image et non pas depuis ton code php. Le navigateur fait cet appel après que la page html ait été générée et envoyée à l'utilisateur, d'où le fait que la valeur que tu affiches ne soit pas a jour puisqu'elle n'est modifiée qu'ensuite :)