problème avec session - ordre d'execution

justin_bug
Invité n'ayant pas de compte PHPfrance

23 déc. 2009, 12:07

Bonjour,
j'ai actuellement un souci avec un script et je ne sais pas d'où viens mon erreur.
Comme je l'explique sur le code, je tente de contourner un souci inhérent au navigateur.

J'ai un menu à 2 niveaux en jquery. Quand j'ouvre le menu et que je clique dessus, je souhaite garder mon menu ouvert au même endroit d'une page à une autre. Pour ce faire, j'envoie en formulaire (champ texte hidden) la position de mon menu, et j'utilise une fonction js pour réouvrir le menu comme il était sur la page d'avant. Tout ca fonctionne.
Il y a un problème inhérent au navigateur : quand on clique sur précédent, si la page précédente utilise des valeurs passées par formulaire, on a une alerte Firefox ou une page d'erreur IE. Comportement normal. Pour contourner cette erreur, j'utilise un script avec des sessions php. Je place ma variable passée en formulaire dans une variable de session puis je recharge ma page. Ca aussi ça fonctionne.

Mais, comme je ne souhaite pas conserver ma variable en session après l'avoir utilisée pour le menu déroulant (donc après l'avoir passée à ma fonction js), je souhaite la supprimer. Et là j'ai un problème : je perds ma variable de session avant de pouvoir l'utiliser !

J'ai utilisé unset et session_unregistered en fin de page pour supprimer ma variable mais j'ai l'impression que ça supprime la variable avant que je puisse l'utiliser.
En gros, dans l'ordre :
- je charge ma variable en session
- j'écris en php la valeur de ma variable de session dans le code js
- je supprime ma variable de session
Ca ne fonctionne pas. La variable n'existe déjà plus à la 2ème étape.
Une idée ?

Justin
<?php

  /********** 
  Problème inhérent au navigateur : quand on clique sur précédent, si la page précédente utilise 
  des valeurs passées par formulaire, on a une alerte Firefox ou une page d'erreur IE.
  Comportement normal.
  Pour résoudre ce problème, je travaille sur le script suivant :
  
  Entête de la page :
   
  je vérifie si j'ai une variable en $_POST
  - si c'est le cas, je la mets en $_SESSION et je redirige vers la même page
  - sinon j'affiche la page
   *********/
  
  session_start();

  if( isset($_POST['ci_onglet']) ) {
    $_SESSION['ci_onglet'] = $_POST['ci_onglet']; 
    $redirect = 'Location:'.$_SERVER['REQUEST_URI'];
    header($redirect);
  }
?>


<?php
  
  /********** 
  Dans le <header> de ma page html, j'appelle une fonction js qui initialise un menu déroulant jquery
  *********/
  
  if(isset($_SESSION['ci_onglet']))
  { ?>
  
  <SCRIPT language="Javascript">
     
    window.onload=function()   {
      setInitMenu("<?php echo '#onglet_'.$_SESSION['ci_onglet']; ?>");
    }
  
  </SCRIPT>
  
<?php } ?>


<?php

  /********
  EN fin de page, je souhaiterai détruire ma variable de session
  ********/
  
  if(isset($_SESSION['ci_onglet']))
  {
    session_unregister('ci_onglet');
    //unset($_SESSION['ci_onglet']);  <= j'ai tenté unset aussi
  }

?>

justin_bug
Invité n'ayant pas de compte PHPfrance

23 déc. 2009, 15:13

Ca y est c'est résolu... je viens de découvrir que malgré la fonction header, le code php de la page s'exécuter intégralement.
Avec un exit(), le problème est réglé.