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 27/07/2006, 12h10   #1
Membre habitué
 
Inscription : février 2005
Messages : 186
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 186
Points : 149
Points : 149
Par défaut $_SESSION rempli par un foreach()

Bonjour à tou(te)s

Je débute encore dans le petit monde de la programmation web, j'ai découvert depuis peu les sessions, et le tableau associé.

Si j'ai bien compris ce tableau est créé lors du lancement de session_start() et enregistré sur le serveur, il est accessible pour chaque nouvelle page visitée.

Je souhaiterai donc remplir ce tableau avec les infos de mes utilisateurs, histoire de ne pas avoir à récupérer dans la DB ces informations à chaque nouvelle page vue, ce qui est une perte de temps inutile (en plus guerre contre les dépenses inutiles d'énergie en plus ^^).

Pour une plus grande facilité d'entretient du site, je souhaiterai aussi remplir ce tableau avec un foreach(), afin de pouvoir rajouter un champ dans la base de données sans avoir à me soucier de le rajouter dans le code aussi. Pour ça je passe par ça :

Code :
1
2
3
4
5
6
7
 
$query = 'SELECT * FROM users_table WHERE user_id = '.$user_id;
$result = mysql_query($query) or die ($query.'<br/>'.mysql_error());
$user = mysql_fetch_array($result);
 
// c'est cette ligne qui pose problème :
foreach($user AS $clef => $valeur) $_SESSION[$clef] = $valeur;
Mais malheureusement avec cette syntaxe, le remplissage de $_SESSION ne se fait pas.

Et je ne vois malheureusement pas ce que je fais de mal ici.

Cordialement,

mathias
novices est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 12h20   #2
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
Bonjour,

tu peux essayer de fusionner ton résultat comme ceci :
Code :
$_SESSION=array_merge($_SESSION, $user);
Ou ajouter les accolades après le foreach.
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 13h00   #3
Membre habitué
 
Inscription : février 2005
Messages : 186
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 186
Points : 149
Points : 149
En fait le foreach() me sort les valeurs en double, une première fois avec la clef en version numérique, une seconde fois avec la clef en chaine.

Pour que ça marche j'ai du faire un truc que je ne trouve pas très classe :
Code :
1
2
3
4
5
6
7
8
 
		foreach($user as $clef => $valeur)
		{
			if (!is_int($clef))
			{
				$_SESSION[$clef] = $valeur;
			}
		}
Ça présente l'avantage d'être fonctionnel :-)

PS.: j'ai testé avec array_merge et avec les accolades, mais sans succès
novices est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 13h37   #4
Membre confirmé
 
Inscription : janvier 2004
Messages : 537
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 537
Points : 264
Points : 264
Je ne vois pas d'autres pistes, mais ton problème semble résolu...
navis84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 13h57   #5
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
Pour resoudre ton pb de valeur en double, tu fais un :
Code :
$user = mysql_fetch_array($result, MYSQL_ASSOC);
__________________
If it's not broken, don't fix it.
BiliBa Built on top of Zend Framework
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 14h39   #6
Membre habitué
 
Inscription : février 2005
Messages : 186
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 186
Points : 149
Points : 149
Un grand merci à vous deux, je préciserai juste une petite chose, j'ai fait une erreur dans mon premier message, j'utilise actuellement postgres (il m'a semblé plus efficace lors de précédents tests, il faut que j'apprenne à m'en servir pour faire un vrai test, grandeur nature, pour me faire une idée précise sur la question...).

Et avec PG pg_fetch_array() oblige d'indiquer quelle ligne on retourne si on veut indiquer le paramètre PGSQL_ASSOC, et en fouillant un peu, j'ai pu trouver la fonction pg_fetch_assoc() qui est équivalente à pg_fetch_array() avec PGSQL_ASSOC, mais sans avoir à préciser quelle ligne on veut, ce qui permet de récupérer plusieurs lignes dans un tableau ne contenant que les indices de type chaine.

Merci encore
novices est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h09.


 
 
 
 
Partenaires

Hébergement Web