Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5318 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Exportation xml avec php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exportation xml avec php

n°1843891
solarius
Posté le 27-01-2009 à 21:40:13  profilanswer
 

Bonjours,
 
Voila je souhaite exporter ma base de données en une page xml que je lirais ensuite pour réinsérer ces données dans une autre base de données d'un autre serveur.
Pour l'instant j'effectue des tests en local.
 
Voici mon premier fichier qui génère une page xml avec les données contenue dans la base de données:
(ça doit être ça la cause a tout mes problèmes)
 
[B][U]Nom du fichier:[/U][/B] [I]generation_xml.php[/I]
 

Citation :

<?php  
Header("Content-type: text/xml" );
echo '<?xml version="1.0" encoding="utf8"?>';?>
 
<liste_contacts>
<?php
//Temps maximum d'exécution de la page <gras><couleur nom="rouge">nul</couleur></gras>
//require_once('import.php');
 
$identifiant_elab = 'root';
$password_elab = '';
$bdd_elab = 'test';
$serveur_elab = 'localhost';
 
//Connection à la base de données Elab
mysql_connect($serveur_elab, $identifiant_elab , $password_elab);
mysql_select_db($bdd_elab);
 
//Importation des données de la base de données
$resultats_importation = mysql_query("SELECT nom, prenom, email, id FROM contact" );
while($liste = mysql_fetch_array($resultats_importation))
{
$tableau[] = array (
 "nom" => $liste['nom'],
 "email" => $liste['email'],
 "prenom" => $liste['prenom'],
 "id" => $liste['id'],
 );
}
 
//Parcour le tableau pour en extraire les données
foreach($tableau as $info)
{
$nom = $info['nom'];
$email = $info['email'];
$prenom = $info['prenom'];
$id = $info['id'];
?>
 <contact>
  <prenom><?php echo $prenom; ?></prenom>
  <nom><?php echo $nom; ?></nom>
  <email><?php echo $email; ?></email>
 </contact>
<?php
//Fermeture de la boucle qui parcour le tableau
}
?>
</liste_contacts>


 
Je tiens à préciser ce que fichier s'affiche exactement comme un fichier XML mais l'extension est en php puisque c'est du code php...
 
 
Voici un second fichier qui devrait lire le premier fichier mon en extraire les données voulu seulement comme l'extension tu premier fichier est .Php et non .xml cela génère une erreur.
[B][U]Nom du fichier:[/U][/B] [I]importation.php[/I]
 

Citation :

<?php
$liste = simplexml_load_file('C:\wamp\www\generation_xml\generation_xml.php');
 
foreach( $liste->contact as $contact)
 {
 echo "Nom : {$contact->nom} <br />";
 echo "Prenom : {$contact->prenom} <br />";
 }
 
?>


 
Cela ne fonctionne pas et m'affiche les erreurs suivantes:
 

Citation :


Warning: simplexml_load_file() [function.simplexml-load-file]: file:///C%3A/wamp/www/generation_xml/generation_xml.php:3: parser error : Start tag expected, '<' not found in C:\wamp\www\generation_xml\importation_xml.php on line 3
 
Warning: simplexml_load_file() [function.simplexml-load-file]: echo '<?xml version="1.0" encoding="utf8"?>';?> in C:\wamp\www\generation_xml\importation_xml.php on line 3
 
Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in C:\wamp\www\generation_xml\importation_xml.php on line 3
 
Warning: Invalid argument supplied for foreach() in C:\wamp\www\generation_xml\importation_xml.php on line 6


 
En revanche si je modifie la ligne si dessous avec comme chemin un vrais fichier xml contenant les même information que la page php généré je n'est plus d'erreurs.
 

Citation :

$liste = simplexml_load_file('C:\wamp\www\generation_xml\test.xml');


 
Le fichier test.xml contient les données suivantes:
 

Citation :

<?xml version="1.0" encoding="utf8"?>
<liste_contacts>
 <contact>
  <prenom>Maxime</prenom>
  <nom>LADRA</nom>
  <email>maxime.ladra@fai.com</email>
 </contact>
 <contact>
 
  <prenom>Julien</prenom>
  <nom>CHADOURNE</nom>
  <email>JULIEN.CHADROUNE@XXX.COM</email>
 </contact>
 <contact>
  <prenom>Julien</prenom>
  <nom>Rideaud</nom>
 
  <email>Julien.Rideaud@mail.com</email>
 </contact>
 <contact>
  <prenom>Celine</prenom>
  <nom>Chamaillard</nom>
  <email>maildeceline@mail.com</email>
 </contact>
 
</liste_contacts>


 
Voila merci d'avance de l'aide que vous pourrez m'apporter car je patauge depuis des heures sans succès....

mood
Publicité
Posté le 27-01-2009 à 21:40:13  profilanswer
 

n°1843920
omega2
Posté le 27-01-2009 à 22:32:32  profilanswer
 

Et si tu enregistres le résultat de ton premier fichier et qu'ensuite tu le recharges avec une version modifié de ton second script pour relire le fichier xml généré, ça te donne quoi?
 
Code le plus simple pour enregistrer le fichier :

Code :
  1. file_put_contents('unfichier.xml',file_get_contents('C:\wamp\www\generation_xml\generation_xml.php'));


Message édité par omega2 le 27-01-2009 à 22:33:11
n°1843930
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 27-01-2009 à 22:49:21  profilanswer
 

Je serais toi je regarderais du côté de fopen, puis fpassthru pour récupérer le xml généré dans une chaine et ensuite utiliser simplexml_load_string.
 
Ou alors autre solution, élégante c'est de d'indiquer dans la configuration du serveur php que les fichiers xml doivent considérés comme des scripts php.

n°1843948
omega2
Posté le 27-01-2009 à 23:28:14  profilanswer
 

fodger > T'es sur d'avoir bien lu son message? Le fichier qui créé le code xml est un fichier avec une extension .php . Il n'a donc pas à modiifer les réglages de son serveur pour qu'il considére les .xml comme des .php
 
Pour le reste, ça peut être une idée à suivre.

n°1843959
solarius
Posté le 28-01-2009 à 00:02:47  profilanswer
 

Bon j'ai testé la méthode de fodger qui crée un fichier xml mais avec mon code a l'intérieur donc ce n'est pas bon^^
 
En revanche ta méthode omega2 fonctionne presque.
Je me suis justement penché sur les fopen depuis que j'ai poster mon message et c'est une drôlre de coincidence que tu m'en parle (ou pas^^)
Je ne connaissais pas du tout et ça me génère un fichier xml correct a ceci prés que je n'ai pas toute les informations voulu dedans.
 
Je montre le code et je m'explique ensuite:
 

Citation :

<?php
//Temps maximum d'exécution de la page <gras><couleur nom="rouge">nul</couleur></gras>
//require_once('import.php');
 
$identifiant_elab = 'root';
$password_elab = '';
$bdd_elab = 'test';
$serveur_elab = 'localhost';
 
//Connection à la base de données Elab
mysql_connect($serveur_elab, $identifiant_elab , $password_elab);
mysql_select_db($bdd_elab);
 
//Importation des données de la base de données
$resultats_importation = mysql_query("SELECT nom, prenom, email, id FROM contact" );
while($liste = mysql_fetch_array($resultats_importation))
{
$tableau[] = array (
 "nom" => $liste['nom'],
 "email" => $liste['email'],
 "prenom" => $liste['prenom'],
 "id" => $liste['id'],
 );
}
 
//Parcour le tableau pour en extraire les données
$compteur = 0;
foreach($tableau as $info)
{
 $nom = $info['nom'];
 $email = $info['email'];
 $prenom = $info['prenom'];
 $id = $info['id'];
 
 $compteur++;
 $resultat[$compteur] = '
 <contact>
  <prenom>' . $prenom . '</prenom>
  <nom>' . $nom . '</nom>
  <email>' . $email . '</email>
 </contact>';
 
 $resultat_final = $resultat[$compteur -1] . $resultat[$compteur];
 
}  
 
//test
echo $resultat_final;
 
$fp = fopen('contacts.xml', 'w');  
fwrite($fp, '<liste_contacts>' . $resultat_final . '</liste_contacts>');  
 
fclose($fp);  
 
?>


 
Donc le script fonctionne a ceci près:
En faite je suis obliger d'insérer les données hors de la boucle donc j'essaye de faire une variable nommée $résultat_final qui contiendra les informations de chaque passage en boucle mais je n'y arrive pas très bien.
 
J'ai fait un compteur pour différencier les différentes boucles.
Par exemple :$resultat[$compteur] comptien les données du premier tour de boucle si $compteur est égal à 1 et ect...
 
Donc bref voila j'essaye d'insérer les données de chaque tour dans la même variable de façon a ce qu'elle contienne toute les données à la fin et que je puisse me servir de cette variable que je mettrais dans fwrite pour écrire mon xml d'un seul coup.
 
Pour l'instant cette ligne en rouge écrit dans le xml le dernier et l'avant dernier tout de boucle seulement.

n°1843961
omega2
Posté le 28-01-2009 à 00:16:59  profilanswer
 

Tu sais que tu peux faire plusieurs fwrite pour écrire les données au fur et à mesure?

n°1843962
solarius
Posté le 28-01-2009 à 00:22:37  profilanswer
 

Oui mais le problème est que ma base de donnée contient pas toujours le même nombre d'information.
Desfois il y plus de contacts que d'autres donc ca change le nombre de ligne dans le xml.
De ce faite, je ne sais pas combien de fwrite faire a l'avance dans mon code donc je ne vois toujours pas la solution.

n°1843967
solarius
Posté le 28-01-2009 à 01:20:43  profilanswer
 

J'ai Réussi !
Voila la solution si vous voulez voir:
 

Citation :

<?php
//Temps maximum d'exécution de la page <gras><couleur nom="rouge">nul</couleur></gras>
//require_once('import.php');
 
$identifiant_elab = 'root';
$password_elab = '';
$bdd_elab = 'test';
$serveur_elab = 'localhost';
 
//Connection à la base de données Elab
mysql_connect($serveur_elab, $identifiant_elab , $password_elab);
mysql_select_db($bdd_elab);
 
//Importation des données de la base de données
$resultats_importation = mysql_query("SELECT nom, prenom, email, id FROM contact" );
while($liste = mysql_fetch_array($resultats_importation))
{
$tableau[] = array (
 "nom" => $liste['nom'],
 "email" => $liste['email'],
 "prenom" => $liste['prenom'],
 "id" => $liste['id'],
 );
}
 
//Parcour le tableau pour en extraire les données
$compteur = 0;
$fp = fopen('contacts.xml', 'w');
fwrite($fp, '<liste_contacts>' );
foreach($tableau as $info)
{
 $nom = $info['nom'];
 $email = $info['email'];
 $prenom = $info['prenom'];
 $id = $info['id'];
 
 $compteur++;
 $resultat[$compteur] = '
 <contact>
  <prenom>' . $prenom . '</prenom>
  <nom>' . $nom . '</nom>
  <email>' . $email . '</email>
 </contact>';
 
 
fwrite($fp, $resultat[$compteur]);  
}
fwrite($fp, '</liste_contacts>');  
fclose($fp);  
 
?>

n°1843968
omega2
Posté le 28-01-2009 à 01:24:47  profilanswer
 

Dis moi, quand tu remplis $tableau, tu connais le nombre de donnée que tu reçois?
Et quand tu fais le foreach?
Pourquoi en aurais-tu besoin alors pour créer le fichier xml?
 
D'ailleurs à la réflexion je me demande pourquoi tu t'embêtes à passer par un $tableau alors que tu pourrais écrire le fichier xml dès la boucle du "mysql_fetch_array".

n°1843972
solarius
Posté le 28-01-2009 à 02:39:54  profilanswer
 

Ouais ben en faite le tableau, c'est vrais j'en avait pas besoin mais c'est qu'au départ mon script était complètement différent et a force de dériver j'ai laissé le tableau qui ne sert plus a rien maintenant.
 
Mais bon maintenant tout fonctionne, mon fichier XML est bien généré en entier.
Par contre j'ai un problème au niveau de l'insertion des donnée.
 
En effet, seul que la première ligne est inséré dans la base de données, je m'explique:
 
Voici ci-dessous la page qui récupère les données du XML génèré.
Explication du bug: quand je fais des echo des variables, par exemple $nom, tout les noms contenu dans le xml sont bien affichés en revanche seul le premier nom, le premier prénom... est insérer dans la base de données.
 

Citation :

<?php
 
$identifiant_sugar = 'root';
$password_sugar = '';
$bdd_sugar = 'sugarcrm';
$serveur_sugar = 'localhost';
 
mysql_connect($serveur_sugar, $identifiant_sugar, $password_sugar);
mysql_select_db($bdd_sugar);
 
$liste = simplexml_load_file('C:\wamp\www\synchronisation\contacts.xml');
 
 
foreach( $liste->contact as $contact)
{
 
 $nom = $contact->nom;
 $prenom = $contact->prenom;
 $email = $contact->email;
 
 echo $nom . '<br/>';
 echo $prenom . '<br/>';
 echo $email . '<br/>';
   
 mysql_query("INSERT INTO contacts (first_name, last_name, email1) VALUES ('$nom', '$prenom', '$email')" );
}
 
mysql_close();
 
?>

mood
Publicité
Posté le 28-01-2009 à 02:39:54  profilanswer
 

n°1843973
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 28-01-2009 à 02:53:57  profilanswer
 

Citation :

Bon j'ai testé la méthode de fodger qui crée un fichier xml mais avec mon code a l'intérieur donc ce n'est pas bon^^


 
Je me suis mal exprimé pour l'extension.
 
simplexml_load_file se contente d'ouvrir un fichier xml, il n'y a pas d'exécution de la part du serveur dans ce cas. Ca doit fonctionner avec fopen et fgets.
 
J'ai oublié d'en parler, la librairie curl fonctionne très bien.
 
PS : je suis fatigué fpassthru se contente de lire le flux et de l'afficher.


Message édité par fodger le 28-01-2009 à 03:21:08
n°1843974
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 28-01-2009 à 02:54:36  profilanswer
 

omega2 a écrit :

fodger > T'es sur d'avoir bien lu son message? Le fichier qui créé le code xml est un fichier avec une extension .php . Il n'a donc pas à modiifer les réglages de son serveur pour qu'il considére les .xml comme des .php
 
Pour le reste, ça peut être une idée à suivre.


 
Très bien lu.

n°1843975
solarius
Posté le 28-01-2009 à 02:57:22  profilanswer
 

Bon voila tout fonctionne de A à Z et j'ai réglé les autre problème que j'ai dit plus haut.
Pfiouuu !
(je vais poster un nouveau topic pour la sécurisation de mon XML)
 
Merci a vous.


Message édité par solarius le 28-01-2009 à 02:57:50

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Exportation xml avec php

 

Sujets relatifs
Mysql/phpmyadmin Exportation csv (plus d'options?)Macro Exportation
Open Office Basic : exportation de diagrammes de Calc vers Writer.exportation/importation base MySQL
flvPlayBack problème d'exportationExportation Macro excel "VB" win ---> Mac
Probleme d'exportation de symboles dans une dll-VS2005Exportation BDD phpmyadmin, clé étrangère, et insertion de données
pbm d'exportation phpmyadminexportation pages word
Plus de sujets relatifs à : Exportation xml avec php


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)