Rechercher : dans
Par :

[php][session] valeur modifiée

Dernière réponse le 19 mai 2007 à 05:20:53 wAx, le 19 nov 2006 à 00:53:34 
 Signaler ce message aux modérateurs

Bonjour à tous,

J'essaye de stocker une url en session pour proposer un retour sur certaines autres pages (inutile de me parler du referer ou du history.go(-1), j'ai reellement besoin que certaines pages remontent leur url pour que d'autres les utilisent)

le probleme est le suivant:
-->dans la page qui stocke l'url en session, la syntaxe est la suivante:

$_SESSION["navigation"] = "/categorie.php?c=".$_GET["c"]."&p=".$_GET["p"];


echo $_SESSION["navigation"]; 
me revoit bien
/categorie.php?p=0&c=601



--> dans la page censée lire cette valeur,
echo $_SESSION["navigation"]; 
me renvoit
/categorie.php?p=&c=

Comme si la valeur du get n'etait pas présente. j'ai fait divers tests d'affichage et je n'y comprends rien.

Ma seule hypothese est que le get soit appelé par référence et non pas par valeur ce qui ferait que la valeur n'existe pas reellement dans la variable de session. J'ai beau chercher, je tourne en rond.

Un grand merci à ceux qui pourront m'aider

wAx

Meilleures réponses pour « [php][session] valeur modifiée » dans :
[PHP] Headers already sent by..... VoirLorsque vous utilisez une fonction PHP qui manipule les en-têtes HTTP comme par exemple: header() setcookie() session_start() Il est important d'utiliser ces fonctions avant d'avoir généré le moindre flux vers le client. A partir du moment où...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...

1

crabs, le 19 nov 2006 à 10:09:41

Salut,

Il semblerait plutôt que tu refais l'initialisation de la variable de session alors
que les variables c et p ne sont pas définies en $_GET.
Même si $_GET était une référence, la fonction de concaténation ne contient que
des caractères et se moque de l'origine des chaînes concaténées.

A+, crabs ..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

2

wAx, le 19 nov 2006 à 11:24:38

Salut,

Afin d'éviter ce cas de figure, dans la page qui doit retrouver la valeur, j'affiche la variable de session dès le début de la page. Voici mon début de page:

<?php
session_start();

foreach ($_SESSION as $nomvar => $valeurvar)
	echo $nomvar."=".$valeurvar."<br>";


Comme tu le vois, je ne retouche pas à cette variable. Elle n'est donc pas réinitialisée come tu le craignais.

Il y a t'il possibilité d'avoir un accès direct à ce qui est contenu dans les variables de sessions ? Par exemple, j'ai tenté un phpinfo() mais il n'affiche pas les variables de session

Merci de ton aide, je deviens fou :( :(

Répondre à wAx

3

crabs, le 19 nov 2006 à 14:45:12

Salut,

Essaies ce petit script set.php (nommes-le set.php):

<?php
session_start() ;
header( "Content-type: text/plain" ) ;
if ( array_key_exists( 'a', $_GET ) )
    {
    $_SESSION['a'] = $_GET['a'] ;
    $_SESSION['last_set'] = 'set.php?a='.$_GET['a'] ;
    }
else if ( array_key_exists( 'b', $_GET ) )
    {
    $_SESSION['b'] = $_GET['b'] ;
    $_SESSION['last_set'] = 'set.php?b='.$_GET['b'] ;
    }
echo "USE set.php?a= to set a in session\n" ;
echo "USE set.php?b= to set b in session\n" ;
echo "_SESSION[] = " ; print_r( $_SESSION ) ;
?>

Ensuite, appelle-le avec ton navigateur avec les url suivantes :
..../set.php
..../set.php?a=la_valeur_de_a
..../set.php?b=la_valeur_de_b
..../set.php

Est-ce que tout te parait normal, en particulier la valeur de last_set dans la
session construite par concaténation depuis un $_GET.

A+, crabs ..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

4

wAx, le 19 nov 2006 à 15:25:26

Ca fonctionne !!

Grace à tes indications, tu m'as doné l'idée de faire une page tiere dans laquelle j'affiche simplement le contenu de la session.

A coté, j'ai pris ma page qui initialise la fameuse variable et je suis parti de ton code (qui fonctionnait) et j'ai peu à peu remis tous les elements qui constituent ma page.

J'ai ainsi isolé la ligne de code qui fouttait le bazar:

echo "    <td rowspan=\"2\" valign=\"top\"><img src=\"????\" width=\"100\" height=\"154\" vspace=\"11\" hspace=\"7\"></td>\n";


Comme mon site est en dev et que je n'ai pas encore tous les objets de la charte graphique, j'avais mis "????" comme chemin d'image en attendant. Et bien figure toi que cet echo là me fiche en l'air ma variable de session lorsqu'elle est construite à partir du Get.
Meme si j'ai isolé la cause du probleme, il m'est impossible de comprendre le lien de cause à effet. En quoi cette ligne est elle censée avoir une telle consequence ?

En la remplaçant par
echo "    <td rowspan=\"2\" valign=\"top\"><img src=\"\" width=\"100\" height=\"154\" vspace=\"11\" hspace=\"7\"></td>\n";

Tout est parfait. Et dire que ça fait des heures que je cherche sans comprendre.

Un grand merci pour m'avoir mis sur la piste et si tu sais pkoi ce comportement, je suis preneur.

A bientot

Répondre à wAx

5

crabs, le 19 nov 2006 à 15:59:04

Salut,
Effectivement le img avec les ???? appelle le script courant avec des arguments
vide. Typiquement, si tu ne testes pas que les c et p sont effectivement affectées par
le biais de l'url, tu devais faire ta concaténation avec des valeurs vides et mettre
à jour la session avec cette chaîne incorrecte.

Avant d'utiliser un $_GET ou $_POST il vaut mieux vérifier que la variable est
effectivement définie, d'où l'utilisation du array_key_exists() dans le petit script
d'exemple.

A+, crabs ..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

6

 pierre, le 19 mai 2007 à 05:20:53

Salut,

j'ecoute les crabs en ce moment, un groupe de lyon de année 90 du pure psychobilly, un bon groupe mais le chanteur chante faux enconcert, par contre sur vinyl, c'est trop bon, remarque si cela se trouve, vous n'en avez rien à foutre de mes petites joies musicales, en fait j'ai tapez crabs sur mon clavier et je suis tombé sur vous.
donc bonne continuation, merci de m'avoir lu et je vous souhaite que du bonheur @+

Répondre à pierre