Session et database - Apprendre-PHP.com

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

Session et database

Par Vini -  4 reponses -  Le 06/06/2009 -  Flux RSS - 

Bonsoir !

J'ai un problème au niveau de ma session et la base de donnée

prenons par exemple la class MYSQLUser si je souhaite récuperer les infos d'un user par son id je fais :

MYSQLUser
public static function findById($id)
{
$sql = 'SELECT * FROM '.self::T_USERS.'
WHERE '.self::F_ID.'= ?';
 
$pdo = self::getConnection();
$statement = $pdo->prepare($sql);
 
$statement->execute(array($id));
$rs = $statement->fetch(PDO::FETCH_OBJ);
if(empty($rs)) { return null; }
 
$user = new User();
$user->hydrateFromObject($rs);
 
return $user;
}

seulement voila j'ai aussi créer une class user !

et je pass en paramètre l'objet Session $session !

donc forcément quand je créer un nouvel user dans ma class MYSQLUser il me demande l'objet Session

et quand je lui met par curiosité il m'indique qu'une session exist déjà ! logique d'ailleurs !

donc voilà je suis un peu dans une impasse et je vois pas trop comment résoudre ce problème !

Si quelqu'un à une idée je suis prenneur ! 

 

Merci Vini

 

Réponses apportées à cette discussion

Par Mimosa -  Le 07/06/2009 - 
  1. donc forcément quand je créer un nouvel user dans ma class MYSQLUser
  2. il me demande 'objet Session et quand je lui met par curiosité il m'indique
  3. qu'une session exist déjà ! logique d'ailleurs !

 Non, pourquoi logiqiue ? Pourquoi une session existe déjà si tu n'as pas encore créé l'utilisateur ?

Il faut peut être que tu distingues les sessions pour toi en temps qu'utilsateur, des sessions créées en temps que visiteur. 

 
Par Vini -  Le 07/06/2009 - 

merci pour ton aide !

en fait je créer dans mon controller de base un objet user et comme tu me la dit il faut peut etre que je distingue plusieur type d'utilisateur !

ca j'instancie ma class user comme ça $user = new User($session)

je le fais d'entré car j'ai mis en place un systeme de suivi du visiteur dans un but de statistic !

Cependant ton idée est bonne je n'avais pas vu les choses comme ça ! pourrais tu développé un peu stp ?

 

voici le model de ma class user qui herite de ma class Personqui contient les attribut communs à d'autre class pour l'avenir 

User
  1. Class User extends Person
  2. {
  3.  
  4. private $session = null;
  5. protected $culture = null;
  6. protected $tracker = null;
  7. protected static $availableCultures = array();
  8.  
  9.  
  10. /**
  11.   * Constructor
  12.   *
  13.   * @access public
  14.   * @param Session $session
  15.   * @return void
  16.   *
  17.   */
  18. public function __construct(Session $session)
  19. {
  20. $this->session = $session;
  21. }
  22.  
  23.  
  24. /**
  25.   * Set the culture
  26.   *
  27.   * @access public
  28.   * @param $culture
  29.   * @return mixed throw | $culture
  30.   *
  31.   */
  32. public function setCulture($culture)
  33. {
  34. if(!$this->isValidCultures($culture))
  35. {
  36. throw new CultureException(sprintf('The given culture %s is not valid', $culture));
  37. }
  38. $this->setAttribute('user_culture', $culture);
  39. }
  40.  
  41.  
  42. /**
  43.   * Return the culture
  44.   *
  45.   * @access public
  46.   * @return string $culture
  47.   *
  48.   */
  49. public function getCulture()
  50. {
  51. return $this->getAttribute('user_culture');
  52. }
  53.  
  54.  
  55. /**
  56.   * Set available Culture
  57.   *
  58.   * @access public
  59.   * @param $culture
  60.   * @return array $culture
  61.   *
  62.   */
  63. public function setAvailableCultures(Array $culture)
  64. {
  65. self::$availableCultures = $culture;
  66. }
  67.  
  68.  
  69. /**
  70.   * Set Attribute
  71.   *
  72.   * @access public
  73.   * @param $name
  74.   * @param $value
  75.   * @return void
  76.   *
  77.   */
  78. public function setAttribute($name,$value)
  79. {
  80. $this->session->setAttribute($name,$value);
  81. }
  82.  
  83.  
  84. /**
  85.   * Returns the attribute from the session
  86.   *
  87.   * @access public
  88.   * @param $name
  89.   * @return string $value
  90.   *
  91.   */
  92. public function getAttribute($name)
  93. {
  94. return $this->session->getAttribute($name);
  95. }
  96.  
  97.  
  98. /**
  99.   * Is valid Culture
  100.   *
  101.   * @access public
  102.   * @param array $culture
  103.   * @return bool
  104.   *
  105.   */
  106. protected function isValidCultures($culture)
  107. {
  108. return in_array($culture, self::$availableCultures);
  109. }
  110.  
  111.  
  112. public function setTracker(Tracker $tracker)
  113. {
  114. $this->tracker = $tracker;
  115. }
  116.  
  117.  
  118. /**
  119.   * Add a new visit
  120.   *
  121.   * @access public
  122.   * @return Tracker::newVisitUser($this)
  123.   *
  124.   */
  125. public function newVisitUser()
  126. {
  127. return Tracker::newVisitUser($this);
  128. }
  129.  
  130.  
  131. /**
  132.   * Follow the visitor
  133.   *
  134.   * @access public
  135.   * @return Tracker::followUser($this);
  136.   *
  137.   */
  138. public function followUser()
  139. {
  140. return Tracker::followUser($this);
  141. }
  142.  
  143.  
  144. /**
  145.   * Save
  146.   *
  147.   *
  148.   * @access public
  149.   * @return MYSQL::Person(Person $Person)
  150.   *
  151.   */
  152. public function save()
  153. {
  154. return MYSQLUser::save($this);
  155. }
  156.  
  157.  
  158. /**
  159.   * Update
  160.   *
  161.   *
  162.   * @access public
  163.   * @return MYSQL::Person(Person $Person)
  164.   *
  165.   */
  166. public function update()
  167. {
  168. return MYSQLUser::update($this);
  169. }
  170.  
  171.  
  172. /**
  173.   * Delete
  174.   *
  175.   *
  176.   * @access public
  177.   * @return MYSQL::Person(Person $Person)
  178.   *
  179.   */
  180. public function delete()
  181. {
  182. return MYSQLUser::delete($this);
  183. }
  184.  
  185.  
  186. /**
  187.   *
  188.   * @return unknown_type
  189.   */
  190. public function __toString()
  191. {
  192. return $str = '.....';
  193. }
  1.  
  2.  
  3. }
  4. ?>

 

 

 

 

 

 
Par Mimosa -  Le 08/06/2009 - 

Salut,

 Je ne sais pas comment tu gères les sessions avec ta classe mais tu peux par exemple avoir une session utilisateur et une session suivie :

dans ton controller quand tu créés un user pour le suivie, tu lui passes ta session : $_session['suivie']

et lorsque tu récupères des données utilisateurs tu utilises une autre session : $_session['user']

De cette façon tu auras un user1 qui permet le suivie de celui-ci durant sa visite et un user2 qui te permettra te récupérer des informations.

Voila, je sais pas si c'est la meilleur méthode mais sa devrait faire l'affaire. Te reste plus qu'a voir ta classe session pour voir si elle gère les tableaux a plusieurs dimensions.

 
Par Vini -  Le 08/06/2009 - 

Bonsoir !

 

encore une fois j'avais pas pensé à ça ! tant mieux je dormirais moin bete ce soir !

ma classe Session est simple en voici l'extrait: 

 

Session
  1. <?php
  2.  
  3. class Session
  4. {
  5.  
  6. public function __construct()
  7. {
  8. }
  9.  
  10.  
  11. public function setAttribute($name,$value)
  12. {
  13. $_SESSION[$name] = $value;
  14. }
  15.  
  16.  
  17. public function getAttribute($name)
  18. {
  19. return isset($_SESSION[$name]) ? $_SESSION[$name] : null;
  20. }
  21.  
  22.  
  23. public function setLifeTime($lifetime = 30)
  24. {
  25. //ini_set('session.gc_maxlifetime', $lifetime * 60);
  26. }
  27.  
  28.  
  29. public function clearSession()
  30. {
  31. $_SESSION = array();
  32. unset($_SESSION);
  33. }
  34. }
  35. ?>

et en fait j'ai inclus l'appele de session dans mon controller de base de mon MVC 

c'est à dire comme je savais que j'allais copier ce code à chaque page pour suivre le visiteur je me suis suis plustot que de le dupliquer je le met une base dans la super class controller !

exemple: 

Abstract baseController
  1. Abstract class baseController
  2. {
  3.  
  4. const USER_DEFAULT_CULTURE = 'FR';
  5.  
  6. protected $registry;
  7. protected $user;
  8.  
  9.  
  10.  
  11. public function __construct($registry)
  12. {
  13. $this->registry = $registry;
  14. $this->culture();
  15. $this->trackUser();
  16. }
  17.  
  18.  
  19. public function user()
  20. {
  21. $this->registry->user = new User(new Session());
  22. $this->registry->user->setTracker(new Tracker);
  23. return $this->user = $this->registry->user;
  24. }
  25.  
  26.  
  27. public function getUser()
  28. {
  29. return $this->registry->user;
  30. }
  31.  
  32.  
  33.  
  34. protected function culture()
  35. {
  36. $lang = $this->registry->router->getCulture();
  37. User::setAvailableCultures(array('DE','BE','EN','ES','FR','IT','PT'));
  38.  
  39. $user = $this->user();
  40.  
  41. if(is_null($user->getCulture()))
  42. {
  43. $user->setCulture($this->registry->config['language']);
  44. }
  45.  
  46. if(!empty($lang))
  47. {
  48. try
  49. {
  50. $user->setCulture($lang);
  51. }
  52. catch(Exception $e)
  53. {
  54. throw $e;
  55. }
  56. }
  57.  
  58. require( LANG_APPLICATION . $user->getCulture() .'.php');
  59. }
  60.  
  61.  
  62. public function trackUser()
  63. {
  64. $user = $this->user;
  65.  
  66.  
  67.  
  68. if($user->getAttribute('follow'))
  69. {
  70. $user->followUser();
  71. echo $user->getAttribute('num_visitor');
  72. }
  73. else
  74. {
  75. $user->newVisitUser();
  76. }
  77. }
  78.  
  79. abstract public function index();
  80.  
  81. }
  82. ?>

 

 

 

 

 

 

 

Ajouter une réponse à la discussion

Seuls les membres loggués sont autorisés à poster dans les forums !