passage de variable sessions ayant plusieurs valeurs

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : passage de variable sessions ayant plusieurs valeurs

par Invité » 22 oct. 2006, 21:35

je te remercie

je connais bien cette solution, c'est celle que j'utilise d'habitude, mais là je voulais le faire avec les sessions pour rester cohérent avec l'ensemble de mon application

merci encore

nb : j'espère que la solutionque j'ai trouvé est la bonne (passer le $id dans l'URL ce que je voulais en fait éviter)

par Ajoloca » 22 oct. 2006, 19:06

Re,

Dans ta première page, tu dois bien offrir le choix à l'utilisateur, donc un tableau, à moins que tu sentes d'attaque pour le faire avec CSS ?

Je vais te proposer la solution la plus simple (pas la plus élégante) sans utilisation des sessions
Page1
// Récupération des données dans la base
$select="select * from table";
$query=mysql_query ($select) or die('ERR SQL : ' . mysql_error());
// Création du tableau (pour le choix)
echo '<table>';
while($resu=mysql_fetch_array($query))
{
   echo "<tr><td><a href='test.php?id=". $resu['ID'] . "&img=" . $resu['image'] . "'><img src='bouton.gif'></a></td></tr>";
}
echo '</table>';
Dans ta page2
// Teste l'existance du choix utilisateur
if((isset($_GET['id']) && !empty($_GET['id'])) && (isset($_GET['image']) &&  !empty($_GET['image']))){
   // Récupération des variables
   $id = $_GET['id'];
   $image = $_GET['image'];
   // A partir de maintenant tu les utilises comme bon te semble
}
else{
   // Ton gestionnaire d'erreur(s)
}
Si tu le veux absolument en sessions, c'est une approche différente.

par Invité » 22 oct. 2006, 18:55

BON, j'ai trouvé une solution

à la page 1, je passe : <a href='test.php?id=$id'>

à la page 2, je passe $val=$_GET['id'];

puis : $image=$_SESSION['image'][$val];

et je récupère mon image résultat tant désirée


merci beaucoup pour ton aide !

par Invité » 22 oct. 2006, 18:43

oui, en effet..je perçois que je me suis mal expliquée

j'en suis désolée

en effet, je veux afficher sur la page 2, uniquement l'image concernant le id cliqué...

ma formule initiale était $_SESSSION['image']=$image;

puis dans ma page 2 : $image =$_SESSION['image']; mais ce que je récupère n'est que la première ligne de ma requete $select et non pas la ligne correpondant à l'id envoyée

il n'ya a peut etre pas besoin de tableaux ??!!

par Ajoloca » 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.

par Invité » 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

par Invité » 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

par Ajoloca » 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>";

par Invité » 22 oct. 2006, 17:30

le résultat est rigoureusement identique !

par Ajoloca » 22 oct. 2006, 17:23

Re,
Remplace tes lignes dans fichier2 par
foreach($_SESSION['image'] as $id =>$image)
 echo '$id = ' . $id . ' $image = ' . $image . '<br />';

par Invité » 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

par Ajoloca » 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.

par Invité » 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 !

par Ajoloca » 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.

par Invité » 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