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 :

[SimpleXML] Récupération données formulaire dans un xml


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Points : 61
    Points
    61
    Par défaut [SimpleXML] Récupération données formulaire dans un xml
    bonjour,
    j'ai créé un fichier xml

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <personne>
        <nom></nom>
        <longitude></longitude>
        <latitude></latitude>
    </personne>

    Un utilisateur répond à un formulaire en donnant son nom sa longitude et sa latitude qu'il renvoie avec le méthode POST en PHP5 dans le fichier ayant le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $racine = simplexml_load_file("coord.xml");
    $personne = $racine->personne;
    $nom = $racine->nom;
    $long = $racine->long;
    $lat = $racine->lat;
    $nom->addChild("p", $_POST["utilisateur"]);
    $long->addChild("p", $_POST["longitude"]);
    $lat->addChild("p", $_POST["latitude"]);
    ?>
    ça ne fonctionne pas, pourriez-vous me guider svp ?
    je cherche donc à compléter au fur et à mesure un fichier xml automatiquement quand les utilisateurs vont renseigner le formulaire
    j'ai mis un paragraphe p dans le addchild car je ne savais pas comment générer uniquement le texte

    merci pour votre aide
    PS: je débute le xml en autodidacte

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Attention, tu vas chercher personne au bon endroit, mais le reste n'est pas situé à la racine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $personne = $racine->personne;
    $nom = $racine->personne->nom;
    // ou
    $nom = $personne->nom
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $racine = simplexml_load_file("coord.xml");
    $racine->nom = $_POST["utilisateur"];
    $racine->longitude =$_POST["longitude"];
    $racine->latitude =  $_POST["latitude"];
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Points : 61
    Points
    61
    Par défaut
    bonjour
    merci pour vos retours , après les avoir digéré et être aller sur le manuel PHP , j'ai réussi à améliorer le résultat
    je récupère bien variables $_POST générées par le formulaire maintenant
    et je réussis même à créer un fichier xml "en dur" sur mon serveur local : j'utilise simpleXML

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="utf-8"?>
    <users>
        <user>
        <nom>le nom entré avec $_POST['utilisateur']</nom>
        <longitude>...</longitude>
        <latitude>...</latitude>
         </user>
    </users>

    grâce à

    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
    <?php
    $file = 'users.xml';
    $t1=$_POST['utilisateur'];
    $t2=$_POST['latitude'];
    $t3=$_POST['longitude'];
     
    $users = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><users/>');
    $user = $users->addChild('user');
    $user->addChild('nom',$t1);
    $user->addChild('latitude',$t2);
    $user->addChild('longitude',$t3);
     
    header('Content-Type: text/xml');
    echo $users->asXML();
     
    $users->asXML($file);
    ?>
    le souci maintenant c'est que quand je remplis le formulaire pour une nouvel utilisateur , les données remplacent celle qui existent dans le fichier xml et ne viennent pas enrichir l'arborescence et créer un nouvel user

    comment faire?

    merci

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut lire ton fichier existant et non pas en faire un nouveau.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Points : 61
    Points
    61
    Par défaut
    bonjour
    là je n'ai pas tout compris ...
    je crée le fichier xml au départ car il n'existe pas
    ensuite à chaque nouvel envoi via le formulaire le fichier précédent est écrasé et recréé c'est ça ?
    si oui je commence à comprendre que tout soit remplacé
    mais par contre je ne vois pas quelle fonction utilisée ou autre pour relire le fichier précédent et remplacer les valeurs existantes tout en sachant qu'il faut créer le fichier au "1er envoi du formulaire"

    merci

  7. #7
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Points : 61
    Points
    61
    Par défaut
    bonsoir,
    si vous le permettez , je vais changer mon exemple pour être plus clair (enfin j'espère) : par rapport aux retours que vous m'avez fait , en effet si je recrée toujours le fichier.xml il ne va pas se mettre à jour donc je vais partir du principe que le fichier xml existe au départ je l'appelle fichier.xml
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <personnes>
    	<personne1>
    		<nom> doe </nom>
    		<prenom> john </prenom>
    	</personne1>
    	<personne2>
    		<nom> gates </nom>
    		<prenom> bill </prenom>
    	</personne2>
    </personnes>

    mon but est de changer le nom doe avec le contenu d'une variable $var1 si cette variable vaut une certaine valeur donc d'actualiser fichier sous une certaine condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $var1='change1';
    $var1='change2';
    $file = 'fichier.xml';
    $xml = simplexml_load_file($file);
    if ( $var1 == 'change1') {
    $xml->$personnes->personne1->addChild('nom',$var1);
    }
    $xml->asXML($file);
    ?>
    évidemment ça ne fonctionne pas. j'utilise simplexml

    pourriez-vous m'aider? je pense pas être trop loin mais rechercher sur internet c'est dur dur quand on est pas informaticien

    merci

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Déjà il faudrait te décider entre "personne" et "user"

    Repars simplement de l'avant dernier code que tu as montré. Mais au lieu de faire "new SimpleXMLElement" tu fais simplexml_load_file()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Points : 61
    Points
    61
    Par défaut
    bonjour
    OK je reste sur mon code de départ avec users.xml qui est bien existant

    j'ai fait le remplacement

    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
     
    <?php
    $file = 'users.xml';
    $t1=$_POST['utilisateur'];
    $t2=$_POST['latitude'];
    $t3=$_POST['longitude'];
     
    $users = simplexml_load_file('<?xml version="1.0" encoding="UTF-8"?><users/>'); 
    $user = $users->addChild('user');
    $user->addChild('nom',$t1); 
    $user->addChild('latitude',$t2);
    $user->addChild('longitude',$t3);
     
    header('Content-Type: text/xml');
    echo $users->asXML();
     
    $users->asXML($file);
    ?>
    quand je donne des nouvelles valeurs à $t1 $t2 et $t3 via un formulaire rien n'est écrit dans le fichier xml (je n'ai pas de message d'erreur)

    merci

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    $users = simplexml_load_file('users.xml'); 
    $user = $users->addChild('user');
    $user->addChild('nom',$t1); 
    $user->addChild('latitude',$t2);
    $user->addChild('longitude',$t3);
     
    header('Content-Type: text/xml');
    echo $users->asXML();
     
    $users->asXML($file);
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    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
    Citation Envoyé par mathier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $users = simplexml_load_file('<?xml version="1.0" encoding="UTF-8"?><users/>');
    Deux problèmes déjà : d'abord ce n'est pas chargant un fichier, c'est chargant un texte du type peut-être xml; et puis - là c'est une bizarrie - si le text contient un prolog <?xml ... ?>, vous ne pouvez pas le faire comme ça; raison : le ?> cause un problème et l'engin php se croit le script php est terminé. Il faut utiliser heredoc ou nowdoc - c'est morbide, n'est-ce pas?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $s=<<<'XML'
    <?xml version="1.0" encoding="UTF-8"?><users/>
    XML;
    $users = simplexml_load_string($s);
    Et puis, tout va bien.

  12. #12
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Points : 61
    Points
    61
    Par défaut
    bonsoir
    merci merci pour ces 2 solutions ça fonctionne

    un seul souci je pensais que si un utilisateur redonnait son nom arrivant dans $t1 et sa géolocalisation arrivant dans $t2 et $t3 les dernieres données remplaceraient les 1ers mais non j'ai deux fois le même utilisateur dans le fichier xml l'un en dessous de l'autre.
    Il me suis qu'il fallait procéder comme ceci
    1)ouvrir avec le fichier xml avec la même technique simple_load_file
    2)faire une lecture de tout le fichier xml pour qu'il puisse repérer/avoir en mémoire la balise dont le nom existe déjà
    3)faire une condition : -3.1) si $t1 pareil que le nom de balise alors remplacer contenu de la balise
    -3.2) sinon tout exécuter comme avant

    mais je ne réussis pas à faire le 2) et le 3.1)
    pour le 2) j'ai pensé à un foreach mais après balayage quelle action?

    merci

  13. #13
    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
    Citation Envoyé par mathier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml->$personnes->personne1->addChild('nom',$var1);
    Le point important est le suivant : $xml représente déjà l'élément racine du xml, c'est-à-dire personnes; donc, il ne faut pas se faire répéter elle-même dans la chaine de référence. Et puis, ce n'est pas addChild() qui fait le travail de changer le texte d'une élément. Il suffit de changer sa valeur, comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml->personne1->nom=$var1;

  14. #14
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Points : 61
    Points
    61
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?>
    <personnes>
    	<personne1>
    		<nom> doe </nom>
    		<prenom> john </prenom>
    	</personne1>
    	<personne2>
    		<nom> gates </nom>
    		<prenom> bill </prenom>
    	</personne2>
    </personnes>
    ok si je veux remplacer doe par lecarre je tape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $personnes->personne1->nom="lecarre";
    et comment pourrais je tester l'existence de personne2 dans mon fichier xml ?
    mon idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if isset ($personnes->personne2)
    merci

  15. #15
    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
    et comment pourrais je tester l'existence de personne2 dans mon fichier xml ?
    mon idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if isset ($personnes->personne2)
    Si vous voulez, pourquoi pas et il suffit de le tester. Vous pouvez aussi le faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if property_exists($personnes, 'personne2')
    et possiblement bien d'autres aussi.

    Just une dernière remarque : la dénomination de personne1, personne2 et de suite n'est jamais de bonne conception. Elle pose une grande problème de maintenance et ces éléments devraient conçues égales - ce qui les distingue n'est que l'ordre contingent qu'elles entrent dans le xml. Il est mieux de les appelées toutes personne, simplement. Leur position ne devrait pas faire son entrée à le nom d'une balise.

  16. #16
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Août 2011
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2011
    Messages : 112
    Points : 61
    Points
    61
    Par défaut
    ok merci pour l'aide à tout le monde

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

Discussions similaires

  1. [1.x] Récupérer les données d'un formulaire dans un XML
    Par misswatson dans le forum Symfony
    Réponses: 10
    Dernier message: 11/05/2012, 13h36
  2. [SimpleXML] Récupération données flux xml
    Par antitrust56 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/11/2007, 14h08
  3. [SimpleXML] Récupération données de XML vers une table MySQL
    Par emmma dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 29/06/2007, 18h28
  4. Récupération de properties dans un XML
    Par anitshka dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 08/06/2006, 15h59
  5. Récupération données formulaire en php5
    Par jcaspar dans le forum Langage
    Réponses: 1
    Dernier message: 08/03/2006, 20h45

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