Page 1 sur 1

XML vers BDD MySQL via PHP

Posté : 14 sept. 2012, 12:24
par guim06
Bonjour à Tous !

je recherche le moyen d'envoyer le contenu d'un XML dans une BDD par l’intermédiaire d'un script PHP.
En parcourant le web,
j'ai pu mettre en place un script qui me permet de faire ce que je souhaite, mais uniquement pour des fichiers XML qui ont une structure simple de type GrandParent / Parent / Enfants.
Par contre, dès que l'arborescence se complique, par ecemple Arrière-GrandParent / GrandParent / Parent / Enfants / Petits-Enfants, mon script ne fonctionne plus.

Exemple qui fonctionne :

Fichier DublinCore.xml :

Code : Tout sélectionner

<?xml version='1.0' encoding='utf-8' ?> <OI> <DublinCore> <title>16e Chapitre des Chevaliers du Pissala</title> <description></description> <publisher>CRT RIVIERA</publisher> <Keywords xml:lang='fr' /> <Classification code='02.01.03'>Fêtes et Manifestations</Classification> <ControlledVocabulary code='02.01.03.04.10'>Traditions et folklore</ControlledVocabulary> <created>2012-05-11</created> <valid>2012-09-16</valid> <modified>2012-05-11</modified> <identifier>FMAPAC006CRT0071102</identifier> </DublinCore> </OI>
Fichier DublinCore.php

Code : Tout sélectionner

<?php $db = mysql_connect('xxxx', 'xxxx', 'xxxx') OR die('Erreur de connexion à la base'); mysql_select_db('xxxx',$db) OR die('Erreur de sélection de la base'); //Affichage du document dublinCore.xml $OI_xml = simplexml_load_file('dublinCore.xml'); foreach ($OI_xml ->DublinCore as $DublinCore) { print "title de DublinCore : {$DublinCore->title} <br />"; print "description de DublinCore: {$DublinCore->description} <br />"; print "publisher de DublinCore: {$DublinCore->publisher} <br />"; print "Classification de DublinCore: {$DublinCore->Classification} <br />"; print "ControlledVocabulary de DublinCore: {$DublinCore->ControlledVocabulary} <br />"; print "created de DublinCore: {$DublinCore->created} <br />"; print "valid de DublinCore: {$DublinCore->valid} <br />"; print "modified de DublinCore: {$DublinCore->modified} <br />"; print "identifier de DublinCore: {$DublinCore->identifier} <br />"; } // envoi des infos dans la BDD $req = "INSERT INTO OI (title, description, publisher, Classification, ControlledVocabulary, created, valid, modified, identifier) values ('$DublinCore->title','$DublinCore->description','$DublinCore->publisher','$DublinCore->Classification','$DublinCore->ControlledVocabulary','$DublinCore->created','$DublinCore->valid','$DublinCore->modified','$DublinCore->identifier') "; mysql_query($req) or die("Erreur MySQL : ".mysql_error()); //Affichage du contenu de la table OI $requete = mysql_query('SELECT * FROM OI') OR die('Erreur de la requête MySQL'); while($DublinCore = mysql_fetch_array($requete)) { echo ' <p>ID :'.$DublinCore['id'].'<br/> Titre :'.$DublinCore['title'].'<br/> Description :'.$DublinCore['description'].'<br/> Publisher :'.$DublinCore['publisher'].'<br/> Classification :'.$DublinCore['Classification'].'<br/> ControlledVocabulary :'.$DublinCore['ControlledVocabulary'].'<br/> created :'.$DublinCore['created'].'<br/> valid :'.$DublinCore['valid'].'<br/> modified :'.$DublinCore['modified'].'<br/> identifier :'.$DublinCore['identifier'].'</p>'; } ?>
Exemple qui ne fonctionne pas :

Fichier Periodes.xml :

Code : Tout sélectionner

<?xml version='1.0' encoding='utf-8' ?> <Periodes> <DetailPeriode type='09.01.05'> <Dates> <DetailDates> <DateDebut>2012-09-15</DateDebut> <DateFin>2012-09-16</DateFin> <ObservationDates>Du samedi 15 septembre 2012 au dimanche 16 septembre 2012</ObservationDates> </DetailDates> </Dates> </DetailPeriode> </Periodes>
Fichier Periodes.php

Code : Tout sélectionner

<?php $db = mysql_connect('xxxx', 'xxxx', 'xxxx') OR die('Erreur de connexion à la base'); mysql_select_db('xxxx',$db) OR die('Erreur de sélection de la base'); //Affichage du document periodes.xml $Periodes_xml = simplexml_load_file('periodes.xml'); foreach ($Periodes_xml ->DetailDates as $DetailDates) { print "DateDebut de periodes : {$DetailDates->DateDebut} <br />"; print "DateFin de periodes: {$DetailDates->DateFin} <br />"; print "ObservationDates de periodes: {$DetailDates->ObservationDates} <br />"; } // envoi des infos dans la BDD $req = "INSERT INTO periodes (DateDebut, DateFin, ObservationDates) values ('$DetailDates->DateDebut','$DetailDates->DateFin','$DetailDates->ObservationDates') "; mysql_query($req) or die("Erreur MySQL : ".mysql_error()); //Affichage du contenu de la table periodes $requete = mysql_query('SELECT * FROM periodes') OR die('Erreur de la requête MySQL'); while($DetailDates = mysql_fetch_array($requete)) { echo ' <p>ID :'.$DetailDates['Id'].'<br/> DateDebut :'.$DetailDates['DateDebut'].'<br/> DateFin :'.$DetailDates['DateFin'].'<br/> ObservationDates :'.$DetailDates['ObservationDates'].'</p>'; } ?>
Auriez-vous une idée ???

Merci

Re: XML vers BDD MySQL via PHP [RESOLU]

Posté : 14 sept. 2012, 15:34
par guim06
Bon, bein à force de tenter, on arrive à bon port !
Voici la solution, j'espère que ça aidera :

Code : Tout sélectionner

<?php $db = mysql_connect('xxxx', 'xxxx', 'xxxx') OR die('Erreur de connexion à la base'); mysql_select_db('xxxx',$db) OR die('Erreur de sélection de la base'); //Affichage du document xxxxx.xml $xml = simplexml_load_file('xxxxxx.xml'); // ->DetailPeriode->Dates->DetailDates on parcourt l'arborescence sans tenir compte du premier parent foreach ($xml->DetailPeriode->Dates->DetailDates as $value) { print "DateDebut de periodes : {$value->DateDebut} <br/>"; print "DateFin de periodes: {$value->DateFin} <br/>"; print "ObservationDates de periodes: {$value->ObservationDates}"; } // envoi des infos dans la BDD $req = "INSERT INTO periodes (DateDebut, DateFin, ObservationDates) values ('$value->DateDebut','$value->DateFin','$value->ObservationDates') "; mysql_query($req) or die("Erreur MySQL : ".mysql_error()); //Affichage du contenu de la table periodes $requete = mysql_query('SELECT * FROM periodes') OR die('Erreur de la requête MySQL'); while($value = mysql_fetch_array($requete)) { echo ' <p>ID :'.$value['id'].'<br/> DateDebut :'.$value['DateDebut'].'<br/> DateFin :'.$value['DateFin'].'<br/> ObservationDates :'.$value['ObservationDates'].'</p>'; } ?>

Re: [RESOLU] XML vers BDD MySQL via PHP

Posté : 24 oct. 2013, 15:37
par josse34
Bonjour.
Pour moi ce code ne fonctionne pas, seule les dernières valeurs connue dans le foreach de $value->DateDebut', '$value->DateFin' et '$value->ObservationDates sont intégrées dans la base de donnée.
Je ne comprend pas comment faire pour rentrer toutes les lignes / colonnes d'un seul coup et en PDO, mysql_connect étant déprécie.
Merci!

Re: [RESOLU] XML vers BDD MySQL via PHP

Posté : 25 oct. 2013, 09:06
par moogli
salut,

ce n'est pas une question de pdo ou mysql* mais de logique.
la requête est en dehors du foreach donc ne peux insérer d'une ligne.

je suppose que cette question fait suite à ce message ?

je t'invite a rester dessus et ne pas t'éparpiller ;)

ps : je verrouille ce sujet pour éviter de le polluer ;)

@+