Menu

Ajout d'une balise à la fin dun fichier xml en php [Résolu]

Coukies94 39 Messages postés jeudi 3 septembre 2015Date d'inscription 25 avril 2018 Dernière intervention - 6 mars 2018 à 23:59 - Dernière réponse : Coukies94 39 Messages postés jeudi 3 septembre 2015Date d'inscription 25 avril 2018 Dernière intervention
- 18 avril 2018 à 14:36
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) :
<?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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
jordane45 21439 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 juin 2018 Dernière intervention - 7 mars 2018 à 09:25
1
Merci
Bonjour,

Je pense que le mieux serait :
- parser le XML existant et stocker dans un array
- Manipuler l'array pour y ajouter/supprimer/modifier les données
- Réécrire l'intégralité du xml.


Merci jordane45 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 24366 internautes ce mois-ci

Coukies94 39 Messages postés jeudi 3 septembre 2015Date d'inscription 25 avril 2018 Dernière intervention - 22 mars 2018 à 18:46
Up ?
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)
fseek($handle, -9, SEEK_END ); 


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.";
}
?>
jordane45 21439 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 juin 2018 Dernière intervention - 22 mars 2018 à 20:00
Relis ma reponse et Regarde donc ceci
http://php.net/manual/fr/simplexml.examples-basic.php
Coukies94 39 Messages postés jeudi 3 septembre 2015Date d'inscription 25 avril 2018 Dernière intervention - 23 mars 2018 à 16:19
Je l'ai lu en long en large ta réponse mais je ne parviens pas a appliquer dans mon cas les exemples, j'ai donc essayé d'autres pistes comme le fseek .... et bien d'autres c'est pour cela que j'essai de trouver de l'aide, je t'assure que si je savais trouver les informations même si ça me prendrais encore plus d'heures je le ferais ....
Coukies94 39 Messages postés jeudi 3 septembre 2015Date d'inscription 25 avril 2018 Dernière intervention - 23 mars 2018 à 16:28
J'ai beaucoup cherché ici Egalement :
https://www.w3schools.com/php/php_xml_simplexml_read.asp
Coukies94 39 Messages postés jeudi 3 septembre 2015Date d'inscription 25 avril 2018 Dernière intervention - 18 avril 2018 à 14:36
Up svp ? =)
Commenter la réponse de jordane45