passage de variable sessions ayant plusieurs valeurs

segolène
Invité n'ayant pas de compte PHPfrance

22 oct. 2006, 03:04

voilà, je rencontre une petite difficulté au sujet du passage de variables de sessions

je veux récupérer une variable de session passée à une autre page.
cette variable est en fait issue d'une requete $select faite à une base mysql

$select ="select* from ma table";
...
$var=$resu['champs'];
$_SESSION['var']=$var:

naturellement, il ya plusieurs résultats à la requete correspondant à des valeurs différentes.
la session ne passe. La page demandée pour récupérer la var session n'affiche rien ...

Comment passer la variable à la page (qui peut prendre plusieurs valeurs) ?

merci pour votre aide

ViPHP
ViPHP | 1961 Messages

22 oct. 2006, 03:08

Bonsoir,

Il te suffis de faire de ta variable session un tableau (ça reste une variable PHP)
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Invité
Invité n'ayant pas de compte PHPfrance

22 oct. 2006, 13:31

ok ! donc, sur ma première page, je passe :

$_SESSION['var']=array(); $_SESSION['var']=$var;

et après ? je fais quoi ?

ViPHP
ViPHP | 1961 Messages

22 oct. 2006, 14:07

Bonjour,

Un exemple te fera mieux comprendre

Premier fichier
<?php
session_start();
$_SESSION['var'] = Array('val1' => 1, 'val2' => 2);
header('Location: sess1.php');
?>
Ce fichier crée une variable session appellée var qui est un tableau associatif contenant 2 valeurs val1 = 1 et val2 = 2. Il appelle un second appellé 'sess1.php' dont voici le code
<?php
session_start();
echo 'Val de $_SESSION[\'var\'][\'val1\'] = ' . $_SESSION['var']['val2'] . '<br />';
echo 'Val de $_SESSION[\'var\'][\'val2\'] = ' . $_SESSION['var']['val2']. '<br />';
echo '<pre>';
print_r ($_SESSION);
echo '</pre>';
?>
Il ne fait que l'affichage des valeurs de la session
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Invité
Invité n'ayant pas de compte PHPfrance

22 oct. 2006, 15:38

bon ! j'ai repris ton exemple..mais j'ai encore quelques soucis

mon exemple est le suivant : je récupère des noms d'image depuis une base de données ($image) asociées à des id

ca donne donc ceci : $_SESSION['image']=array($id=>$image);

la page affichée ensuite l'est depuis un lien href : <a href='test.php'>...
inclus dans un tableau qui affiche tous les résultats de la requete base
sur la page test, je passe : $image=$_SESSION['image'][$id]; echo $image:

le problème, c'est que je ne récupère qu'une seule et même valeur de $image (image1.jpg), alors que normalement, je devrais sur chaque lien récupérer la valeur de $image à $id correspondant

ViPHP
ViPHP | 1961 Messages

22 oct. 2006, 15:57

Re,
Dans ton exemple tu ne remplis qu'une fois. Donc tu ne peux récupérer qu'une valeur.
Et comme ceci
// Avant ta boucle
$_SESSION['image']=array();
// Dans ta boucle
$_SESSION['image'][$id] = $image;
Ça me semble plus logique.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Invité
Invité n'ayant pas de compte PHPfrance

22 oct. 2006, 16:53

désolé ! mais cela donne exactement le même résultat.

je récupère bien dans mon tableau <table> les bons résultats dans la première page, mais sitot que je passe à la seconde (fichier test), je ne récupère qu'une seule valeur de $image

bizarre, bizarre !

ViPHP
ViPHP | 1961 Messages

22 oct. 2006, 17:03

Re,
Comme tu le dis, biz...

Poste ton bout de code entre les balises [ PHP] et [ /PHP] sans les espaces après [

Si tes fichiers sont volumineux ne poste que

Fichier 1 - La partie où tu affectes tes valeurs aux variables session.
Ficher2 - La partie où tu les récupères.

Je suppose que dans ton tes 2 fichiers tu as la directive 'session_start()' en début de fichier.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Invité
Invité n'ayant pas de compte PHPfrance

22 oct. 2006, 17:13

$select="select* from table";
$query=mysql_query ($select);
$_SESSION['image']=array();
while($resu=mysql_fetch_array($query))
{
$id=$resu['ID']; $_SESSION['id']=$id;
$image=$resu['image']; $_SESSION['image'][$id]=$image;

echo"<table><tr><td><a href='test.php'><img src='bouton.gif'></a></td></tr></table>";
}
dans mon fichier test :
$id=$_SESSION['id'];
$img=$_SESSION['image'][$id];echo$img;
voilà ! naturellement, il ya bien session_start(); au début de chaque fichier

ViPHP
ViPHP | 1961 Messages

22 oct. 2006, 17:23

Re,
Remplace tes lignes dans fichier2 par
foreach($_SESSION['image'] as $id =>$image)
 echo '$id = ' . $id . ' $image = ' . $image . '<br />';
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Invité
Invité n'ayant pas de compte PHPfrance

22 oct. 2006, 17:30

le résultat est rigoureusement identique !

ViPHP
ViPHP | 1961 Messages

22 oct. 2006, 17:50

Re,
Dans ton premier fichier, tu est sur que ça
$select="select* from table";
$query=mysql_query ($select);
ça retourne ce que tu veux ?, parceque l'étoile collée au select ???

Dans ton echo (fichier 1) tu as bien tes résultats ?
Essaie ça dans ton fichier1
$select="select * from table";
$query=mysql_query ($select) or die('ERR SQL : ' . mysql_error());
$_SESSION['image']=array();

while($resu=mysql_fetch_array($query))
{
   echo '$id = ' . $resu['ID'] . ' Image = ' . $resu['image'] . '<br />';
   $_SESSION['image'][$resu['ID']] = $resu['image'];
}
echo "<table><tr><td><a href='test.php'><img src='bouton.gif'></a></td></tr></table>";
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Invité
Invité n'ayant pas de compte PHPfrance

22 oct. 2006, 18:06

je n'ai pas de problème pour afficher ce que je veux dans le fichier 1 : je récupère autant de résultats qu'il ya de données dans la base

de plus ma commande passée au fichier 2 fonctionne très bien dans le fichier 1 (si je la teste) : j'affiche bien toutes les $image

mais je vais essayer ta formule

Invité
Invité n'ayant pas de compte PHPfrance

22 oct. 2006, 18:15

ok ! désolé pour ce malentendu ! cela fonctionne (j'avais oublié de remettre le array() avant la boucle


par contre; mon intention initiale est de récupérer depuis le lien le $image correspondant au $id (et non tous les résultats)

la commande foreach n'est donc pas adaptée

y en a t-il une autre (je ne suis pas très adroit avec la gestion des tableaux)

merci d'avance

ViPHP
ViPHP | 1961 Messages

22 oct. 2006, 18:29

Re,

Quand ça ne marche pas, on fait des tests, c'était le but de la boucle 'foreach' (savoir si je reçois tout).

Mais je comprends pas bien, au départ tu dis je ne reçoi qu'une valeur ça sous entends 'je les veux toutes'.

Là c'est juste une, bon....

En gros tu veux créer dans ta première page un lien par image, si on clique desus aller dans la page 2 et récupérer le id et l'image (cliquée) dans la variable de session ?

Si c'est ça tu n'as pas besoin de les garder toutes en session à la page 1
Dis-moi ce que tu veux exactement.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein