Variable de SESSION vide [Résolu]

Messages postés
31
Date d'inscription
jeudi 12 mars 2009
Dernière intervention
3 juillet 2012
- 23 déc. 2011 à 11:52 - Dernière réponse :
Messages postés
31
Date d'inscription
jeudi 12 mars 2009
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.
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
106
Date d'inscription
vendredi 29 septembre 2006
Dernière intervention
6 mars 2012
- 27 déc. 2011 à 14:46
3
Merci
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.

Merci alexflex25 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de alexflex25
Messages postés
55
Date d'inscription
mercredi 2 février 2005
Dernière intervention
2 avril 2012
- 23 déc. 2011 à 22:31
0
Merci
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'];
}

Commenter la réponse de flasher_13
Messages postés
31
Date d'inscription
jeudi 12 mars 2009
Dernière intervention
3 juillet 2012
- 26 déc. 2011 à 09:33
0
Merci
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
Commenter la réponse de kosovar49
Messages postés
106
Date d'inscription
vendredi 29 septembre 2006
Dernière intervention
6 mars 2012
- 27 déc. 2011 à 11:42
0
Merci
Bonjour,

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

<?php
session_start();
//...
?>
Commenter la réponse de alexflex25
Messages postés
31
Date d'inscription
jeudi 12 mars 2009
Dernière intervention
3 juillet 2012
- 27 déc. 2011 à 11:48
0
Merci
Bonjour alexflex,

Oui oui je l'ai mis.
Commenter la réponse de kosovar49
Messages postés
106
Date d'inscription
vendredi 29 septembre 2006
Dernière intervention
6 mars 2012
- 27 déc. 2011 à 12:08
0
Merci
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.
Commenter la réponse de alexflex25
Messages postés
31
Date d'inscription
jeudi 12 mars 2009
Dernière intervention
3 juillet 2012
- 27 déc. 2011 à 12:57
0
Merci
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 .
Commenter la réponse de kosovar49
Messages postés
31
Date d'inscription
jeudi 12 mars 2009
Dernière intervention
3 juillet 2012
- 27 déc. 2011 à 16:14
0
Merci
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.
Commenter la réponse de kosovar49

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.