[POO] Variables de sessions dans les objets

page 1 page 2
Répondre
rosema
rosema
Déconnecté
c 'est incroyable ce que je peux écrire comme conneries
J'ai un petit problème, c'est que les variables de session que je crée dynamiquement par les methodes de mes objets ne semblent pas perdurer avec le rechargement des pages...
Quelqu'un sait il pourquoi?
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
A quoi te servent ces variables ?

Tu ne chercherais pas par hasard à faire "persister" tes objets entre chaque page ?
rosema
rosema
Déconnecté
c 'est incroyable ce que je peux écrire comme conneries
Non, non,
En fait c'est une classe(eh oui maintenant j'arrète plus) de recherche d'entrée sql qui permet notamment d'enregister les reésulats dans les varibles de session.
Plus clairement, l'utilisateur se connecte, il envoi les $_POST à ma classe qui reherche dans la base son login et pass et eventuellement enregistre le reste des varibales(photo, adresse mail, ...) dans la session.
Les variables de session sont donc déclarées dans ma méthode et je pense que c'est ça qui les empèche de perdurer.
Rex
Rex
Déconnecté
Un hamster dit : J'ai dressé le scientifique, quand j'appuie sur le bouton, il me donne des graines
"déclarées dans ma méthode" ?
J'espère que tu n'utilises pas session_register ???
rosema
rosema
Déconnecté
c 'est incroyable ce que je peux écrire comme conneries
non, non cher ami rassure toi je les déclare en bon et due forme comme le préconise le manuel. T'as pas une idée de ce qu'il faudrait que je fasse?
rosema
rosema
Déconnecté
c 'est incroyable ce que je peux écrire comme conneries
  1. <?php
  2. class action_mysql{  
  3. function action_mysql(){  
  4. $this->comparaison_ok = true;  
  5. $this->insertok = true;  
  6. }  
  7. function insertion($table, $champs_forces, $session = false, $cookie = true){  
  8. $this->champs_forces = $champs_forces;  
  9. $nb = count($this->champs_forces);  
  10. while (list($this->Intitule, $this->Valeur) = each($this->champs_forces)){  
  11. $this->liste .= $this->Intitule;  
  12. $this->values .= $this->Valeur;  
  13. if($nb >1){$this->liste .= ', ';$this->values .= ', ';$nb = $nb-1;}  
  14. }  
  15. $this->requete = 'INSERT INTO '.$table.' ('.$this->liste.') VALUES ('.$this->values.')';  
  16. mysql_query($this->requete) or die ('Erreur:'.mysql_error().$this->requete);  
  17. return $this->insertok;  
  18.  
  19. }  
  20. function recherche_entree($table, $valeurs, $session = false, $cookie = false){  
  21.  
  22. $this->valeur_comp = $valeurs;  
  23. $this->requete = "SELECT * FROM$tableWHERE";  
  24. reset($this->valeur_comp);  
  25. $nb = count($valeurs);  
  26. while (list($this->Intitule, $this->Valeur) = each($this->valeur_comp)){  
  27. $this->requete .= $this->Intitule.' = "'.$this->Valeur.'"';  
  28. if($nb >1){ $this->requete .= ' AND ';$nb = $nb-1;}  
  29. }  
  30. $result = mysql_query($this->requete) or die ('Erreur:'.mysql_error().$this->requete);  
  31. if(mysql_affected_rows()==1){  
  32. $this->valeur_comp = mysql_fetch_array($result)or die ('Erreur:'.mysql_error().$this->requete);  
  33. reset($this->valeur_comp);  
  34. while (list($this->Intitule, $this->Valeur) = each($this->valeur_comp)){  
  35. if($session = true){$_SESSION[$this->Intitule]= $this->Valeur;}  
  36. if($cookie = true){setcookie($this->Intitule, $this->Valeur,time()+3600);}  
  37. }  
  38. return $this->comparaison_ok;  
  39. }  
  40. else{$this->comparaison_ok = false; return $this->comparaison_ok;}  
  41. //elseif(mysql_affected_rows()>1){$this->comparaison_ok = false; return $this->comparaison_ok;}  
  42. }  
  43. }  
  44. ?> 

Je comprend vraiement pas!!
keitarosan
keitarosan
Déconnecté
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
tu as bien un "session_start();" sur toute les pages qui appellent cette classe ? (et tout en haut de préférence ?)

Ensuite, si tu travailles en local, et sous windows, selon la config, il peut pas sauvegarder les sessions ^^
Rex
Rex
Déconnecté
Un hamster dit : J'ai dressé le scientifique, quand j'appuie sur le bouton, il me donne des graines
ATTENTION : La déclaration de la classe doit obligatoirement être faite avant d'appeler le session_start.

Sur le code, je dirais rien, tu risquerais de mal le prendre smiley
zebden
zebden
Déconnecté
zebdinou pour les intimes / Blog : http://www.zebden.fr
ATTENTION : La déclaration de la classe doit obligatoirement être faite avant d'appeler le session_start.


Je déclare toujours avant mon session_start() (toujours au depart de toute facon) et ensuite mes class.

Pour le code , pareil, mais c'est en forgeant qu'on devient forgeron !
keitarosan
keitarosan
Déconnecté
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
faut lui laisser ca, la personne commence a programmer en classes :)

J'en connais pas beaucoup qui font cet effort la ;)

Et je pense que si les remarques sont constructive, ca ne gene pas ^^

Question: Pourquoi déclarer les classes avant le "session_start()" ?
J'ai toujours mis le session_start() en haut de ma page index.php (qui est la seule page visible de mon site), avec des dizaine d'include dedans.il serait assez difficile de mettre le session_start() apres la déclarations des classes ^^.

Ou alors t'as fait une faute de frappe ;), et tu voulais dire avant :)
Rex
Rex
Déconnecté
Un hamster dit : J'ai dressé le scientifique, quand j'appuie sur le bouton, il me donne des graines
  1. <?php
  2. class Test {  
  3. public $var = null;  
  4. }  
  5.  
  6. session_start();  
  7.  
  8. $_SESSION['objet'] = new Test();  
  9. $_SESSION['objet']->var;  
  10. ?> 


Maintenant, sur la page suivante, je fais :
  1. <?php
  2. session_start();  
  3. class Test {  
  4. public $var = null;  
  5. }  
  6. echo $_SESSION['objet']->var = 5;  
  7. ?> 


Sachant que le tableau $_SESSION est remplit lors de l'exécution de session_start, comment PHP peut savoir quelle est la structure de la classe à ce moment là puisqu'elle n'est pas encore déclarée ?

Enfin, j'dis ça, mais la doc l'explique mieux que moi ;-)
Rex
Rex
Déconnecté
Un hamster dit : J'ai dressé le scientifique, quand j'appuie sur le bouton, il me donne des graines
oups, j'me suis trompé entre l'affectation et l'affichage !
keitarosan
keitarosan
Déconnecté
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
ouep, enfin c'est un cas precis ou l'on stocke un object dans une session. Ce qui n'est pas trop recommander d'ailleur, car ca alourdis le serveur (peut etre pas sur une centaine de connexion, mais sur les millers...)

Mais sinon, dans ce cas la effectivement :)
Enfin, ca doit rester rare je pense ^^
rosema
rosema
Déconnecté
c 'est incroyable ce que je peux écrire comme conneries
Mon sesion_start() est toujours en haut, au début de mes pages.
Pour les "commentaires" sur le script je suis ultra preneur même les plus méchants du moment que je peux en faire quelque chose.
L'idée de ma classe c'est de récuperer ou inserer des données dans ma table et éventuellement les mettre en session ou cookies, ça me sert énormément. Si c'est une connerie faut me le dire... :)
Rex
Rex
Déconnecté
Un hamster dit : J'ai dressé le scientifique, quand j'appuie sur le bouton, il me donne des graines
Bon, il y avait de TRES nombreuses erreurs.
La plus flagrante étant "if($session = true)". Avec un seul égal, ça ne peut pas fonctionner car c'est une affectation et non une comparaison.

Ensuite :

1/ affectes des variables locales et non des propriétés de classes inexistante ($requete et non $this->requete, cette dernière n'étant pas déclarée par un "var" dans la classe.
2/ Ton constructeur de classe ne servait à rien
3/ Je t'invite à découvrir les joies de la fonction implode et array_keys
4/ oublies "while(list=each)" et goûtes à la simplicité de "foreach"
5/ Ta méthode "insertion" avait des paramètres inutilisés ?!? ($session et $cookie)
6/ Pourquoi retourner "insertok" alors que ce sera TOUJOURS le cas sauf quand ça plante, mais il y a un "die"
7/ Oublies le "SELECT *"
8/ Pour un SELECT, c'est mysql_num_rows et non mysql_affected_rows
9/ Utilises mysql_fetch_assoc qui retourne directement un tableau associatif (ça fait sauter de nombreuses lignes de code)
10/ Utilises un entier plutôt que des paramètres booléens
11/ Evites de mélanger anglais et français ($requete et $result)
12/ Ton approche objet est à revoir. Tu ne sembles pas comprendre à quoi ça sert vraiment. Inutiles de faire des classes si c'est pour faire ce genre de chose.
Voilà, c'est déjà pas mal.
En prime, voici ton code revu (et encore je ne trouve pas ça très objet!):

"code dans le wall"

Pour expliquer le point N°10, regardes ceci :
  1. <?php
  2. $objet->recherche_entree( $champs, $condition, true, false );  
  3. ?> 

En lisant ce code sans regarder la signature de la méthode on ne sait pas à quoi correspond "true, false" alors que ceci :
  1. <?php
  2. $objet->recherche_entree( $champs, $condition, ENREGISTREMENT_SESSION );  
  3. ?> 

On sait que ça enregistre en session et
  1. <?php
  2. $objet->recherche_entree( $champs, $condition, ENREGISTREMENT_SESSION + ENREGISTREMENT_COOKIE);  
  3. ?> 

Ca fait les deux.
page 1 page 2
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Php - Breizh Blog