IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Gros souci avec Objet stdclass


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut Gros souci avec Objet stdclass
    Bonjour,

    Je cherche à traiter un objet stdclass à l'aide de php mais mon code ne fonctionne pas du tout. Ce qui m'étonne surtout c'est que j'ai testé de passer la fonction is_object de php sur ma variable $std_source et çà ne retourne rien du coup je me pose la question de savoir si on peut mettre un object stdclass dans une variable comme je l'ai fait. Voici ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
    $std_source = 'stdClass Object {
    [processor] => stdClass Object {
    	[cod] => 0
    	[message] => OK
    	[rid] => 97854654
    	[testmode] => 
    }
    [handler] => stdClass Object
    {
    [events] => Array
    {
    	[0] => Array
    	{
    		[eventid] => 826364785
    		[programid] => 22042
    		[eventstatus] => PENDING
    		[eventdate] => 2017-05-18 10:31:50
    		[eventcommission] => 1.1
    		[netvalue] => 11
    		[subid] => test
    	}
    	[1] => Array
    	{
    		[eventid] => 826364786
    		[programid] => 22043
    		[eventstatus] => PENDING
    		[eventdate] => 2017-07-10 12:00:00
    		[eventcommission] => 5
    		[netvalue] => 100
    		[subid] => test2
    	}
    }
    }
    }';
    foreach ($std_source->handler as $vente) { //ligne 36
    	// Do something with each sales
    	echo $vente->eventid . "<br>";
    	echo $vente->eventstatus."<br>";
    }
    echo "traitement terminé";
    J'obtiens comme résultat ceci :

    Notice: Trying to get property of non-object on line 36

    Warning: Invalid argument supplied for foreach() on line 36
    traitement terminé

  2. #2
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,
    $std_source est une chaîne de caractères (un print_r) pas un objet à moins que j'ai loupé quelque chose.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    C'est une variable php non définie. Faut-il créer une classe vide et ensuite lui affecter la chaine de caractères ?

  4. #4
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    D'où vient le contenu de la variable ?

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    J'appelle une api qui me retourne ce contenu là normalement. La variable contient l'objet stdclass retourné par cet api. On m'a envoyé un exemple de ce que l'api retournera et c'est ce qui est dans la variable et je voulais tester le résultat retourné pour le traiter en php

  6. #6
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Comme je l'avais signifié, l'API retourne une chaîne de caractères pas une instance de StdClass donc les manipulations que vous voulez effectuer ne pourront pas fonctionner.
    Si ce n'est pas secret, c'est quoi l'URL de cette API ?

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Non l'api doit bien retourné une instance de classe je pense mais quand tu fais un print_r çà t'affiche le source et donc la structure de l'objet sauf erreur de ma part. C'est cette source que j'ai mis dans la variable mais on ne peut pas le traiter comme çà il semble. Bon sinon comment je fais pour accéder à eventid par exemple donc à tous les events par exemple
    Merci

  8. #8
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Dans ce cas donnez le contenu original pas un print_r ou quelque chose qui y ressemble

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    En fait le résultat de l'api est retourné dans une variable $result et comme c'est un object on ne peut pas l'afficher en php sauf à utiliser print_r($result) et dans ce cas précis on obtient le contenu de la variable $std_source. La question porte surtout sur comment accéder à la valeur eventid par exemple dans l'objet stdclass au dessus

  10. #10
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Travaillez directement sur la variable renvoyée par l'API et ne passez pas par un print_r qui va renvoyer lui une chaîne (vous "détruisez" l'objet là).
    Sinon j'avais bien compris la question.

  11. #11
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Je n'ai pas l'objet car pour l'instant l'api ne retourne rien en réalité. La société qui gère l'api m'a envoyé ce texte qui correspond à la structure de ce qui me sera renvoyé un exemple si tu préfères. Donc voilà je ne pourrais pas travailler sur l'objet directement sauf à le reconstruire en php. Après ma question était surtout comment récupérer des éléments dans mon objet stdClass et surtout les valeurs eventid dans une boucle pour chaque event.
    Il faudrait idéalement quelqu'un qui connaît stdclass, j'ai l'impression que j'ai posté au mauvais endroit. Dans quel partie du forum ma demande serait la mieux adaptée ?

  12. #12
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    J'ai cru que le print_r était de vous, pas que c'était l'oeuvre les proprio de l'API.
    Donc en essayant de reconstruire l'objet en question (et c'est ce qu'il faut faire) , voici ce que ça peut donner. J'ai pris ici que la partie "events"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
     
    $std = new StdClass();
    $std->handler = new StdClass();
     
    $events = [
        [
            'eventid' => 826364785,
            'programid' => 22042,
            'eventstatus' => 'PENDING',
            'eventdate' => '2017-05-18 10:31:50',
            'eventcommission' => 1.1,
            'netvalue' => 11,
            'subid' => 'test'
        ],
        [
            'eventid' => 826364786,
            'programid' => 22043,
            'eventstatus' => 'PENDING',
            'eventdate' => '2017-07-10 12:00:00',
            'eventcommission' => 5,
            'netvalue' => 100,
            'subid' => 'test2'
        ]
     
    ];
     
    $std->handler->events = $events;
     
    //on recupère le eventid
     
    foreach ($std->handler->events as $event) {
        echo $event['eventid'], '<br />';
    }

  13. #13
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Merci çà fonctionne parfaitement Finalement j'ai compris comment çà fonctionnait grâce à ton code
    Par contre quel est le format de ce code, est-ce un tableau d'objet ? :
    On a un crochet au début donc je pense à un tableau au départ, les crochets à des objets peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    [
      {
        "id": 259630312,
        "url": "http://www.publisher.com",
        "advertiserId": 7052,
        "publisherId": 189069,
        "siteName": "Publisher",
        "commissionStatus": "pending",
        "commissionAmount": {
          "amount": 5.59,
          "currency": "GBP"
        },
        "saleAmount": {
          "amount": 55.96,
          "currency": "GBP"
        },
        "clickRefs": {
          "clickRef": "12345",
          "clickRef2": "22222",
          "clickRef3": "33333",
          "clickRef4": "44444",
          "clickRef5": "55555",
          "clickRef6": "66666"
        },
        "clickDate": "2017-01-23T12:18:00",
        "transactionDate": "2017-02-20T22:04:00",
        "validationDate": null,
        "type": "Commission group transaction",
        "declineReason": null,
        "voucherCodeUsed": true,
        "voucherCode": "example123",
        "lapseTime": 2454307,
        "amended": false,
        "amendReason": null,
        "oldSaleAmount": null,
        "oldCommissionAmount": null,
        "clickDevice": "Windows",
        "transactionDevice": "Windows",
        "publisherUrl": "http://www.publisher.com/search?query=dvds",
        "advertiserCountry": "GB",
        "orderRef": "111222333444",
        "customParameters": [
          {
            "key": "1",
            "value": "555666"
          },
          {
            "key": "2",
            "value": "example entry"
          },
          {
            "key": "3",
            "value": "LLLMMMNNN"
          }
        ],
        "transactionParts": [
          {
            "commissionGroupId": 12345,
            "amount": 44.76
          }
     
          {
     
            "commissionGroupId": 654321,
            "amount": 11.20
     
          }
     
     
        ],
        "paidToPublisher": false,
        "paymentId": 0,
        "transactionQueryId": 0,
        "originalSaleAmount": null
      },
    Et comment remonter les éléments ?

  14. #14
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    C'est du JSON. Je crois que vous avez déjà fait un sujet sur ça mais je ne le retrouve plus.

  15. #15
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Merci j'avais pas reconnu le format JSON. Je suis obligé d'apprendre pleins de nouveaux formats à exploiter je finis par m'y perdre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gros souci avec gestion des arguments
    Par toams69 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 09/01/2009, 16h59
  2. Gros soucis avec mon onclick. Je n'arrive pas à l'associer à mon élément
    Par takinelinfo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/07/2008, 11h34
  3. GROS soucis avec SSL - Apache - Ubuntu ! HELP
    Par satyre dans le forum Sécurité
    Réponses: 1
    Dernier message: 22/05/2007, 13h37
  4. [C#][Visual C# Express] Gros souci avec Excel
    Par poullos dans le forum EDI/Outils
    Réponses: 7
    Dernier message: 18/11/2005, 13h15
  5. Gros soucis avec pgaccess et postgresql
    Par Missvan dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 13/04/2004, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo