Aller au contenu

conserver des variables tout aux long des pages


Nils

Sujets conseillés

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

Lien vers le commentaire
Partager sur d’autres sites

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é!";
?>

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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é par bigornot
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Je crois que les deux exemples ci-dessous marchent

saut de ligne
<?php
session_start();
?>

<?php
saut de ligne
session_start();
?>

mais, ça, ça ne marche pas :

<html>
<?php
session_start();
?>

En fait, tu peux meme mettre du code avant le session_start(), comme ça :

<?php
include("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 marche
session_start(); //le session_start() marchera
?>

mais le code ne devra rien afficher de visible pour l'utilisateur.

donc, ça :

<?php
echo "bla";
session_start();
//ça ne marchera pas : le echo gache tout
?>

Modifié par bigornot
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...