Ajout d'une balise à la fin dun fichier xml en php
Résolu
Coukies94
Messages postés
44
Statut
Membre
-
Coukies94 Messages postés 44 Statut Membre -
Coukies94 Messages postés 44 Statut Membre -
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 :
<?php // <!-- creation de l'evenement --> // $datedelevenemententimestamp=$_POST['datetime']; $datecreationevenement = date('d-m-Y H:i:s'); //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>'; echo '<br>'; $filename = 'ZAgenda.xml'; $somecontent = '<Evennement><date>'."".$datedelevenemententimestamp2."".'</date><contenu>'."".$textevenement."".'</contenu></Evennement><!-- creation '."".$datecreationevenement."".'--> '.""; // fichier accessible en écriture ? if (is_writable($filename)) { // 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; } // Ecriture du fichier if (fwrite($handle, $somecontent) === FALSE) { echo "Impossible d'écrire dans le fichier ($filename)"; exit; } echo "L'evenement à bien été ajouté au calendrier"; fclose($handle); } else { echo "Le fichier $filename n'est pas accessible en écriture."; } ?> <!-- ici je voudrais soit : supprimer ou remplacer la derniere ligne de mon fichier XML (qui est la fermeture de la balise "</agenda>") Soit dans l'ajout de mon evenement deplacer l'ajout une ligne avant la fin du fichier --> <!-- <?php // ici j'ajoute la fermeture de la balise agenda // $file = 'ZAgenda.xml'; // Ouvre un fichier pour lire un contenu existant $current = file_get_contents($file); // Ajoute la fermeture de la balise $current .= "</agenda>\n"; // Écrit le résultat dans le fichier file_put_contents($file, $current); ?>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 :
<?php // <!-- creation de l'evenement --> // $datedelevenemententimestamp=$_POST['datetime']; $datecreationevenement = date('d-m-Y H:i:s'); //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>'; echo '<br>'; $filename = 'ZAgenda.xml'; $somecontent = '<Evennement><date>'."".$datedelevenemententimestamp2."".'</date><contenu>'."".$textevenement."".'</contenu></Evennement><!-- creation '."".$datecreationevenement."".'--> '.""; // fichier accessible en écriture ? if (is_writable($filename)) { // 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; } // Ecriture du fichier if (fwrite($handle, $somecontent) === FALSE) { echo "Impossible d'écrire dans le fichier ($filename)"; exit; } echo "L'evenement à bien été ajouté au calendrier"; fclose($handle); } else { echo "Le fichier $filename n'est pas accessible en écriture."; } ?>https://www.php.net/manual/fr/simplexml.examples-basic.php