JeuWeb - Crée ton jeu par navigateur
question technique php[résolu] - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : question technique php[résolu] (/showthread.php?tid=855)



question technique php[résolu] - rat_eat_hamster - 21-02-2007

alors disons que j'ai une classe user dans le genre
Code :
class Cuser
{
  function LoadByName( $name )
  {
    $res = query( 'SELECT * FROM user WHERE name=\'' . $name . '\'' );
    $user = mysql_fetch_assoc( $res );

    $res = query( 'SHOW FULL COLUMNS FROM user' );
    while( $col = mysql_fetch_assoc( $res ) )
    {
      if( preg_match( '/(int)|(float)|(bool)/i', $col['Type'] ) )
        $string = '$this->'.$col['Field'].'='.$user[$col['Field']].';';
      else
        $string = '$this->'.$col['Field'].'=\''.$user[$col['Field']].'\';';
      eval( $string );
    }
  }
}

donc elle crée des membres dynamiquement à partir de la base de donnée(pour éviter de taper tous les membres et gérer les modifs)

en fait mon problème c'est que quand je crée une instance et que je la mets dans une session j'arrive pas à récuperer les membres dynamiques sur une AUTRE page

page1:
Code :
$user = new Cuser();
$user->LoadByName('un_pseudo');
$_SESSION['user'] = $user;

page2:
Citation :echo $_SESSION['user']->id;// n'affiche rien
echo $_SESSION['user'];//affiche bien Object

d'après ce que j'ai compris c que php ne mets dans la session que les membres déclarés dans la classe...
quelqu'un a t-il était confronté au mem problème?
ya t-il un moyen d'ajouter dynamiquement des membres à la classe et pas à l'instance?
une idée?(h)


RE: question technique php - pascal - 21-02-2007

salut,

pour l'objet non reconnu via la session, il faut :
_ inclure le code de la classe avant toute référence à la variable
_ serializer les objets : cf http://fr.php.net/manual/fr/function.serialize.php


pour ton code pas hyper lisible, pourquoi ne pas utiliser mysql_fetch_object() ?

A+

Pascal


RE: question technique php - Maegia - 21-02-2007

Un objet ne peut être transféré via une session, un GET ou un POST, malheureusement. Tel que l'a dit Pascaltje, un serialize et un unserialize peuvent t'aider à résoudre ton problème.

Bonne chance ! :-)


RE: question technique php - rat_eat_hamster - 21-02-2007

ah magnifique !
pourtant j'avais lu quelque part que php serializait automatiquement les objets dans les sessions...

et utile en effet mysql_fetch_object
ca m'apprendra à rester accroché à la première fonction trouvée

merci encore(h)