Problèmes entres sessions et affichage en pseudo frames

Problèmes entres sessions et affichage en pseudo frames - PHP - Programmation

Marsh Posté le 31-10-2005 à 19:13:47    

Bonjour,
 
Alors je vous explique mon problèmes.
j'ai un petit problème de gestion des sessions dans des pseudo frames.
En fait, je fais un site qui gère l'inscription d'utilisateurs (via MySQL) et dont certaines pages de ce site sont accessible uniquement par les utilisateurs inscrit. De plus mon site est fait avec la méthodes des pseudo frames en PHP. c'est à dire que j'ai un cadre central qui affiche le contenu de mon site suivant l'action effectué.
j'ai déjà effectué la création de la BD ainsi que le formulaire d'inscirption dans mon site. Tout marche correctement (du moins je pense ^^).
Seulement, là ou j'ai un problème c'est au niveau de l'accès des pages sécurisées.
 
le problème est que lorsque je me suis identifié et que je clique sur la page "securié", j'ai l'erreur suivante:
 
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\site\index.php:19) in c:\program files\easyphp1-8\www\site\securise.php on line 3
 
Notice: Undefined index: login in c:\program files\easyphp1-8\www\site\securise.php on line 4
Votre pseudo est !!!
 
j'ai compris que c'était un problème avec mes sessions.  je génère du contenu avant mon header dans mon index.php. On m'a dit qu'il fallait que je me débrouille pour mettre mes "include" avant ma balise <html> seulement je sais pas comment faire vu que mes includes servent à afficher dans le "contenu".De plus, lorsque je me suis inscrit, ou identifié, les page de  validation des formulaire ne s'affichent pas dans mon "contenu" mais dans une nouvelle page internet. je souhaiterai que toutes les informations de mon site s'affiche dans le "contenu" de index.php
Au niveau d el'afichage en pseudo frame, j'ia suivi le tutoriel de ce site donc je ne pense pas qu'il y ai de problème.
 
voici me sdifférents script:
 
-----------------index.php---------------------

Code :
  1. <html>
  2.  <title>
  3.   Pendu
  4.  </title>
  5.  <head>
  6.   <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
  7.   <LINK rel="stylesheet" type="text/css" href="Style.css">
  8.  </head>
  9.  <body>
  10.   <div class="haut"><IMG SRC="haut.jpg" ></div>
  11.   <div class="gauche">
  12.    <ul>
  13.     <li>
  14.      <a href="index.php?page=accueil" title="L'accueil">Accueil</a>
  15.     </li>
  16.     <li>
  17.      <a href="index.php?page=formulaire" title="inscription ">inscription</a>
  18.     </li>
  19.     <li>
  20.      <a href="index.php?page=identification" title="identification ">identification</a>
  21.     </li>
  22.     <li>
  23.      <a href="index.php?page=securiser" title="securiser ">test sécurisé</a>
  24.     </li>
  25.    </ul>
  26.   </div>
  27.   <div class="bas"><IMG SRC="bas.jpg" ></div>
  28.   <div class="droit"><IMG SRC="droit.jpg" ></div>
  29.   <div class="contenu">
  30.    <?php
  31.     if (!isset($_GET['page'])) $page= 'accueil';
  32.     else $page= $_GET['page'];
  33.     switch($page)
  34.     {
  35.     case 'accueil': include ('accueil.php');break;
  36.     case 'formulaire': include ('formu.php');break;
  37.     case 'identification':include ('login.php');break;
  38.     case 'securiser':include ('securise.php');break;
  39.     }
  40.    ?>
  41.   </div>
  42.  </body>
  43. </html>


 
-----------------login.php pour s'identifier une fois inscrit---------------------------

Code :
  1. <?php
  2. ?>
  3. <html>
  4. <body>
  5.  <h1>Identification :</h1>
  6.  <br>
  7.  <form method="post" action="identification.php">
  8.   <table>
  9.    <TR>
  10.     <td>
  11.      Utilisateur
  12.     </td>
  13.     <TD>
  14.      <input type="text" name="login">
  15.     </TD>
  16.    </TR>
  17.    <tr>
  18.     <td>
  19.      Mot De Passe
  20.     </td>
  21.     <TD>
  22.      <input type="password" name="pass">
  23.     </TD>
  24.    </tr>
  25.    <tr>
  26.     <TD>
  27.     </TD>
  28.     <td>
  29.       <input type="reset" name="reset" value="Effacer">
  30.      <input type="submit" name="valider">
  31.     </td>
  32.    </tr>
  33.   </table>
  34.  </form>
  35. </body>
  36. </html>


 
---------------------identification.php (script qui se connect à la Bd pour vérifier si l'utilisateur est inscrit)--------
 

Code :
  1. <?
  2. session_start();
  3. if (isset ($_POST['login']) AND isset ($_POST['pass'])) //on verifi ke les variables existent
  4. {
  5. //on renome les varaibles:
  6. $login = $_POST['login'];
  7. $pass = $_POST['pass'];
  8. }
  9. else
  10. {
  11. $pseudo = "";
  12. $pass = "";
  13. }
  14. mysql_connect("localhost", "root", "" ); //on se connecte a MySQL
  15. mysql_select_db("pendu" );
  16. $reponse = mysql_query("SELECT NOMUTIL, MDPUTIL FROM utilisateur WHERE NOMUTIL='$login' AND MDPUTIL='$pass'" );
  17. if (mysql_num_rows($reponse) == 1) //on fait une boucle pour verifier toutes les entrées de la BDD
  18. {
  19. print("<script>alert(\"Bienvenue $login \" )</script>" );
  20. $_SESSION["autorisation"]="OK";
  21. ?>
  22. <HTML>
  23.         <HEAD>
  24.         </HEAD>
  25.         <BODY>
  26.         Votre pseudo est <? echo $login ?>
  27.         et votre mot de passe est<? echo $pass ?>
  28.         </BODY>
  29. </HTML>
  30. <?
  31. } //fin du if
  32. else
  33. {
  34. header("location:http://127.0.0.1/Pendu/formu.php" );
  35. } //fin du else
  36. mysql_close(); //on se deconnecte de MySQL
  37. ?>


 
voilà j'espere que je vais pas vous effrayer avec mon script mais au moins je pense que vous avez toutes les données pour pouvoir m'aider.  
merci d'avance

Reply

Marsh Posté le 31-10-2005 à 19:13:47   

Reply

Marsh Posté le 31-10-2005 à 19:25:16    

Bon, au niveau de ta page de login, il y a des choses bizarres...
 
Mais pour ne parler que de ton problème. c'est juste que tu fais un session_start alors que tu as déjà écris du texte html, donc il faut que tu le mettes dans le fichier index.php avant la balise <html>


---------------
+jouj+
Reply

Marsh Posté le 31-10-2005 à 19:39:18    

justement je sais pas comment faire. vu que c'est un affichage en pseudo frame, mes includes concerne un <div> sépcifique de ma page donc je peux pas le bouger. donc je fais comment pour que ces include qui appellent les pages php se retrouve avant mon <html>  sans que ça cahnge tout ?

Reply

Marsh Posté le 31-10-2005 à 19:58:15    

Mais non, mais non, il tout laisse tout pareil sauf que tu enlèves session_start(); de identification.php
et la première ligne de ton fichier index.php sera <?php session_start(); ?>
du coup, quelque soit la page que tu inclueras après, tu pourras utiliser les variables de session sans problème :)


---------------
+jouj+
Reply

Marsh Posté le 31-10-2005 à 20:52:33    

merci de ton aide seulement en changeant d'endroit le session_start() comme tu l'a dit , d'autres pb apparaissent:
 
Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-8\www\site\securise.php on line 2
 
Notice: Undefined index: login in c:\program files\easyphp1-8\www\site\securise.php on line 3
 
Notice: Undefined index: autorisation in c:\program files\easyphp1-8\www\site\securise.php on line 4
 
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\site\index.php:18) in c:\program files\easyphp1-8\www\site\securise.php on line 6
Votre pseudo est !!!
 
donc j'ai aussi enlevé le session start() de securise.php mais j'ia encore d'autres erreurs:
 
Notice: Undefined index: login in c:\program files\easyphp1-8\www\site\securise.php on line 3
 
Notice: Undefined index: autorisation in c:\program files\easyphp1-8\www\site\securise.php on line 4
 
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\site\index.php:18) in c:\program files\easyphp1-8\www\site\securise.php on line 6
Votre pseudo est !!!  
 
les meme encore une fois.

Reply

Marsh Posté le 31-10-2005 à 22:04:15    

ephagor a écrit :

Notice: Undefined index: login in c:\program files\easyphp1-8\www\site\securise.php on line 3
 
Notice: Undefined index: autorisation in c:\program files\easyphp1-8\www\site\securise.php on line 4


tu dois essayer de lire une variable non-initialisée ...
donc  
soit y'a un bug dans ton script => login n'est pas initialisée alors qu'elle le devrait, que tu l'assumes
soit l'ajout d'un simple isset() te sortiras d'affaire ...


---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
Reply

Marsh Posté le 31-10-2005 à 22:28:53    

ou sinon, tout au début de ton script, tu places : ob_start('');
Cette fonction va bufferiser ta page HTML, la mettre de coté et seulement l'envoyer au navigateur quand le script de la page sera terminé.

Reply

Marsh Posté le 31-10-2005 à 23:37:12    

shakpana a écrit :

tu dois essayer de lire une variable non-initialisée ...
donc  
soit y'a un bug dans ton script => login n'est pas initialisée alors qu'elle le devrait, que tu l'assumes
soit l'ajout d'un simple isset() te sortiras d'affaire ...


 
si on regarde bien le identification.php, j'ai initialisé $login et j'ai meme fait un isset pour voir si elle éxiste, seulement ça à pas l'air de vouloir passer dans le index.php
 

The-Shadow a écrit :

ou sinon, tout au début de ton script, tu places : ob_start('');
Cette fonction va bufferiser ta page HTML, la mettre de coté et seulement l'envoyer au navigateur quand le script de la page sera terminé.


je connais pas cette commande mais je vais tester dès que possible. Maintenant ça fait pas un peu "système D" comme méthode ? (au niveau de la clarté du code). Enfin à mon avis, si cette méthode marche il doit y avoir des problèmes qui vont surgir plus tard vu que mon script est loin d'être parfait. Mais je te remercie de ton aide et je vais tester ça demain voir comment ça fonctionne

Reply

Marsh Posté le 01-11-2005 à 00:28:35    

ephagor a écrit :

si on regarde bien le identification.php, j'ai initialisé $login et j'ai meme fait un isset pour voir si elle éxiste, seulement ça à pas l'air de vouloir passer dans le index.php


oui mais ;)

Code :
  1. if (isset ($_POST['login']) AND isset ($_POST['pass']))
  2. {
  3.   //on renome les varaibles:
  4.   $login = $_POST['login'];
  5.   $pass = $_POST['pass'];
  6. }
  7. else
  8. {
  9.   $pseudo = "";
  10.   $pass = "";
  11. }

dans un cas tu as $pseudo et l'autre $login :p
enfin je pense que c'est ça ...
car là, si pas de $_POST $login existe pas
enfin ce qu'il y a dans "securise.php on line 3" te donnera la réponse ...


---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
Reply

Marsh Posté le 01-11-2005 à 01:33:05    

Si je peux me permettre:
- c'est w3c et html logic anti proof :D Si tu gères toutes tes inclusions depuis ton index.php t'es déjà dans le corps de ta page donc pas besoin de refaire un squelette complet ;)
 
- sur une authentification tu dois pouvoir identifier de manière unique l'utilisateur donc pas besoin de boucle
 
- otes moi d'un doute, je l'ai râté le $_SESSION['login"]=x
 
Si tu as pas le serveur configuré avec un session.start auto alors tu le mets qu'une fois pour toutes en première ligne de ton index.php et plus après ;)
Si t'as une session auto ça sert à rien ;)
 
Pour être sur que t'as pas 2 session différentes si tu veut être sur fais un  
 
echo SID;

Reply

Marsh Posté le 01-11-2005 à 01:33:05   

Reply

Marsh Posté le 01-11-2005 à 10:25:33    

bon déjà merci de votre aide :jap:  
 

shakpana a écrit :

oui mais ;)
 dans un cas tu as $pseudo et l'autre $login :p
enfin je pense que c'est ça ...
car là, si pas de $_POST $login existe pas
enfin ce qu'il y a dans "securise.php on line 3" te donnera la réponse ...


 
j'ai modifié le $pseudo en $login, pas de changement. enfin ça fait déjà une erreur en moins ^^. merci
 

leflos5 a écrit :

Si je peux me permettre:
- c'est w3c et html logic anti proof :D Si tu gères toutes tes inclusions depuis ton index.php t'es déjà dans le corps de ta page donc pas besoin de refaire un squelette complet ;)
 
- sur une authentification tu dois pouvoir identifier de manière unique l'utilisateur donc pas besoin de boucle
 
- otes moi d'un doute, je l'ai râté le $_SESSION['login"]=x
 
Si tu as pas le serveur configuré avec un session.start auto alors tu le mets qu'une fois pour toutes en première ligne de ton index.php et plus après ;)
Si t'as une session auto ça sert à rien ;)
 
Pour être sur que t'as pas 2 session différentes si tu veut être sur fais un  
 
echo SID;


 
 
 
- j'ai viré tous mes session_start(); et laissé uniquement celui en index.php --->pas de changements, toujours les erreurs de undefined index ligne 3,4 de securise.php et mon pb de header already sent (ligne 6) également.
 
- Concernant le $_SESSION[$login]=x, je n'en est pas effectivement mais j'ai un $_SESSION[autprisation]="ok" en ligne 26 qui valide mon test de login dans ma BD (identification.php).
 
- pour l'identification et la boucle, je ne comprend pas quelle boucle enlever. tu parle du "if (mysql_num_rows($reponse) == 1)" ?
 
- ou mettre mon <? echo SID ?> ? je l'ai mis apres mon session_start() mais ça n'a rien fait


Message édité par ephagor le 01-11-2005 à 10:28:45
Reply

Marsh Posté le 01-11-2005 à 13:52:12    

Pour le SID c'est donc que ça marche par cookie chez toi ;) Donc remplace par session_id() ça te renvoit l'identifiant de session mais si t'as plus qu'un session_start c'est bon (sauf si t'as dans le php.ini un session.auto_start = 1)
 
Ton index inexistant tu le cherche dans quoi? Parce que si t'enregistre rien dans ta session c'est normal qu'il trouve rien... :D
 
Pardon pour ton if, j'ai lu le commentaire en travers, tardivement et j'ai pas vérifié :D Donc c'est pas une boucle mais un test sur le nombre de résultat ;) Appelons un chat un chat :p

Reply

Marsh Posté le 01-11-2005 à 14:02:03    

leflos5 a écrit :

Pour le SID c'est donc que ça marche par cookie chez toi ;) Donc remplace par session_id() ça te renvoit l'identifiant de session mais si t'as plus qu'un session_start c'est bon (sauf si t'as dans le php.ini un session.auto_start = 1)
 
Ton index inexistant tu le cherche dans quoi? Parce que si t'enregistre rien dans ta session c'est normal qu'il trouve rien... :D
 
Pardon pour ton if, j'ai lu le commentaire en travers, tardivement et j'ai pas vérifié :D Donc c'est pas une boucle mais un test sur le nombre de résultat ;) Appelons un chat un chat :p


 
y a pas de soucis ;)  
Mon index inexistant se trouve dans identification.php . le login est au départ et "autorisation"  (à la fin du script) est "activé" si le login éxiste dans la BD. à ce moment là ces 2 variables doivent (ou devraient) passer dans la session.

Reply

Marsh Posté le 01-11-2005 à 14:36:59    

Mais sur le code que t'as affiché, je le vois pas la variable enregistrée dans la session :)

Reply

Marsh Posté le 01-11-2005 à 15:00:57    

alors j'ai pas du comprendre la meme chose et donc j'ai pas du enregistré la variable dont tu me parle parceque le code que tu vois n'a pas changé hormis l'emplacmeent du session_start();
Mais je vois pas ce que je dois faire

Reply

Marsh Posté le 01-11-2005 à 16:31:38    

Une session c'est un fichier côté serveur dans lequel tu peux enregistrer des données qui sont accessibles de partout dans tes scripts :)
 
Mais tout son contenu doit être traité par toi, ça se fait pas tout seul ;)
 
Donc faut que tu enregistre ta variable $login dans la session si tu veux l'avoir ailleurs et après ;)
 
$_SESSION est le tableau accessible depuis ton script en lecture et écriture ;)
 
http://www.nexen.net/docs/php/anno [...] amples.php

Reply

Marsh Posté le 01-11-2005 à 16:53:32    

ok donc si j'ai bien compris je mets mes variable login, etc... dans un $_SESSION:
 
$_SESSION[$ogin], etc...

Reply

Marsh Posté le 01-11-2005 à 17:18:12    

et bien je vois le bout du tunnel !
enfin ça marche :bounce:  :bounce:  
Merci bien
il suffisait juste de déclarer mes variable dans un $_SESSION. et de les appeler dans le sautre page d ela meme maniere ($_SESSION['login']).
Donc pour récapituler. la page securise.php ne s'ouvre dans le contenu d emon site que si mon login est enregistré dans la base et si je me suis identifié. Voilà une bonne chose de faite grâce à vous :jap:  :jap:  
Il reste cependant un détail.
Lorsque je clique sur "valider" dans login.php, ça m'ouvre une nouvelle page pour me dire que je suis loggué. Hors je voudrai que cette page s'ouvre dans mon contenu.
 
je vous met mes nouveau script modifiés et arrangé (c ptete un peu le bordel ds le scommentaire, faites pas attention  :lol: )
 
-----identification.php-----------

Code :
  1. <?
  2. session_start();
  3. if (isset ($_POST['login']) AND isset ($_POST['pass'])) //on verifi ke les variables existent
  4. {
  5. //on renome les varaibles:
  6. $login = $_POST['login'];
  7. $pass = $_POST['pass'];
  8. }
  9. else
  10. {
  11. $login = "";
  12. $pass = "";
  13. }
  14. mysql_connect("localhost", "root", "" ); //on se connecte a MySQL
  15. mysql_select_db("pendu" ); //on selectionne la BDD ATTENTION la BDD PAS la TABLE
  16. $reponse = mysql_query("SELECT NOMUTIL, MDPUTIL FROM utilisateur WHERE NOMUTIL='$login' AND MDPUTIL='$pass'" ); //on oubli pas de preciser le nom de la TABLE
  17. if (mysql_num_rows($reponse) == 1) //on fait une boucle pour verifier toutes les entrées de la BDD
  18. {
  19.   print("<script>alert(\"Bienvenue $login \" )</script>" );
  20.   $_SESSION["autorisation"]="OK";
  21.   $_SESSION["login"]=$login;
  22.   ?>
  23.  
  24.   <HTML>
  25.           <HEAD>
  26.           </HEAD>
  27.           <BODY>
  28.           Votre pseudo est <? echo $login ?>
  29.           et votre mot de passe est <? echo $pass ?>
  30.           </BODY>
  31.   </HTML>
  32.  
  33.   <?
  34.   /*echo "<script langage='javascript'>\n";
  35.   echo "document.write(\"enregister<br>\" );";
  36.   echo "setTimeout(\"location = 'http://;";
  37.   echo "</script>\n</body>\n</html>";*/
  38. } //fin du if
  39. else
  40.   header("location:http://" );
  41. //fin du else
  42. mysql_close(); //on se deconnecte de MySQL
  43. ?>


 
-------------securise.php---------------

Code :
  1. <?
  2. if($_SESSION['autorisation'] == "OK" )
  3. {
  4.   echo "Votre pseudo est ".$_SESSION['login']."!!!";
  5. }
  6. ?>



Message édité par ephagor le 01-11-2005 à 17:22:58
Reply

Marsh Posté le 01-11-2005 à 18:09:54    

mode auto-reponde ON:
il suffit de changer la redirection du <form> de login.php comme ceci:

Code :
  1. <form method="post" action="index.php?page=valider">


et de rajouter un case dans le index.php

Code :
  1. case 'valider':include ('identification.php');break;


 
on oublie pas d'enlever tous les session_start() des toutes le spages sauf la index.php et ça roule tout seul. :sol:  
Bon voilà, je met tout ça pour ceux qui auraient le smeme pb que moi.
EN tout cas, pour l'instant , mon probleme est résolu. en attendant d'en avoir un autre car mon site est loin d'être fini.
Merci à tous ceux qui m'ont aidés:

Reply

Marsh Posté le 01-11-2005 à 19:16:49    

Bonne suite de la découverte de la joie des sessions et autres "vices" du php :D
 
Mais même si ça servira probablement à d'autres, t'as nexen.net avec toute la doc php qui t'explique très bien, et suffit à mon sens à bricoler tout seul en se prenant la tête ;)
 
Parce que le but du forum n'est à priori pas de macher le travail, celà dit hésite pas en MP si souci ;)

Reply

Marsh Posté le 01-11-2005 à 21:39:54    

j'ai pas le sentiment de vous avoir demandé de faire les choses à ma place. ça devait être sans doute mon ton un peu désespéré qui à du t'induire en erreur :P . Je préfère largement qu'on m'explique la méthode que je puisse comprendre par moi meme par la suite. c'est beaucoup plus formateur.
Merci à tous

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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