Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/07/2007, 09h57   #1
Membre du Club
 
Inscription : mai 2007
Messages : 188
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 188
Points : 56
Points : 56
Par défaut [POO] Comment est-ce que je pourrais extraire mes données ? :(

Bonjour,

J'ai des données qui ressortent d'une variable (Object id #22) objet sous cette forme là, comme est-ce que je pourrais récupérer les nombreuses valeurs :/

Est-ce la méthode des tableau ou est-ce qu'il existe quelques chose de propre à l'object ?

Auriez-vous une idée ?

Code :
1
2
3
4
5
6
7
8
9
10
11
	O:4:"ville":16:{s:14:"vlle_session";
O:7:"session":5:{s:17:"session_ville";
s:4:"ville";
s:20:"session_user_agent";
s:74:"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
s:17:"session_ip";
s:13:"192.68.12.194";
s:14:"session_time";i:1154285430;
s:17:"session_chktime";b:0;
}s:15:"ville_pdc";a:1:{i:1;O:6:"
object":1:{s:19:
D'avance merci
@+
M.
Cvbdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 09h59   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
D'où vient cet objet ? Quelle est la classe ?
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 10h04   #3
Membre du Club
 
Inscription : mai 2007
Messages : 188
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 188
Points : 56
Points : 56
Citation:
Envoyé par vg33
D'où vient cet objet ? Quelle est la classe ?
Bonjour,

c'est une variable extraite d'une base de donnée sous une forme codé...
'$ville' renvoie: Object id#22... $recville-> ville étant la valeur récupérer de la base de donnée...


Code :
$ville= unserialize(base64_decode($recville->ville));
D'avance merci
@++
Cvbdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 10h13   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
En fait, tu as sérializé un objet avant de l'insérer en base de donnée. Il faut donc connaitre la classe qui a permis de générer cet objet avant stockage, et voir s'il existe des accesseurs.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 11h32   #5
Membre du Club
 
Inscription : mai 2007
Messages : 188
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 188
Points : 56
Points : 56
Je suis entrain de remonter la chaine....
Les commandes sont stockés dans $product, un objet est apellé et il semble qu'il remplisse un tableau par la suite...

cdata est ensuite récupéré sur une autre page et la valeur seras stocké dans la base...


Code :

Code :
1
2
3
4
5
6
7
8
cart::display_product_buyform($product);
$data = new object('data', 'type');
$data->type = 'buyform';
$data->data = $product;
 
(...)
 
<input type="hidden" name="cdata" value="<?php echo base64_encode(serialize($data)); ?>" />

Class :


Code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class object {
 
        private $_attributes = array();
 
        function __construct() {
                $args = func_get_args();
 
                foreach($args as $arg) {
                        if (is_string($arg)) {
                                $this->_attributes[$arg] = null;
                        }
                        if (is_array($arg)) {
                                foreach($arg as $a) {
                                        if (is_string($a)) {
                                                $this->_attributes[$a] = null;
                                        }
                                }
                        }
                }
        }

Ma question reste "intact" comment est-ce que je peux récupérer mes données ? :/

D'avance merci
@++
M.
Cvbdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 11h41   #6
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Avec cette classe précise tu ne peux pas, le tableau des arguments est défini en private donc tu n'y as pas accès en dehors de l'instance de la classe, et tu n'as aucune méthode pour y accéder.

Il faut donc créer une méthode qui va te renvoyer tes valeurs depuis la classe (une nouvelle méthode de la classe donc). Peux-tu la modifier?
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 11h47   #7
Membre du Club
 
Inscription : mai 2007
Messages : 188
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 188
Points : 56
Points : 56
Citation:
Envoyé par koopajah
Avec cette classe précise tu ne peux pas, le tableau des arguments est défini en private donc tu n'y as pas accès en dehors de l'instance de la classe, et tu n'as aucune méthode pour y accéder.

Il faut donc créer une méthode qui va te renvoyer tes valeurs depuis la classe (une nouvelle méthode de la classe donc). Peux-tu la modifier?

J'ai essayer d'utiliser : $return_str = get_object_vars($obj);
J'ai quelques chose mais j'ai l'impression de récupérer qu'une partie des valeur en faites...

Je suis pas convaincu que ça "fonctionne" ! :/


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(
    [user_lang] => fr
    [user_civil] => Mr
    [user_surname] => devellopez
    [user_firstname] => forum
    [user_email] => forum@devellopez.com
    [user_phone] => xxxxxxxxx
    [user_street] => 4 allée des champs
    [user_zipcode] => 75000
    [user_town] => Paris
    [user_country] => FR
    [user_ncountry] => France
    [user_comments] => 
    [user_mdpay] => 
    [price_parts] => object Object
        (
            [_attributes:private] => Array
                (
                    [auto] => 340
                    [manual] => 0
                )
 
        )
 
)

Pour ce qui est de créer une méthode je vais voir si je peux le faire, en rajouter une dans la classe en question...

Je vous tiens au courant !
D'avancer merci
@++
M.
Cvbdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 11h47   #8
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par koopajah
Avec cette classe précise tu ne peux pas, le tableau des arguments est défini en private donc tu n'y as pas accès en dehors de l'instance de la classe, et tu n'as aucune méthode pour y accéder.

Il faut donc créer une méthode qui va te renvoyer tes valeurs depuis la classe (une nouvelle méthode de la classe donc). Peux-tu la modifier?
+1
Il faudrait que tu puisses rajouter un code de ce style à la classe :
Code :
1
2
3
4
5
6
public function getAttributes($attribute) {
    if (isset($this->_attributes[$attribute])) { 
        return $this->_attributes[$attribute];
    }
    return false;
}
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 11h49   #9
Membre du Club
 
Inscription : mai 2007
Messages : 188
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 188
Points : 56
Points : 56
Citation:
Envoyé par vg33
+1
Il faudrait que tu puisses rajouter un code de ce style à la classe :
Code :
1
2
3
public function getAttributes($attribute) {
    return $this->_attributes[$attribute];
}
Je regarde ça merci
Cvbdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 11h50   #10
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Attention : j'ai édité mon code pour tester l'existence de l'attribut.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 11h54   #11
Membre du Club
 
Inscription : mai 2007
Messages : 188
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 188
Points : 56
Points : 56
Citation:
Envoyé par vg33
Attention : j'ai édité mon code pour tester l'existence de l'attribut.

Merci l'attribut juste pour confirmation, en l'occurence c'est le nom de la clé du tabeau (comme par exemple user_lang,...) ?

@++
Cvbdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 11h56   #12
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par Cvbdev
Merci l'attribut juste pour confirmation, en l'occurence c'est le nom de la clé du tabeau (comme par exemple user_lang,...) ?

@++
Oui.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 12h09   #13
Membre du Club
 
Inscription : mai 2007
Messages : 188
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 188
Points : 56
Points : 56
lol merci pour votre aide, je mets tout ça en application....
il semble encore une fois me renvoyer ceci : Object id #23 et non la valeur !

j'ai utilisé la fonction que tu m'as donné et une seconde, les deux renvoies des résultats identiques....mais pas la valeur :/ y a quelques chose à rajouter car trés sincèrement je vois pas trop de truc !



Code :
1
2
$attr = new object();
$attr-> getAttributes('session_time');
Code :
1
2
3
4
5
6
7
 
public function getAttributes($attribute) {
    if (isset($this->_attributes[$attribute])) { 
        return $this->_attributes[$attribute];
    }
    return false;
}
Code :
1
2
3
4
 
public function has_attribute($attr) {
		return in_array($attr, array_keys($this->_attributes));
	}

Dsl pr tt ces questions
D'avance merci
@++
Cvbdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 12h21   #14
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Il faut que tu déclares les attributs dans l'instanciation de la classe :
Code :
1
2
$attr = new object('session_time');
$attr-> getAttributes('session_time');
Mais ta classe doit bien comporter un setteur (du style setAttributes()), non ? Sinon, je ne vois pas comment tu pourrais modifier les attributs qui sont déclarés en private !
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 12h32   #15
Membre du Club
 
Inscription : mai 2007
Messages : 188
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 188
Points : 56
Points : 56
Citation:
Envoyé par vg33
Il faut que tu déclares les attributs dans l'instanciation de la classe :
Code :
1
2
$attr = new object('session_time');
$attr-> getAttributes('session_time');
Mais ta classe doit bien comporter un setteur (du style setAttributes()), non ? Sinon, je ne vois pas comment tu pourrais modifier les attributs qui sont déclarés en private !
Oui elle comprends cela... une méthode qui permet de rajouter des attributs et une constructeur

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public function new_attribute($attr, $value=null) {
		if (!array_key_exists($attr, $this->_attributes))
			$this->_attributes[$attr] = $value;
	}
 
 
	function __construct() {
		$args = func_get_args();
 
		foreach($args as $arg) {
			if (is_string($arg)) {
				$this->_attributes[$arg] = null;
			}
			if (is_array($arg)) {
				foreach($arg as $a) {
					if (is_string($a)) {
						$this->_attributes[$a] = null;
					}
				}
			}
		}
	}
Cvbdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 12h38   #16
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Dans ce cas-là, ce code devrait fonctionner :
Code :
1
2
3
$attr = new object();
$attr->new_attribute('session_time', timestamp());
$attr-> getAttributes('session_time');
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h47.


 
 
 
 
Partenaires

Hébergement Web