Internet Explorer et variables de sessions

Nalm Messages postés 11 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 20 mai 2010 - 27 avril 2010 à 13:53
Nalm Messages postés 11 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 20 mai 2010 - 28 avril 2010 à 09:31
Bonjour,

J'ai un site en php / mySQL, un formulaire permet de créer des requêtes que je stock sous forme de "filtres".
Ces filtres peuvent être actifs ou inactifs, leur statut est stocké dans:

$_SESSION['filtres'][$NumFiltre]["filtreActif"]

qui vaut 1 ou 0.

Je veux qu'on puisse activer et désactiver ces filtres par un bouton propre à chaque filtre.
chaque bouton agit comme suit:

onClick='this.form.actDesact.value = "".$NumFiltres.""; this.form.submit();

ensuite, au submit(), le filtre doit se (dés)activer grâce à:

$g = $_POST["actDesact"];

if($_SESSION['filtres'][$g]]["filtreActif"] == 1) ){
$_SESSION['filtres'][$g]["filtreActif"] = 0;
}
if($_SESSION['filtres'][$g]]["filtreActif"] == 0) ){
$_SESSION['filtres'][$g]["filtreActif"] = 1;
}



Cela marche parfaitement sous firefox.
Le soucis c'est qu'internet explorer se comporte d'une manière qui m'échappe complétement.

Pour mieux comprendre, j'ai mis:

print_r($_SESSION['filtres'][1]["filtreActif"]);


avant et après le if qui décide d'activer ou non.

Si je ne clique pas sur le bouton, comme de base le filtre est actif, j'obtiens 1 puis 1 ce qui est logique.
Si par contre je clic sur le bouton, j'obtiens 0 avant le traitement (c'est à dire que le filtre est désactivé avant même le if)
puis 1 après parce qu'il semble réactiver le filtre le croyant désactivé...

Le plus étrange est que si je clic sur le bouton pour désactiver le filtre (donc le filtre reste activé) mais que je rafraîchis manuellement la page, alors le filtre se désactive "normalement", les print_r donnent 1 puis 0 ....

C'est absurde mais peut être n'ai-je pas compris comment fonctionnent les variables de sessions sous IE...

Si vous avez une piste, merci beaucoup beaucoup de m'aider.

5 réponses

Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
27 avril 2010 à 14:23
Variable de session = variables sur le serveur.

Sa viens pas des sessions puisque étant sur le serveur, elle ne dépendent pas du navigateur.


_________________________________
Min iPomme
0
Nalm Messages postés 11 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 20 mai 2010
27 avril 2010 à 14:32
Je comprends bien que les variables de sessions sont sur le serveur mais le fait est que ça marche parfaitement avec firefox et pas du tout avec IE donc je comprends pas ce qui peut clocher...
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
27 avril 2010 à 15:29
Le problème viens du fait que tu fais deux if au lieu d'un elseif. Je pense qu'il est le même avec firefox :

Imaginons $_SESSION['filtres'][$g]]["filtreActif"] = 0

<?php
if($_SESSION['filtres'][$g]]["filtreActif"] == 1) ){
   $_SESSION['filtres'][$g]["filtreActif"] = 0;
}
// La il est donc encore égale a 0 du coup tu entre dans le if
if($_SESSION['filtres'][$g]]["filtreActif"] == 0) ){
$_SESSION['filtres'][$g]["filtreActif"] = 1;
}
?>

La c'est Ok.

Maintenant $_SESSION['filtres'][$g]]["filtreActif"] = 1
<?php
// La il é égal a 1 donc tu entre dans le if et tu le met à 0
if($_SESSION['filtres'][$g]]["filtreActif"] == 1) ){
   $_SESSION['filtres'][$g]["filtreActif"] = 0;
}
// La il est donc égale a 0 puisque tu es passé dans le premier if
// du coup tu entre dans le 2eme... héhéhé
if($_SESSION['filtres'][$g]]["filtreActif"] == 0) ){
$_SESSION['filtres'][$g]["filtreActif"] = 1;
}
?>


Solution :
<?php
// La il é égal a 1 donc tu entre dans le if et tu le met à 0 et tu sort après le else...
if($_SESSION['filtres'][$g]]["filtreActif"] == 1) )
{
   $_SESSION['filtres'][$g]["filtreActif"] = 0;
}
elseif($_SESSION['filtres'][$g]]["filtreActif"] == 0) )
{
    $_SESSION['filtres'][$g]["filtreActif"] = 1;
}
?>



_________________________________
Min iPomme
0
Nalm Messages postés 11 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 20 mai 2010
27 avril 2010 à 16:12
Merci beaucoup pour la réponse! Malheureusement, et je suis vraiment vraiment désolé, je m'étais juste planté en réécrivant mon code pour essayer d'en simplifier la compréhension...

En fait mon code ça donne:

<?php
if(isset($_POST["actDesact"])){
$g = $_POST["actDesact"];

if(( $_POST["actDesact"] != "0") && ($_SESSION['filtres'][$g]["filtreActif"] == 1) ){

$_SESSION['filtres'][$g]["filtreActif"] = 0;

}elseif(( $_POST["actDesact"] != "0") && ($_SESSION['filtres'][$g]["filtreActif"] == 0) ){
$_SESSION['filtres'][$g]["filtreActif"] = 1 ;
}
}
?>


Et vraiment ça marche parfaitement sous firefox.

Je vais essayer de préciser un peu où j'en suis arrivé de mes déduction:
On dirait que IE fais deux fois ce script, quand il voit que filtreactif va changer de valeur, il change la valeur immédiatement puis il reparcourt le code normalement (ce qui dans mon cas aboutit à annuler la première action)...
Pour voir s'il fait bien ça, j'ai mis un compteur dans $_SESSION['filtres'][$g] qui s'incrémente quand filtreactif est modifié (vers 1 ou vers 0) mais ce compteur ne m'indique qu'un seul changement...
print_r met en évidence 2 changements alors que mon compteur n'en voit qu'une... C'est vraiment très très étrange...

Merci encore d'avoir regardé, en espérant qu'il te reste un peu courage :)
0

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

Posez votre question
Nalm Messages postés 11 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 20 mai 2010
28 avril 2010 à 09:31
Personne n'est inspiré?
Je jète tous les ordis avec Internet Explorer?
0
Rejoignez-nous