Variable de SESSION vide

Résolu
kosovar49 Messages postés 31 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 3 juillet 2012 - 23 déc. 2011 à 11:52
kosovar49 Messages postés 31 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 3 juillet 2012 - 27 déc. 2011 à 16:14
Bonjour,

Voilà déjà quelques heures que je suis sur mon problème et je ne trouve pas la solution, il me faut peu être un œil extérieur.
Alors j'ai un formulaire qui me permet de faire des filtres sur ma requête. Lorsque j’effectue ma recherche, le résultat s'affiche dans un tableau. Une fois le tableau affiché, je peux trié par ordre alphabétique en cliquant sur le titre d'un des champs du tableau. Voilà le problème, lorsque je clique pour trié, je perd tous mes filtres.
Donc je voulais mettre mes filtres dans des variables de SESSION, donc je lance ma recherche, mes filtres sont bien dans mes variables de SESSION, mais lorsque je tri, les variables de SESSION sont vides. Je ne vois pas où est le soucis. HELP ME PLEASE

Voici une partie de mon code :

if(!isset($_SESSION['filtre1'])){
$_SESSION['filtre1']="";
}
if(!isset($_SESSION['filtre2'])){
$_SESSION['filtre2']="";
}
if(!isset($_SESSION['tri'])){
$_SESSION['tri']="";
}


//On vérifie si les champs récupérer sont vides ou non
if ( isset($_POST["filtre1"]) || isset($_POST["filtre2"])|| isset($_GET["tri"])) {
if(isset($_GET["tri"])){
if (isset($_GET["tri"])){
$_SESSION['tri']=sqlsrv_real_escape_string($_GET["tri"]);
}
}
else{
if (isset($_POST["filtre1"])){
$_SESSION['filtre1']=sqlsrv_real_escape_string($_POST["filtre1"]);
}
if (isset($_POST["filtre2"])){
$_SESSION['filtre2']=sqlsrv_real_escape_string($_POST["filtre2"]);
}
}
        if(isset($_SESSION['filtre1'])){
$filtre1=$_SESSION['filtre1'];
}
if(isset($_SESSION['filtre2'])){
$filtre2=$_SESSION['filtre2'];
}
if(isset($_SESSION['tri'])){
$tri = $_SESSION['tri'];
}


Merci de votre aide.

8 réponses

alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
27 déc. 2011 à 14:46
J'ai bien compris le problème. De plus, le fais que tu utilises des requêtes ajax me confirme dans mon idée de départ...

Il y a, à mon sens, une énorme différence entre le fait d'exécuter ces deux morceaux de code
Ce que tu fais:
<?php
  echo $_SESSION['filtreX']
?>


Ce que je t'ai demandé de faire
<?php
  echo '';
  print_r($_SESSION);
  echo '

';
?>


Dans ton cas tu peux uniquement déduire que la valeur associé à l'index 'filtreX' du tableau global '_SESSION' ne contient rien. (ou contient vide) C'est à dire que:
- Soit tu as remplacé la valeur existante par vide.
- Soit la session est perdue et tu n'as plus rien dans ton tableau.
- etc...

Dans mon cas on pourrait suivre l'évolution de ta session, pour en apercevoir des changements suspect et ainsi cibler une partie plus restreinte de ton code.

Bref... Revenons au sujet...

A mon humble avis, la meilleur solution pour corriger le problème et d'initialiser ta SESSION avec une valeur définit ( $_SESSION['date'] = date();).
Ensuite de regarder si cette valeur est toujours présente dans la SESSION dans ton scénario de test, en affichant l'état de ton tableau SESSION à chaque fois que tu utilise la fonction session_start();

<?php
  session_start();
  echo 'DEBUT DE REQUETE SESSION:
';
  echo '';
  print_r($_SESSION);
  echo '

';
?>


Je pense que cette méthode peut rapidement nous aider à résoudre une erreur inattention, ou au moins à cibler le problème.
3
flasher_13 Messages postés 55 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 2 avril 2012
23 déc. 2011 à 22:31
Bonjour kosovar,

je pense que ton problème est un problème de logique. En effet en imaginant un scénario on se rend compte qu'il n'y a aucun bug mais que ton code fait exactement ce que tu as écrit. De plus avant de rentrer dans ta boucle de test si les variables de SESSION n'existent pas tu les crées mais elles sont vides. Donc tes variables ne marche qu'une seule fois car après tu les vides.

Essaie avec ceci:

if(!isset($_SESSION['filtre1'])){
$_SESSION['filtre1']="";
}
if(!isset($_SESSION['filtre2'])){
$_SESSION['filtre2']="";
}
if(!isset($_SESSION['tri'])){
$_SESSION['tri']="";
}


//On vérifie si les champs récupérer sont vides ou non
if(isset($_GET["tri"])){
$_SESSION['tri']=sqlsrv_real_escape_string($_GET["tri"]);
}
else if ((isset($_POST["filtre1"]) && !empty($_POST["filtre1"])) || (isset($_POST["filtre2"]) && !empty($_POST["filtre2"])))
{
if (isset($_POST["filtre1"])){
$_SESSION['filtre1']=sqlsrv_real_escape_string($_POST["filtre1"]);
}
if (isset($_POST["filtre2"])){
$_SESSION['filtre2']=sqlsrv_real_escape_string($_POST["filtre2"]);
}
}
    
if(isset($_SESSION['filtre1']) && !empty($_SESSION["filtre1"])){
$filtre1=$_SESSION['filtre1'];
}
if(isset($_SESSION['filtre2']) && !empty($_SESSION["filtre2"])){
$filtre2=$_SESSION['filtre2'];
}
if(isset($_SESSION['tri'])){
$tri = $_SESSION['tri'];
}

0
kosovar49 Messages postés 31 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 3 juillet 2012
26 déc. 2011 à 09:33
Bonjour flasher_13,

Tout d'abord merci de ta réponse.
Alors j'ai essayé ce que tu m'as dis mais cela ne fonctionne toujours pas. Ma variable de SESSION filtre est toujours vide lorsque je fais un tri.

...
...
...
if(isset($_SESSION['filtre1']) && !empty($_SESSION["filtre1"])){
$filtre1=$_SESSION['filtre1'];
}
if(isset($_SESSION['filtre2']) && !empty($_SESSION["filtre2"])){
$filtre2=$_SESSION['filtre2'];
}
if(isset($_SESSION['tri'])){
$tri = $_SESSION['tri'];
}
echo $_SESSION['filtre1']; //1er passage : affiche le filtre lorsque l'on a validé le formulaire de filtre
                           //2e passage : affiche rien lorsque je demande un tri sur un champs
0
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
27 déc. 2011 à 11:42
Bonjour,

Tu as pensé à ajouter au début de ton code?

<?php
session_start();
//...
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kosovar49 Messages postés 31 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 3 juillet 2012
27 déc. 2011 à 11:48
Bonjour alexflex,

Oui oui je l'ai mis.
0
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
27 déc. 2011 à 12:08
Moi j'ajouterais une ligne du type

require_once('DEBSession.php');

au debut de toutes mes pages (toutes, il ne faut pas oublier les pages des formulaires...)

<?php
  session_start();
  echo 'DEBUT DE REQUETE SESSION:
';
  echo '';
  print_r($_SESSION);
  echo '

';
?>


et une autre à la fin de chaque page (même remarque)

<?php
  echo 'FIN DE REQUETE SESSION:
';
  echo '';
  print_r($_SESSION);
  echo '

';
?>


De cette façon nous pourrons déterminer à quel moment ta session se vide.
0
kosovar49 Messages postés 31 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 3 juillet 2012
27 déc. 2011 à 12:57
En faite par rapport au tout début j'ai un peu changé le fonctionnement de mon formulaire mais le problème reste le même.
Maintenant j'utilise xajax donc à chaque fois que je change quelque chose dans mon formulaire cela recharge que la div qui contient le résultat.

J'avais déjà essayé d'afficher le contenu de mes variables de SESSION, mais le résultat ne me semble pas logique.
Donc quand je change une donnée dans mon formulaire, cela va faire appel à une fonction qui va recharger ma div. Dans cette fonction j'affiche au début et à la fin la variable de SESSION['filtre1']. Pour le premier passage cela fonctionne parfaitement, mais lorsque je rentre un deuxième filtre (sa variable est $_SESSION['filtre2']) dans mon formulaire, donc on repasse une fois de plus dans la fonction mais cette fois, lors de l'affichage de la variable de SESSION du filtre 1 le résultat est vide.

Je vais redire la façon dont j'ai procédé. Lorsque j'arrive sur la page, si mes variables de session sont vides je l'ai initialise
if(!isset($_SESSION['numPage'])){
$_SESSION['numPage'] ="";	
}


ensuite j'arrive dans ma fonction, si le 1er filtre reçu en paramètre est non vide alors je l'a met dans une variable de session.
De même pour le 2e passage avec le 2e filtre.

if($filtre1!= ""){
$_SESSION['filtre1']=$filtre1;
}


Voilà, je ne vois pas ce qui cloche car normalement je ne suis pas censé perdre ce que j'ai mis dans ma variable de session.

J'espère avoir été clair et je te remercie de l'intention que tu portes à mon problème .
0
kosovar49 Messages postés 31 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 3 juillet 2012
27 déc. 2011 à 16:14
C'est bon j'ai trouvé, et j'en ai conclu que je suis trop c..

C'est tout bête, en faite j'ai créé une page "entete.php" où j'ouvrais "session_start()", dans mon fichier "formulaire.php", j’incluais bien l'entête mais après ma fonction, donc du coup quand j'appelais ma fonction, c'était comme si je n'avais pas ouvert de session. -_-. Du coup j'ai déplacé ma fonction dans le fichier "entête.php" avec toutes les fonctions xajax et pour l'instant ça a l'air de marché (oui je n'ai pas tous testé mais l'essentiel fonctionne).

Bon ba merci bien en tout cas.

Bonne fin de journée.
0
Rejoignez-nous