Problème avec 1 variable de session sur 2

Résolu/Fermé
caligan Messages postés 6 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 28 janvier 2009 - 10 août 2007 à 14:14
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 - 12 août 2007 à 16:22
Bonjour à tous,

Sur mon site, j'utilise les sessions pour l'accès membre. Tout marche très bien, je n'en reviens pas moi même, sauf pour la page où l'utilisateur peut modifier ses informations. Je vous explique le processus :

Sur une première page, j'affiche les informations personnelles contenu dans ma bdd grâce à 2 variables de sessions (login et mot de passe) et un lien qui envoie sur une 2ème page pour les modifier via un formulaire.
Une fois validé ce formulaire, celui-ci est traité sur la même page :

Je mets à jour ma bdd, je recrée les variables de sessions avec le même nom mais contenant les nouvelles valeurs, puis je redirige vers la première page où devraient s'afficher les nouvelles données.

Voici un bout de code (je n'ai pas mis les session_start() mais ils sont bien au début de chaque page):

page1.php :

<?php
$login=$_SESSION['login'];
$password=$_SESSION['password'];
mysql_connect("localhost", "site", "code");
mysql_select_db("bdd");
$reponse = mysql_query("SELECT * FROM table WHERE login='$login' AND mdp='$password'");
$donnees = mysql_fetch_array($reponse);

$id=$donnees['id'];
echo stripslashes($donnees['login']);
echo stripslashes($donnees['mdp']);?>
<a href="page2.php?id=<?php echo $id;?>">Modifier</a>

page 2.php :

<?php $id=$_GET['id'];?>

Formulaire :

<form method="post" action="page2.php">
Votre pseudo : <input type="text" name="login" id="login" />
Votre mot de passe : <input type="text" name="password" id="password"/>

Traitement du formulaire :
<?php
$login = htmlentities(mysql_escape_string($_POST['login']));
$password = htmlentities(mysql_escape_string($_POST['password']));
mysql_query("UPDATE table SET login='$login', mdp='$password' WHERE id='$id'");
mysql_close();
$_SESSION['login']=$login;
$_SESSION['password']=$password;
header("location: http://page1.php");
}
?>

Le problème est que sur les 2 variables de sessions recréées, seule une contient bien sa nouvelle valeur et l'autre n'existe carrément plus ! Du coup rien ne s'affiche sur la page 1 et l'utilisateur doit se reconnecter. Si sur la page2.php j'affiche les variables de sessions au lieu de faire un header, elles s'affichent toutes les deux, mais une fois redirigé seule $_SESSION['password'] existe.
Je ne comprends pas pourquoi seule une variable subsiste alors que les 2 ont été créées selon le même procédé ? (la bdd est bien mise à jour).

Si quelqu'un comprend, je veux bien un coup de main car je n'aurais bientôt plus de cheveux sur mon crâne...
(désolé pour la longueur)
Merci d'avance

5 réponses

Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 227
10 août 2007 à 20:32
Salut,

Question toute bête : tu fais bien un session_start() quelque part dans ton code ?

PS : Je sais bien que tu es en phase de tets avec ton code mais un champ password devrait être de type "pawword" et non "text" ;-)
0
caligan Messages postés 6 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 28 janvier 2009
11 août 2007 à 09:48
Salut et déjà merci de me répondre,

Je fais un session_start() au début de chaque page, donc de la page1 et page2. Faut il en remettre un avant de redéfinir les variables ? J'ai aussi un session_destroy(), ça ne fait rien.

Le truc bizzarre c'est qu'une fois que j'ai redonné de nouvelles valeurs aux variables de sessions (sur la page2) et que je fais un echo, les 2 variables ont les bonnes valeurs, et une fois revenu sur la page1, il y en a une qui a sauté. Mystère ??

Merci pour le champs password je vais changer ça tout de suite
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 227
11 août 2007 à 13:13
Oups désolé j'ai posé une question inutile, j'ai zappé la lecture de la dernière ligne avant le début du code :$

En réalité je me perds dans ton code. Si ça se trouve ton problème se situe ailleurs, tu écris peut-être mal le nom d'une variable et comme le PHP est un langage qui n'oblige pas à déclarer les variables, la variable (sur les deux) qui n'est pas affichée est tout simplement une nouvelle variable indéfinie.

Concernant les variables sessions je pense que tu fais correctement les choses en mettant un session_start() au début de chaque page censée utiliser des variables session. Puis de toute façon s'il met correctement une variable, il n'y a pas de raisons pour qu'il ne fasse pas de même pour l'autre.
0
caligan Messages postés 6 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 28 janvier 2009
11 août 2007 à 16:37
Je viens de faire de nouveaux essais et c'est à n'y rien comprendre ??

A la fin du script sur la page 2 les 2 variables ont la bonne valeur. (je remplace le header par 2 echos)

Si je remets le header, il y en a une qui saute sur la page 1.

Pourtant au 1er passage sur la page 1, les 2 variables ont les bonnes valeurs et c'est le même script qui lit les variables au second passage, donc à priori les variables sont bien définies ?

A moins qu'il y ait une incompatibilité entre header et session ? Mais alors pourquoi une variable subsiste ?

Avant de mettre des sessions j'avais le même script avec des cookies et ça marchait nickel.

Je comprends rien !!

En tout cas merci de te pencher sur mon cas.
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 227
11 août 2007 à 19:38
Re :)

Essaie une fois de mettre
session_write_close();
juste avant l'appel du header. J'ai lu dans les commentaires anglais du manuel de php que parfois les informations de la session ne se mettaient pas correctement à jour si on changait de page via l'instruction header(). Ils ont aussi rajouté l'instruction exit() sur la ligne suivant le header mais je ne sais pas si il atteint cette fonction (c'est juste censé provoquer l'arrêt pur et simple du script de façon plus propre qu'en mettant uniquement le header - sait-on jamais que cette dernière soit ignorée pour une raison ou une autre -).
0

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

Posez votre question
caligan Messages postés 6 Date d'inscription vendredi 10 août 2007 Statut Membre Dernière intervention 28 janvier 2009
12 août 2007 à 14:30
Soit béni des dieux !!

Bravo, c'était bien le problème, il fallait le trouver !
Encore merci, je n'aurais jamais trouver tout seul.
A+

Petit récapitulatif :

Dans la page de modification des login et mots de passe d'un membre, les variables de sessions sont mises à jour avec les nouvelles valeurs puis l'utilisateur est redirigé (avec un header) vers la page où sont affiché les paramètres.
Il y avait un conflit entre la session et le header et une variable était remise à zéro.
La solution consiste à écrire un session_write_close(); après la définition des variables de session et avant le header pour stabiliser la session.

Encore merci à Posotaz d'avoir trouvé la solution peu évidente pour un débutant comme moi.
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 227
12 août 2007 à 16:22
Au plaisir :-)

Tu vois je ne le savais même pas moi-même avant de me pencher sur ton problème ;-)
En fait tu m'as aidé à le résoudre ce problème et merci à toi de ta sympathie.

Vive CCM.net !
0