pb passage en parametre d'objet (private+serialize+php5)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : pb passage en parametre d'objet (private+serialize+php5)

par simoh » 26 nov. 2008, 15:57

on pourra utiliser les sessions ou cookies pour eviter l'utilisation de urlencode
bonne chance

par niiiko » 19 févr. 2005, 16:27

resolu: il fallait utiliser 'urlencode()' pour encoder l'objet avant de le passer en paramètre. Merci à olivier pour son aide.

par Invité » 18 févr. 2005, 23:18

voici ce que renvoie var_export apres la creation de l'objet:
class client { private $client_nom_id = 'mimi'; public $lieu_siege = 'pari'; public $phone_num = '12'; }

et voila ce qui l'affiche apres le passage dans l'url:
false

logique vu qu'il passe une donnée éroné lorsqu'il passe l'objet en paramètre.

par Invité » 18 févr. 2005, 22:53

pour la redeclaration de la classe, c'etait bon: j'ai inclu le fichier contenant la classe dans les 2 pages qui en ont besoin.

je vais essayer var_export pour te dire ce que ca retourne, mais je crois pas que ca nous avancera a grand chose.

En tout cas merci pour votre aide! c sympa

par haugure » 18 févr. 2005, 18:24

Décidément ton probleme est intéressant :)...

Essaye de voir ce que renvoie ceci :

Code : Tout sélectionner

var_dump($sobj); // n'affiche que les donnée public var_export($sobj); //affiche les protected et les privates avec php5
Tien moi au courant ;)

par haugure » 18 févr. 2005, 18:00

La visibilité d'une propriété ou d'une méthode peut être définie en préfixant la déclaration avec le mot-clé : public, protected ou private. Les éléments déclarés publics public peuvent être utilisés par n'importe quelle partie du programme. Les éléments protégés protected limitent l'accès aux classes héritées (et à la classe qui a définie l'élément). Les éléments privés private limitent la visibilité uniquement à la classe qui les a définis.
Maintenant que je pense avoir saisie le principe je pense que ton erreur dois se situer dans la déclaration de ta classe ou plutot sa redeclaration.

Imaginons qu'on passe une classe par URL ou par une session... si tu ne redeclare pas ta classe en redifinissant sa structure avant de la "deserialiser" (avoir oublier d'inclure sa structure contenu dans un fichier *.inc par exemple) logiquement PHP aurra aucune facon de vérifier que tel ou tel attribut est public ou privé... a vrai dire je ne sais pas comment il pourrait faire pour gérer ca :shock: ca m'intéresse beaucoup d'ailleur de savoir comment il fait si je me trompe ... :D

Je pense donc qu'il doit falloir faire une redeclaration de la classe dans la page qui recoit la classe ceci avant de faire un unserialize.

par haugure » 18 févr. 2005, 15:56

ouch je ne savais pas et bien je vais me documenter merci :oops:

par matt_m » 18 févr. 2005, 15:51

par haugure » 18 févr. 2005, 15:50

Contrairement aux langages orientés objet (C par exemple) les attributs(propriétés et méthodes) d'une classe PHP ne peuvent être déclarées protected, private ou public ca parait d'ailleur logique pkoi voudrais tu avoir un element de type private ?!? puisque seul ton serveur meme pas toi pourrait y accéder !

par matt_m » 18 févr. 2005, 15:46

bonjour

dis moi pourquoi faire passer un objet dans l'url?
pourquoi pas par des sessions
question secu, cela serait surement plus judicieux...

pb passage en parametre d'objet (private+serialize+php5)

par niiiko » 18 févr. 2005, 12:35

Bonjour,
Je travaille sur un projet php5.

- J'ai une classe 'client' possedant plusieurs attributs et methodes.
- j'instancie cette classe.
- Je serialize l'objet ($sobj = serialize($obj);)
- Je passe l'ojet serialisé à une autre page (href='./page_modif_client.php?sobj=$sobj')
- Je deserialise l'objet dans la nouvelle page et je l'utilise.

Voila, tout se passe bien tant que toutes les attributs de la classe 'client' sont public.
$sobj contient alors:
O:6:"client":3:{s:13:"client_nom_id";s:3:"rrr";s:10:"lieu_siege";s:7:"inconnu";s:9:"phone_num";s:7:"inconnu";}

Si j'en met 1 attribut en private
$sobj contient alors:
O:6:"client":3:{s:21:"clientclient_nom_id";s:3:"rrr";s:10:"lieu_siege";s:7:"inconnu";s:9:"phone_num";s:7:"inconnu"

;}

ce qui est un peu bizarre, et surtout rend impossible la deserialisation.
(à noter que j'utilise une methode 'get' public pour recuperer mon attribut private).
je ne sais pas d'ou vient ce probleme et je n'arrive donc pas à le résoudre.

J'espere que vous pourrez m'aider. Merci d'avance
Niiiko