Problèmes entres sessions et affichage en pseudo frames - PHP - Programmation
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>
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 ?
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
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.
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 |
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 ...
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é.
Marsh Posté le 31-10-2005 à 23:37:12
shakpana a écrit : tu dois essayer de lire une variable non-initialisée ... |
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(''); |
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
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 :
|
dans un cas tu as $pseudo et l'autre $login
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 ...
Marsh Posté le 01-11-2005 à 01:33:05
Si je peux me permettre:
- c'est w3c et html logic anti proof 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;
Marsh Posté le 01-11-2005 à 10:25:33
bon déjà merci de votre aide
shakpana a écrit : oui mais |
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: |
- 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
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...
Pardon pour ton if, j'ai lu le commentaire en travers, tardivement et j'ai pas vérifié Donc c'est pas une boucle mais un test sur le nombre de résultat Appelons un chat un chat
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) |
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.
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
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
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
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...
Marsh Posté le 01-11-2005 à 17:18:12
et bien je vois le bout du tunnel !
enfin ça marche
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
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 )
-----identification.php-----------
Code :
|
-------------securise.php---------------
Code :
|
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 :
|
et de rajouter un case dans le index.php
Code :
|
on oublie pas d'enlever tous les session_start() des toutes le spages sauf la index.php et ça roule tout seul.
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:
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
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
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 . 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
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---------------------
-----------------login.php pour s'identifier une fois inscrit---------------------------
---------------------identification.php (script qui se connect à la Bd pour vérifier si l'utilisateur est inscrit)--------
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