IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

$_SESSION rempli par un foreach()


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Points : 313
    Points
    313
    Par défaut
    Bonjour,

    tu peux essayer de fusionner ton résultat comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION=array_merge($_SESSION, $user);
    Ou ajouter les accolades après le foreach.
    N'oubliez pas le tag .
    Merci de ne pas envoyer de MP pour des problèmes techniques.

  3. #3
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Points : 313
    Points
    313
    Par défaut
    Je ne vois pas d'autres pistes, mais ton problème semble résolu...
    N'oubliez pas le tag .
    Merci de ne pas envoyer de MP pour des problèmes techniques.

  5. #5
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Pour resoudre ton pb de valeur en double, tu fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $user = mysql_fetch_array($result, MYSQL_ASSOC);
    If it's not broken, don't fix it.
    BiliBa Built on top of Zend Framework

  6. #6
    Membre habitué
    Inscrit en
    Février 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 192
    Points : 198
    Points
    198
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2007, 18h04
  2. Réponses: 5
    Dernier message: 13/03/2007, 20h08
  3. Valeur par défaut d'un liste créée par c:foreach
    Par karsmy99 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 28/02/2007, 11h13
  4. onchange d'une zone remplie par programmation
    Par japz dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/05/2006, 14h58
  5. [MySQL] Tableau rempli par une BDD
    Par xender dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/05/2006, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo