Nils Posté 5 Février 2005 Posté 5 Février 2005 bonsoir, je me heurte au problème suivant : j'utilise des variables $_SESSION['mavar'], (j'ai lu que register_globals était maintenant à off par défaut, donc plus de session_register(), donc méthode à éviter semble-t'il) et quand j'appelle une page par <href=....> plus rien à lire dans $_SESSION['mavar']. Où elle est passée, j'en sais rien ? Quelle méthode appliquer pour pouvoir conserver des variables PHP tout au long de la navigation, que les appels de pages se fassent par des : include_once(....php); <form action="....php"> <a href="....php"> merci pour les tuyaux ! Nils
Vincent Posté 5 Février 2005 Posté 5 Février 2005 les sessions sont toujours conseillées, mais l'utilisation des variables a légèrement différé : voila l'exemple que je trouve très parlant sur la doc officielle : http://fr3.php.net/session_register <?php// L'utilisation de session_register() est déconseillé$barney = "Un gros dinosaure violet.";session_register("barney");// L'utilisationde $_SESSION est encouragé depuis PHP 4.1.0$_SESSION["zim"] = "Un envahisseur d'un autre planète.";// L'ancienne méthode avec $HTTP_SESSION_VARS$HTTP_SESSION_VARS["spongebob"] = "Il a un caleçon carré!";?>
Nils Posté 5 Février 2005 Auteur Posté 5 Février 2005 Merci ! mais le problème que je rencontrais c'était la conservation de la session tout au long de mon site. Maintenant j'ai ça qui marche, est-ce que c'est "carré" ? fichier appelant: ============= <?php // page1.php session_start(); $_SESSION['a']="a"; echo "page 1 => ".$_SESSION['a']."<br>"; ?> <html> <head> <body> <a href="page2.php'>page 2</a> </body> </head> </html> ============= fichier appelé: ============= <?php // page2.php session_start($_REQUEST['PHPSESSID']); echo "page 2 => ".$_SESSION['a']."<br>"; ?> ============ Bon, ça marche, mais est-ce que c'est comme ça qu'on fait habituellement ? merci. Nils.
bigornot Posté 5 Février 2005 Posté 5 Février 2005 (modifié) Et bien, quand tu utilises la méthode suivante : ---PAGE1 <?php session_start(); $_SESSION['identsess'] = 'codesupercomplique'; ?> ---PAGE2 <?php session_start(); //ici, le session start vient de retrouver la $_SESSION['identsess'] //sans que tu l'ai rappellée... //cool, non ? //Apres, tu peux faire n'importe quoi avec ta variable... //Mais elle s'effacera quand tu changeras de site... Modifié 5 Février 2005 par bigornot
Nils Posté 5 Février 2005 Auteur Posté 5 Février 2005 Merci, mais je sais pas trop quoi répondre à tout ça : auparavant ça marchait pas !!!!! maintenant ton code, que j'avais déjà éprouvé fonctionne ! c'est à vider un chargeur dans la boîte cranienne qui est sensée héberger mon cerveau .... Vraiment, je suis complétement perdu ! bref, d'autant qu'on m'a dit par ailleurs de ne pas réutiliser plusieurs fois session_start, mais si j'ai bien compris, cette indication n'est valable que dans le cas des includes ? C'est ça ? include_once(...php) => un seul session_start dans la page qui contient l'include, et pas d'appel dans la page "includée". html (<a href=...php> <form action =...php>) => un session_start au début de chaque page appelée. c'est ça ? Et peut-on mixer les 2 à loisir, tant qu'on respecte les 2 règles énnoncées juste au dessus ? merci. Nils.
Anonymus Posté 5 Février 2005 Posté 5 Février 2005 Les sessions, dans le cas du session_start, demandent à respecter les memes regles que les headers et les cookies, à savoir : Ne pas envoyer d'entetes avant la fonction. Une seule ligne blanche, et le session_start ne marche pas.
Nils Posté 6 Février 2005 Auteur Posté 6 Février 2005 hello Nico, Bon, ça c'est un truc au moins que j'avais compris, qu'il ne fallait rien avant la balise <?php sinon, ça génère pleins de messages d'erreur et ça marche pas. enfin(?) je veux dire : ex1 ==début du fichier==== saut de ligne <?php session_start(); mon_code(); ?> ====== ça marche pas, c'est ça ? et ex2 ==début du fichier==== <?php saut de ligne session_start(); mon_code(); ?> ====== ça, ça marche ?, non ? ou ne faut-t'il aucun saut de ligne NUL PART AVANT session_start ? => ex3 ==début du fichier==== <?php session_start(); sautS de ligne (autorisés) mon_code(); sautS de ligne (autorisés) ?> ====== Si tu peux me dire si ex2 marche comme ex3 ? Maintenant, à force de "bricoler" tout ça dans tous les sens, j'en arrive à la conclusion suivante (il est bien possible que je me contredise par rapport à une fois précédente !!!) : je suis dans une page 1, et j'appelle la page 2, (et j'ai des vars de session bien entendu) si je l'appelle avec du code : php => include_once() => pas de session_start() dans la page 2, html => <form action=...> ou <a href=...> je mets un session_start() dans la page 2. J'en suis arrivé à cette conclusion à force d'essais, est-ce que c'est juste. Ca parait en tout cas cohérent, non ? Et pour ce qui est des cookies, je n'ai pas encore eu l'occasion d'en utiliser. Et pour les headers, je n'ai pas encore compris leur utilité. Mais il me semble que ça sert dans les mécanismes de gestions des pages envoyées ? Si tu avais un lien pour GRAND DEBUTANT là dessus, j'irais voir avec grand intérêt. (Mais j'ai déjà consulté les pages de php.net ou assimilées et je n'ai pas encore saisi le rôle des headers, même si je commence à entrevoir la syntaxe ...) merci. Nils.
bigornot Posté 6 Février 2005 Posté 6 Février 2005 (modifié) Je crois que les deux exemples ci-dessous marchent saut de ligne<?phpsession_start();?> <?phpsaut de lignesession_start();?> mais, ça, ça ne marche pas : <html><?phpsession_start();?> En fait, tu peux meme mettre du code avant le session_start(), comme ça : <?phpinclude("configuration.php"); //uniquement si configuration.php ne fait pas quelque chose // de visible par l'utilisateur, comme des echo, ou print, ...mysql_connect(blabla);//tant qu'on n'affiche pas du code html, ça marchesession_start(); //le session_start() marchera?> mais le code ne devra rien afficher de visible pour l'utilisateur. donc, ça : <?phpecho "bla"; session_start();//ça ne marchera pas : le echo gache tout?> Modifié 6 Février 2005 par bigornot
Nils Posté 6 Février 2005 Auteur Posté 6 Février 2005 Merci ! Je commence à mieux comprendre, tant qu'on reste dans le PHP pure, ça roule, mais dès lors qu'on attaque l'interface de l'utilisateur (HTML), ça cafouille. Il faut donc bien "dissocier" ce qui est exécuté sur le serveur de ce qui est exécuté sur le client. Merci, ça commence à rentrer tout ça. Et merci à tous pour le temps passé avec moi ! Nils.
Antoine Cailliau Posté 7 Février 2005 Posté 7 Février 2005 Tu as bien compris. Note qu'il est souvent plus facile de modifier un fichier correctement structuré (include et autre)
Anonymus Posté 8 Février 2005 Posté 8 Février 2005 la fonction header() en php permet d'envoyer des infos au navigateur, telles que les cookies, les redirections, etc.. De manière générale, on parle des headers, des entètes quand on parle de tout ce qui est envoyé au navigateur avant que soit envoyé le code html. Le navigateur recoit 2 blocs de données, lorsqu'il demande une page. Le premier bloc de données est l'entète, qui le renseigne sur l'environnement (les cookies, la langue, etc..), et le second bloc est le code html. La séparation entre les 2 est de simples lignes blanches vides. Si tu envoies une ligne vide, ca veut dire que tu fais la séparation. Après, tu ne peux plus envoyer quelque chose dans le premier bloc, avec les 'entetes'. Dès qu'il y a un morceau de html dans ton code, aussi infime soit il (une ligne vide, ou un caractère blanc), la séparation est faite.. Il faudrait que je te retrouve un 'lecteur d'entetes' qui permet de voir ce qu'envoie le serveur (les entetes suivies des lignes blanches, suivies du html).
Nils Posté 8 Février 2005 Auteur Posté 8 Février 2005 Merci Nico ! Effectivement, quand on débute sans formaiion, il manque tout le préambule. Et là tu viens de remplir une de mes cases vides ! Et c'est vrai, qu'en plus des subtilités du langage j'aime connaitre l'environnement. Maintenant, crois tu que tu pourrais me résumer succintement, ou me donner des liens, sur ce fameux premier bloc, et ce qu'il contient et son rôle "exact", disons ses rôles. Merci pour le lecteur de header, si tu en trouves un ça m'intéresse beaucoup, j'ai un bts Informatique Industrielle, tu comprendras peut-être mieux ma curiosité ... "mais qu'est-ce qui se passe exactement dans cette foutu machine". Pour le lecteur, pour infos, mon serveur de pages est un Apache sous Mandrake, et mon client un IE sous XP. merci, à+, Nils.
Nils Posté 8 Février 2005 Auteur Posté 8 Février 2005 zut, j'ai cliqué trop vite sur "ajouter...", qu'est-ce que sont que les redirections ?, je suppose qu'il ne s'agit pas des liens que va cliquer l'utilisateur ? si ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant