PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 26-12-2009 23:30:50

Ralph303
Membre
Lieu : St-Cyr l'Ecole
Inscription : 30-05-2009
Messages : 98
Site Web

Bug trivial avec variable de session

Bonjour,

j'ai un bug du style "c'est un bug du compilateur !"... (C'est ce que je disais qd j'étais étudiant).
Non, en fait, il y a un truc qui m'échappe:

Je voudrais utiliser les cookies pour que lorsque l'utilisateur coche la case "Se souvenir de moi", le site le reconnaisse et le logge direct
sans avoir à taper son pseudo et son mot de passe. Et lorsque la case est décochée, ça efface le cookie.
C'est donc un cookie qui s'appelle "pseudo" et qui a pour valeur le pseudo.

dans index.php, j'ai:


<?php
  // Déclaration des variables de session
  session_start();
  $_SESSION['souvenir']=false;
?>
 

Et, plus loin, le formulaire d'authentification et la case à cocher gérée en JavaScript:


<form action="login.php" method="post">
     <input type="text" name="pseudo" value="pseudo" style="{color:#999999; font-style:italic;}" onFocus="focusPseudo(this);" onBlur="blurPseudo(this);">
     <input type="password" name="password" value="mot de passe" style="{color:#999999; font-style:italic;}" onFocus="focusPasswd(this);" onBlur="blurPasswd(this);">
     <input type="submit" value="Entrer">
</form>
<div id="membres_remember">
     Se souvenir de moi
</div>
<div id="membres_remember_form">
     <form name="remember" action="" method="post">
          <input type="checkbox" name="souvenir" value="1" onclick="se_souvenir()">
     </form>
     <script type="text/javascript">
          function se_souvenir() {
               if(document.remember.souvenir.checked) {
                    // On se souviendra du pseudo
                    <?php
                         $_SESSION['souvenir']=true;
                    ?>
                    alert("<?php echo $_SESSION['souvenir']; ?>");
               }
               else {
                     // On ne se souviendra pas du pseudo
                    <?php
                         $_SESSION['souvenir']=false;
                    ?>
                    alert("<?php echo $_SESSION['souvenir']; ?>");
               }
          }
     </script>
</div>
 

Donc, normalement, dans login.php, la variable de session $_SESSION['souvenir'] contient false si la case n'a pas été cochée et true sinon.
D'autant plus que les alert("<?php echo $_SESSION['souvenir']; ?>"); que j'ai mis dans la fonction se_souvenir() affiche bien 1 lorsque la case
est cochée.

Là où ça ne marche pas, c'est dans login.php appelé par le formulaire d'authentification:


<?php
  session_start();
  if($_SESSION['souvenir']) {
    setcookie("pseudo", $_POST['pseudo'], time()+3600*24*30);
    echo "On s'en souvient";
  }
  else {
    setcookie("pseudo");
    echo "On ne s'en souvient pas";
  }
?>
 

Le bug, c'est que ça m'affiche toujours "On ne s'en souviens pas"... $_SESSION['souvenir'] contient donc toujours false.
Que je ne coche pas, que je coche, que je coche puis décoche, enfin, tous le temps, ça m'affiche "On ne s'en souviens pas".

Alors, j'ai essayé de mettre une chaine de caractères dans $_SESSION['souvenir'] puis de l'afficher, ça m'affiche toujours "false" ou "faux" ou
ce que je met dans cette variable de session dans le cas où la case n'est pas cochée dans ma fonction se_souvenir()...

Alors que si je met un alert dans le cas ou elle est cochée, ça m'affiche bien l'alert.

Je ne comprend pas pourquoi ça ne marche pas.
Merci pour votre aide !

Ralph303

Dernière modification par Ralph303 (27-12-2009 00:12:03)

Hors ligne

#2 27-12-2009 00:37:46

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Bug trivial avec variable de session

Tout simplement que le javascript est côté client et le PHP côté serveur.

La dernière valeur que tu enregistres dans $_SESSION['souvenir'] est false.
Le javascript n'exécute pas de PHP (sauf si on parle d'ajax mais ce n'est pas ton cas) donc il remplace tes codes.

<script type="text/javascript">
          function se_souvenir() {
               if(document.remember.souvenir.checked) {
                    // On se souviendra du pseudo
                    <?php
                         $_SESSION['souvenir']=true;
                    ?>
                    alert("<?php echo $_SESSION['souvenir']; ?>");
               }
               else {
                     // On ne se souviendra pas du pseudo
                    <?php
                         $_SESSION['souvenir']=false;
                    ?>
                    alert("<?php echo $_SESSION['souvenir']; ?>");
               }
          }
     </script>

devient donc :

<script type="text/javascript">
          function se_souvenir() {
               if(document.remember.souvenir.checked) {
                    // On se souviendra du pseudo
                    alert("true");
               }
               else {
                     // On ne se souviendra pas du pseudo
                    alert("false");
               }
          }
     </script>
<?php
  $_SESSION['souvenir']=false; //En gros la dernière écriture faite par ton code, les autres (passage à true) sont écrasées
?>

Bref tu utilises mal le javascript (ou le php c'est toi qui vois).

Hors ligne

#3 27-12-2009 11:03:01

Ralph303
Membre
Lieu : St-Cyr l'Ecole
Inscription : 30-05-2009
Messages : 98
Site Web

Re : Bug trivial avec variable de session

Ah d'accord xTG !

Merci pour cette précision ! smile

Je vais réfléchir à une autre manière de procéder...

Ralph303

Hors ligne

#4 27-12-2009 11:37:57

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Bug trivial avec variable de session

C'est assez simple, il te suffit dans ton login.php de vérifier la valeur de ton checkbox souvenir plutôt que la variable de session. smile

Hors ligne

#5 27-12-2009 13:57:54

Ralph303
Membre
Lieu : St-Cyr l'Ecole
Inscription : 30-05-2009
Messages : 98
Site Web

Re : Bug trivial avec variable de session

Oui, effectivement, j'ai mis la checkbox dans mon formulaire d'authentification et je teste $_POST['souvenir'] dans login.php tout simplement.
Comme j'ai fais pas mal de JavaScript avec Ajax dans un autre formulaire, j'ai tendance à vouloir tout faire en JavaScript et à compliquer les
choses en fin de compte...

Merci encore, xTG ! smile

Ralph303

Hors ligne

Pied de page des forums