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'];
}
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();
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'];
}
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
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
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.
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).