Variable de session ne passe pas...

Variable de session ne passe pas... - PHP - Programmation

Marsh Posté le 15-08-2005 à 10:31:42    

Bonjour à tous,
 
Dans page0.php je remplis un forumulaire textfiel et je passe à la page1.php avec le bouton.

Code :
  1. <html>
  2. <head>
  3. <title>Document sans titre</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5. </head>
  6. <body>
  7. <form name="form1" method="post" action="page1.php">
  8.   <p>
  9.     <input type="text" name="textfield">
  10.   </p>
  11.   <p>
  12.     <input type="submit" name="Submit" value="Envoyer">
  13.   </p>
  14. </form>
  15. </body>
  16. </html>


 
Dans page1.php  je met le contenu de ce forumulaire dans une variable de session appelée variablepour pourvoir la réutiliser plus tard, et je passse à la pge suivante avec le bouton.

Code :
  1. <html>
  2. <head>
  3. <title>Document sans titre</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5. </head>
  6. <body>
  7. <?php
  8. $_SESSION['variable'] = $_POST['textfield'];
  9. echo 'Page 1<br>';
  10. echo 'La variable de session est égale à :',$_SESSION['variable'];
  11. ?>
  12. <form name="form1" method="post" action="page2.php">
  13.   <input type="submit" name="Submit" value="Envoyer">
  14. </form>
  15. </body>
  16. </html>


 
Enfin en page2.php, je souhaite afficher cette variable de session avec le code suivant:

Code :
  1. <?php
  2. session_start();
  3. echo 'Page 2<br>';
  4. echo 'La variable de session est égale à :',$_SESSION['variable'];
  5. ?>


et il me balance le message d'erreur suivant

Code :
  1. Notice: Undefined index: variable in c:\program files\easyphp\www\essai prog\page2.php on line 4


 
 
Je sais bien que je débute en PHP, mais j'ai cherché un peu partout une explication, et je n'ai rien trouvé. Il y a quelqu'un qui peut m'aider?
Merci!!

Reply

Marsh Posté le 15-08-2005 à 10:31:42   

Reply

Marsh Posté le 15-08-2005 à 10:43:22    

mettre un session_sart() dans page1.php ?


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 15-08-2005 à 11:27:02    

J'y avais bien pensé. C'est pas ça non plus car à l'affichage de la page 1, il me met le message:

Code :
  1. Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp\www\essai prog\page1.php:8) in c:\program files\easyphp\www\essai prog\page1.php on line 9


Message édité par Mploufeur le 15-08-2005 à 11:27:40
Reply

Marsh Posté le 15-08-2005 à 11:30:17    

tu mets le session_start en tout début de page. pas un espace, pas une ligne avant. Le script doit commencer par
<?php session_start(); ...

Reply

Marsh Posté le 15-08-2005 à 11:48:22    


Voui.
Sauf que c'est sur 2 lignes: Ca donne

Code :
  1. <?php
  2. session_start();


(mais c'est pareil)
 
Ah, au fait, je suis avec EasyPHP. Je ne sais pas si ça a une importance... :(

Reply

Marsh Posté le 15-08-2005 à 13:58:15    

Il y a des chances, tu devrais essayer sur un hébergeur gratuit dont tu es sur qu'il supportes les sessions ( attention chez Free tu dois créer une répertoire session à la racine )

Reply

Marsh Posté le 15-08-2005 à 14:00:23    

J'ai simplifié le code de page1.php et ajouté un session_start(); en tout début. Ca me donne ça maintenant:
 
page0.php

Code :
  1. <html>
  2. <head>
  3. <title>Document sans titre</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5. </head>
  6. <body>
  7. <form name="form1" method="post" action="page1.php">
  8.   <p>
  9.     <input type="text" name="textfield">
  10.   </p>
  11.   <p>
  12.     <input type="submit" name="Submit" value="Envoyer">
  13.   </p>
  14. </form>
  15. </body>
  16. </html>


page1.php

Code :
  1. <?php
  2. session_start();
  3. $_SESSION['var'] = $_POST['textfield'];
  4. echo 'Page 1<br>';
  5. echo 'La variable de session est égale à :',$_SESSION['var'];
  6. session_destroy();
  7. ?>
  8. <form name="form1" method="post" action="page2.php">
  9.   <input type="submit" name="Submit" value="Envoyer">
  10. </form>


page2.php

Code :
  1. <?php
  2. session_start();
  3. echo 'Page 2<br>';
  4. echo 'La variable de session est égale à :', $_SESSION['var'];
  5. session_destroy();
  6. ?>


 
--> En local (avec EasyPHP) ça affiche le texte "Page 2 (ligne suivante) La variable de session est égale à:" puis ça me donne le message d'erreur suivant:
Notice: Undefined index: var in c:\program files\easyphp\www\essai prog\page2.php on line 4
 
--> Sur le serveur (Free, où j'ai mis un répertoire "sessions" à la racine) ça ne me donne pas de message d'erreur mais ça ne me renvoie pas la valeur de la variable "var".

Ca inspire quelqu'un ça?

Parce que j'en perds mon latin/PHP (OK, je débute, mais quand même...) :cry:

Reply

Marsh Posté le 15-08-2005 à 14:20:32    

session_destroy(): qu'est ce qu'il vient foutre là ?

Reply

Marsh Posté le 15-08-2005 à 16:12:49    

mcjoedassin a écrit :

session_destroy(): qu'est ce qu'il vient foutre là ?


Bah, c'est peut-être pas indispensable, mais ça ne gène pas (à priori).
Je l'avais rajouté "pour voir" si c'était ça qui faisait que ça ne marchait pas: Eh ben nan!

Reply

Marsh Posté le 15-08-2005 à 17:12:34    

oui, le session_start doit etre au début ET enlève le session_destroy

Reply

Marsh Posté le 15-08-2005 à 17:12:34   

Reply

Marsh Posté le 16-08-2005 à 03:22:31    

problème d'initié les session : déjà faut commencer par lire la doc sur les sessions en php, dans laquelle tu liras qu'un session_start() se met avant toute sortie de flux
tu peux également y paramétrer à la volé le dossier dans lequel les stocker (pas besoin du php.ini)
le session_destroy() te sert à détruire la session, si t'en a besoin dans une autre page comment veux tu la récupérer si tu la détruit
si tu as des NOTICE, c'est que t'as pas initialisé tes variables, c'est la base de la programmation
 
pour bien coder tu mets error_reporting(E_ALL) en haut de page, et tu corrige toutes les lignes ou un NOTICE t'es indiqué :)
si tu souhaite laisser tes notice trainer sans les voir dans la sortie, utilise error_reporting(E_ALL ^ E_NOTICE)  
 
 

Reply

Marsh Posté le 17-08-2005 à 21:01:36    

A priori, j'ai trouvé ma solution.
Il semble qu'il y avait plusieurs raisons que ça ne marche pas. Je ne sais pas laquelle était la bonne (peut-être toutes)
 
    * Il fallait que je referme mon navigateur web à chaque essai. En effet, les sessions et leurs contenus ne sont complètement détruits qu'à la fermeture du navigateur (il y a moyen de coder pour tout détruire mais bon...). Ça pouvait merder à cause de valeurs qui restaient en mémoire qq part...
    * Il semble que quand on démarre une session, il faut initialiser TOUTES les variables, même si elles ne sont pas des variables de session. Et dans mon cas, j'utilisais des variables (qui pouvaient être vides selon ce qu'on rentrait dans les formulaires) sans les initialiser, au moins avec une valeur vide.
 
Je crois bien que Spike avait raison.
Merci à tous de votre aide...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed