Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2011, 18h25   #1
Invité de passage
 
Inscription : janvier 2005
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 7
Points : 0
Points : 0
Par défaut Boucle Foreach + sessions

Bonjour toutes et à tous.

Voilà mon souci (ça à l'air simple mais je n'y arrive pas) :

La page 1 affiche 20 urls via un array() qui contient les liens (récupération classique par un foreach) :


Code :
1
2
3
4
5
6
7
8
 
foreach($url as $cle=>$valeur)
{
$_SESSION['cle'] = $cle;
$_SESSION['valeur'] = $valeur;
 
echo "<a href='$valeur'>$valeur</a>";
}


Un clic sur un des liens et la page 2 voulue s' affiche. Ca, ça fonctionne.

Mon problème : je voudrais "récupérer" la valeur du lien cliqué ou sa clé
(qui sont des variables) sur la page 2.

Mais :

- la boucle foreach va jusqu'à la fin de sa lecture
- et l' URL récupérée (et sa clé) est toujours le dernier de la liste (quel que soit le lien cliqué).

Comment faire pour récupérer les variables par SESSION en page 2 quand on clique sur un lien de la page 1, en ciblant les bonnes variables ?

Y-a-t-il une soluce dans mon cas ou c'est mission impossible ?

Merci pour toute aide éventuelle, car je cela fait 2 jours que je suis dessus !


Sabine.
sabine2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 20h45   #2
Nouveau Membre du Club
 
Inscription : juillet 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 36
Points : 27
Points : 27
2 jours dessus ?

Dans ta boucle foreach, a chaque fois tu dis que

Code :
1
2
$_SESSION['cle'] = $cle;
$_SESSION['valeur'] = $valeur;
Donc ton tableau $_SESSION ne contient jamais que 2 valeurs :
$_SESSION['cle'] et $_SESSION['valeur']


Pour "récupérer" la valeur du lien cliqué, 2 solutions:

1°) $_SERVER['PHP_SELF'] contient l'URL. C'est le lien en question non?

2°)
Code :
1
2
3
4
5
6
7
 
foreach($url as $cle=>$valeur)
{
$_SESSION['URL'][$cle] = $valeur;
 
echo '<a href="'.$valeur.'&cle='.$cle.'>'.$valeur.'&cle='.$cle.'</a>';
}
Dans ta page 2,
sera la clé de l'url, que tu pourras récupérer dans la session via
Code :
$url_sur_laquelle_jai_clique = $_SESSION['URL'][ $_GET['cle'] ]

Mais c'est du code pour apprendre, il n'est pas du tout sécurisé (j'imagine que tu n'es pas encore concerné par la sécurité).
Doonge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 11h03   #3
Invité de passage
 
Inscription : janvier 2005
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 7
Points : 0
Points : 0
Merci Doonge d'avoir pris le temps de réfléchir à mon pb... 2 jours car je ne suis pas très à l'aise en php !


1/J'ai compris votre réponse et cela marche. Mais Je ne souhaiterai pas que la deuxième donnée soit envoyée en paramètre dans l'URL mais récupérée en variable de session dans la deuxième page avec session_start(); et echo $_SESSION['cle'];

2/ A un autre endroit du site j'ai un foreach qui est simplifié comme cela :

Code :
1
2
3
4
5
6
7
8
9
10
foreach($var as $valeur)
{
 
$_SESSION['valeur0'] = $valeur['0'];
$_SESSION['valeur1'] = $valeur['1'];
$_SESSION['valeur2'] = $valeur['2'];
 
 
echo "<a href='$valeur0'>$valeur0</a>";
}

La valeur0 permet de construire mon url et là encore comment faire pour récupérer en deuxième page les 2 autres variables (sans transmission en paramètre dans l'url). Je précise que la valeur2 est un texte de news de plusieurs lignes.

Dans ce cas, est-ce encore possible ? Car là encore cela me retourne toujours en deuxième page les dernières variables de la liste quelque soit le lien cliqué.

Merci encore Doonge pour ton aide précieuse...
sabine2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 19h13   #4
Nouveau Membre du Club
 
Inscription : juillet 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 36
Points : 27
Points : 27
Ne surestime pas la valeur de mon aide, mais je suis enchanté de pouvoir t'aider.

J'ai l'impression que tu mélanges beaucoup les "clés" et les "valeurs" dans ton esprit.

Si tu imagines un local avec des casiers, les clés c'est le numéro des casiers (ou leur nom), tandis que la valeur c'est leur contenu.

Je dis cela car dans votre code, je vois que vous utilisez la variable $valeur0, alors qu'elle n'existe pas ?
Je vois qu'il existe $_SESSION['valeur0'], je vois qu'il existe $var, voire $valeur['0'] dans votre foreach, mais c'est tout : je ne vois pas de $valeur0.




Concernant le 1°), et je crois que je vais peut-être couper court à vos espoirs, ou vos illusions, mais à votre niveau vous ne devriez pas encore penser qu'il est possible que votre session (disons ce qui est contenu dans la variable $_SESSION) puisse deviner magiquement quel est le lien sur lequel on clique.

Lorsque je clique sur un lien quelque part, le site ne va pas "deviner" que "ah tiens c'est le lien n°5 que j'avais proposé sur la page précédente".

Le but des sessions, et de la variable $_SESSION, c'est de vous permettre de garder en mémoire des informations sur un utilisateur qui visite votre site pendant un petit moment (par exemple s'il donne son nom au début, vous pouvez le conserver jusqu'à la fin de la session).
C'est VOUS qui décidez de garder en mémoire ce que vous trouvez, c'est VOUS qui mettez des élements dans le casier $_SESSION pour y piocher plus tard.

Le programme ne décide pas tout seul ce qu'il enlève, ce qu'il ajoute, ce qu'il garde dans $_SESSION. Si vous décidez d'ajouter des URL dans $_SESSION, le programme ne va pas comprendre que vous voulez qu'il supprime tout seul les "mauvaises" URL.




Vu ce que je vois, je vous conseille d'expliquer ce que vous voulez faire, plutôt que demander ce qui ne va pas dans votre code, parce que je pense que c'est la façon dont vous vous y prenez qui est mauvaise, donc tout votre code est "mauvais" et ne vous permettra pas de faire ce que vous voulez.



Si ce que vous voulez faire c'est savoir l'URL sur laquelle l'utilisateur a cliqué, je vous conseille de vous intéresser à la variable "automatique" $_SERVER

http://php.net/manual/fr/reserved.variables.server.php

C'est une variable qui se construit toute seule, et qui contient des choses utiles comme par exemple :

$_SERVER['REQUEST_URI'] qui est "le lien sur lequel on a cliqué"
(et qui vaut généralement $_SERVER['SERVER_ADDR'] . $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'] )

$_SERVER['REQUEST_TIME'] qui donne "à quel moment" on a cliqué.

$_SERVER['HTTP_USER_AGENT'] qui est la signature du navigateur qu'on utilise pour aller sur le site.
Doonge est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h55.


 
 
 
 
Partenaires

Hébergement Web