Ajout d'une balise à la fin dun fichier xml en php
Résolu
Coukies94
Messages postés
40
Date d'inscription
Statut
Membre
Dernière intervention
-
Coukies94 Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
Coukies94 Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Alors voila j'ai quasiment terminé un petit projet de calendrier avec ajout d’événements mais je bloque sur un point.
Voila comment fonctionne mon projet :
Un formulaire envoi à une page cible.php les événements qui sont travaillés pour être ajoutés dans un fichier.xml qui contient donc l'ensemble des événements du calendrier, l'ajout se fait parfaitement mais à la fin du fichier.
Le problème est que pour rendre fonctionnel le calendrier j'ai besoin de fermer la balise </agenda> qui se trouve à la fin de mon fichier xml
Voici mon code php qui écrit les événements à la fin de mon fichier xml (voir ligne 21) :
J'ai essayé plusieurs choses mais en particulier :
La fonction fseek() et SEEK_END qui me semble la plus adaptée mais je n'arrive pas à l'adapter à mon besoin
Actuellement voila comment est construit le fichier.xml
Je voudrais donc placer mes nouveaux événements avant la balise </agenda> afin de permettre de conserver le </agenda> à la fin du fichier
Ou peut être est-il possible de faire plus simple, comme contrôler si le fichier xml possede une balise </agenda> si non alors ont en place une en bas du fichier ?
Je suis ouvert à tout avis pour avancer :D
Alors voila j'ai quasiment terminé un petit projet de calendrier avec ajout d’événements mais je bloque sur un point.
Voila comment fonctionne mon projet :
Un formulaire envoi à une page cible.php les événements qui sont travaillés pour être ajoutés dans un fichier.xml qui contient donc l'ensemble des événements du calendrier, l'ajout se fait parfaitement mais à la fin du fichier.
Le problème est que pour rendre fonctionnel le calendrier j'ai besoin de fermer la balise </agenda> qui se trouve à la fin de mon fichier xml
Voici mon code php qui écrit les événements à la fin de mon fichier xml (voir ligne 21) :
<?php $datedelevenemententimestamp=$_POST['datetime']; $datecreationevenement = date('d-m-Y H:i:s') . "\n"; //création de la variable de date de création de l'evenemennt $datedelevenemententimestamp2 = strtotime($datedelevenemententimestamp); //création de la variable de date de l'evenemennt en timestamp $datedelevenementenformatdate = date("d-m-Y H:i:s",strtotime($datedelevenemententimestamp)); //création de la variable de date de l'evenemennt en date normale $textevenement = $_POST['texteevt']; echo '<br>'; // <!-- debut mise a jout du fichier evenement --> // $filename = 'ZAgenda.xml'; $somecontent = '<Evennement><date>'."".$datedelevenemententimestamp2."".'</date><contenu>'."".$textevenement."".'</contenu></Evennement><!-- creation '."".$datedelevenementenformatdate."".'--> '.""; // Assurons nous que le fichier est accessible en écriture if (is_writable($filename)) { // Dans notre exemple, nous ouvrons le fichier $filename en mode d'ajout // Le pointeur de fichier est placé à la fin du fichier // c'est là que $somecontent sera placé if (!$handle = fopen($filename, 'a')) { echo "Impossible d'ouvrir le fichier ($filename)"; exit; } // Ecrivons quelque chose dans notre fichier. if (fwrite($handle, $somecontent) === FALSE) { echo "Impossible d'écrire dans le fichier ($filename)"; exit; } echo "L'écriture de ($somecontent) dans le fichier ($filename) a réussi"; fclose($handle); } else { echo "Le fichier $filename n'est pas accessible en écriture."; } ?>
J'ai essayé plusieurs choses mais en particulier :
La fonction fseek() et SEEK_END qui me semble la plus adaptée mais je n'arrive pas à l'adapter à mon besoin
Actuellement voila comment est construit le fichier.xml
<agenda> <Evennement><date>1519902000</date><contenu>erdgvfdgdfgfd</contenu></Evennement><!-- creation 01-03-2018 12:00:00--> <Evennement><date>1519902000</date><contenu>erdgvfdgdfgfd</contenu></Evennement><!-- creation 01-03-2018 12:00:00--> <Evennement><date>1519902000</date><contenu>erdgvfdgdfgfd</contenu></Evennement><!-- creation 01-03-2018 12:00:00--> </agenda>
Je voudrais donc placer mes nouveaux événements avant la balise </agenda> afin de permettre de conserver le </agenda> à la fin du fichier
Ou peut être est-il possible de faire plus simple, comme contrôler si le fichier xml possede une balise </agenda> si non alors ont en place une en bas du fichier ?
Je suis ouvert à tout avis pour avancer :D
A voir également:
- Ajout d'une balise à la fin dun fichier xml en php
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
Et serait s'il possible de m'aider ?
Voila ou j'en suis :
En premier : j'ajoute juste l’événement sans la balise de fermeture "</agenda>"
En deuxième j'ajoute la balise "</agenda>"
Entre ces deux actions je voudrais supprimer ou remplacer la dernière ligne du fichier XML qui est "</agenda>" par un blanc ... cela afin d’éviter que la balise "</agenda>" ne se répète à chaque ajout d’événements
mon code actuel :
Le fichier XML :
J'ai bien réfléchis je pense qu'ajouter un fseek pour écrire 9 caractères avant la fin de mon fichier XML serait parfait mais je n'y arrive pas, je pense que c'est la ou je le met à chaque fois que ce n'est pas bon (pas pris en compte, j'ai toujours l’événement à la fin de mon fichier)
Code complet :
https://www.php.net/manual/fr/simplexml.examples-basic.php