Fichier Xml + Suppression de balise

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fichier Xml + Suppression de balise

par Ryle » 01 juin 2009, 21:57

C'est parce que tu essayes d'écrire au début du fichier, alors que je t'ai dit que tu ne pouvais pas le faire sans perdre d'informations. En effet, à chaque ligne que tu vas ajouter à cet endroit, tu vas écraser celle qui s'y trouvait.

Il te faut :
- lire tout le contenu du fichier existant
- passer les deux première ligne
- insérer tes nouvelles actus
- placer à la suite le reste du fichier que tu as lu (pour garder les anciennes actus)

par Delph » 01 juin 2009, 16:53

Re bonjour,

Alors moi j'ai un peu avancer avec les petites précision que j'ai eu mais j'ai encore un petit problème surement pas bien méchant.

J'ai mon code :
<?php

// Efface les deux première ligne du fichier
Effacer("test.xml",1,2);

//Ouverture du fichier en lecture/écriture
$id = fopen("test.xml", "r+");
// On remet le curseur au début du fichier
fseek($id,0);
// On écrit l'arborescence du xml
fputs($id, '<?xml version="1.0" encoding="ISO-8859-1"?>');
fputs($id, '<items>');
// On ajout le titre
fputs($id, '<item>'.$titre.'</item>');
// Le message
fputs($id, '<description>'.$message.'</description>');
fputs($id, '</item>');
// Femeture du fichier
fclose($id);
?>
J'ai donc mon fichier .xml comme au dessus qui devrais normalement intégrer les données saisie dans mon formulaire. C'est pourquoi j'ai créer une fonction qui supprime les deux première ligne de mon fichier ( j'ai tester sa marche parfaitement ).

Et donc mon problème c'est donc au niveau de l'écriture, puisque mon code écrit par dessus les données déjà présente, j'ai bien regarder les différents mode d'ouverture/écriture de fichier et je ne comprend pas trop pourquoi.

Si quelqu'un aurait une idée, merci d'avance !

par Ryle » 30 mai 2009, 20:03

Bah non :)

Ton fichier xml n'est rien de plus qu'un fichier texte. La difficulté est juste d'identifier à quel endroit tu dois insérer ta nouvelle actualité, et dans ton cas, ça semble toujours être après la 2ème ligne (après le <items>), donc devrait être assez simple à mettre en place :)

par Delph » 30 mai 2009, 17:24

Ok merci d'avoir répondu !

Et le fait que ce soit un fichier xml ne pose aucun problème ?

par Ryle » 30 mai 2009, 17:17

Tu ne peux effectivement pas écrire au milieu d'un fichier sans perdre d'informations.

Il te faut lire le fichier, stocker son contenu dans une variable et réécrire entièrement le fichier avec la partie que tu souhaites y intégrer...

Fichier Xml + Suppression de balise

par Delph » 30 mai 2009, 16:54

Bonjour à tous,

Alors voilà j'ai un petit soucis avec un fichier xml qui me sert à faire des news sur un site
le fichier se trouve sous la forme de :

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8"?> <items> <item> <title>Test</title> <target>_parent</target> <description> Test </description> </item> <items>
J'ai donc crée un petit script php à l'aide fputs pour ajouter à la suite ( ou au début ? ) du fichier les nouvelles news. En gros sa me donne ça :
// Nom du fichier
$fichier = 'news.xml';

          $fp = fopen($fichier, $mode); 
	  // J'écrit dans le fichier	  
	  fputs($fp, "<item>");
	  fputs($fp, "<title>$nom</title>");	  
	  fputs($fp, "<target>_parent</target>");
	  fputs($fp, "<description>$commentaire</description>");	
	  fputs($fp, "</item>");
          fputs($fp, "</items>");
	  // Fermeture du fichier
	  fclose($fp);
  	echo '<p>News Ajoutées!</p>';
Sauf que la, j'ai un petit problème vu qu'il faudrais que ma news la plus récente soit en premier, donc il faudrais que je réécrive tous le début du fichier xml à chaque fois ou alors si on peux positionner le pointeur pour écrire directement au bon endroit ? Je ne sais pas trop comment faire au mieux !
Si quelqu'un aurait une petite idée.

Merci d'avance