Exportation xml avec php - PHP - Programmation
Marsh Posté le 27-01-2009 à 22:32:32
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 :
|
Marsh Posté le 27-01-2009 à 22:49:21
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.
Marsh Posté le 27-01-2009 à 23:28:14
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.
Marsh Posté le 28-01-2009 à 00:02:47
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 |
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.
Marsh Posté le 28-01-2009 à 00:16:59
Tu sais que tu peux faire plusieurs fwrite pour écrire les données au fur et à mesure?
Marsh Posté le 28-01-2009 à 00:22:37
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.
Marsh Posté le 28-01-2009 à 01:20:43
J'ai Réussi !
Voila la solution si vous voulez voir:
Citation : <?php |
Marsh Posté le 28-01-2009 à 01:24:47
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".
Marsh Posté le 28-01-2009 à 02:39:54
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 |
Marsh Posté le 28-01-2009 à 02:53:57
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.
Marsh Posté le 28-01-2009 à 02:54:36
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 |
Très bien lu.
Marsh Posté le 28-01-2009 à 02:57:22
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.
Marsh Posté le 27-01-2009 à 21:40:13
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]
<?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]
<?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:
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.
$liste = simplexml_load_file('C:\wamp\www\generation_xml\test.xml');
Le fichier test.xml contient les données suivantes:
<?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....