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

Bibliothèques et frameworks PHP Discussion :

[XML] Mettre données XML dans un array


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 16
    Points : 3
    Points
    3
    Par défaut [XML] Mettre données XML dans un array
    Bonjour,

    Je galère à traiter des données contenues dans un xml.

    Mon xml ressemble à ça :
    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
     
    <Response>
      <Orders>
        <Order>
          <IdOrder>1234</IdOrder>
          <Seller>ABC</Seller>
          <Currency>EUR</Currency>
          <TotalFacture>30.90</TotalFacture>
          <TotalProduits>25</TotalProduits>
          <TotalShipping>5.90</TotalShipping>
      </Order>
      <Order>
        <Order>
          <IdOrder>456</IdOrder>
          <Seller>XYZ</Seller>
          <Currency>EUR</Currency>
          <TotalFacture>20.90</TotalFacture>
          <TotalProduits>15</TotalProduits>
          <TotalShipping>5.90</TotalShipping>
      </Order>
     </Orders>
    </Response>
    J'arrive à afficher le contenu sur ma page avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $xml = simplexml_load_file("monxml.xml");
    foreach($xml->Response->Orders->Order as $order){
     
    $idorder = $order->IdOrder;
    $currency = $order->Currency;
     
    echo 'mon id :' . $idorder . '...<br><br>';
     
    }

    J'ai bien un affichage du genre :
    mon id 1234 ...

    mon id 456 ...
    Mon problème, c'est qu'affiché comme telles, les données ne me servent à rien.
    J'ai besoin de récupérer les données lignes par lignes pour les enregistrer ensuite dans ma base.

    J'avais pensé à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $idorder = $order->IdOrder;
    $currency = $order->Currency;
     
    if (isset($_POST['record'])) {
    mon query insert into MA TABLE ...
    ma redirection vers une page de confirmation
    }
     
    echo '<form action="" method="POST">mon id :' . $idorder . '...<input type="submit" name="record" value="VALIDER"/></form><br><br>';
    J'ai bien mes boutons VALIDER sur chaque ligne mais ça ne m'enregistre que les infos de la première ligne : "1234" !
    mon id 1234 VALIDER...

    mon id 456 VALIDER...
    C'est à cause, je suppose, de comment je récupère mon xml et comment je boucle dessus, non ?

    D'avance merci pour votre aide.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je n'ai tout compris mais je comprends en gros ce qu'on veut. En suivant la logique originle tout près, on peut écrire comme ça.
    Code php : 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
    $xml = simplexml_load_file("monxml.xml");
     
    $idorders=array();
    //Si Response est la racine, Response ne devrait pas là. Le Response doit être l'enfant direct de la racine.
    foreach($xml->Response->Orders->Order as $order){	
    	$idorders[] = $order->IdOrder;
    }
     
    if (isset($_POST['record'])) {
        //mon query insert into MA TABLE ... en utilisant chaque valeur dans $idorders...
        //ma redirection vers une page de confirmation
        echo "c'est fait.";   //par exemple
    } elseif (isset($_POST['reject'])) {
        //vous décidez de faire quoi ...
        echo "ça s'est arreté. merci";    //par exemple
    } else {
        echo "<p>Les id's sont:</p>";
        $i=0;
        foreach ($idorders as $idorder) {
            echo "<p>id[$i] = $idorder</p>";
            $i++;
        }
        echo "<form action='' method='POST'><br />";
        echo "<input type='submit' name='record' value='VALIDER' /><br />";
        echo "<input type='submit' name='reject' value='NE PAS VALIDER' /><br />";
        echo "</form><br />";
    }
    Les choses qui se discutent c'est que comme ça on analyse deux fois le même xml, l'une pour passer les id's au client et la seconde quand le client a approuvé les id's pour insérer à la base de données - on risque que le xml soit changé entre-temps et puis la performance. On peut passer directement les id's vers le client comme input type="text" caché, si on veut pour que on s'épargne d'analyser la seconde fois le xml, mais, on risque de laisser le client de malicieusement changer les données des id's ... On peut aussi persister idorders dans la session pour que le client ne soit pas capable de changer les données des id's ... tout ça dépend de l'évaluation dans le sens de sécurité et de performance.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 16
    Points : 3
    Points
    3
    Par défaut
    Merci pour ton aide
    Je vais essayer de me dépatouiller avec ça.

    Pas de problème sécurité. C'est pour un traitement en "interne" dans un backoffice.
    L'idée c'est de récupérer toutes les infos qu'il a entre les balises <Order> de mon xml, de les afficher en ligne dans un tableau (une ligne par Order) avec un bouton sur chaque ligne qui permettra d'enregistrer toutes les infos de l'Order concerné.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/05/2011, 17h43
  2. [MySQL] mettre une variable dans un array
    Par sinifer dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 17/02/2011, 21h43
  3. Réponses: 6
    Dernier message: 29/10/2010, 17h17
  4. Mettre une constante dans un array
    Par Shredder dans le forum Langage
    Réponses: 5
    Dernier message: 24/04/2008, 20h13
  5. [XML] mettre les valeurs XML dans un array
    Par yodark dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 05/01/2006, 18h35

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