Bonjour,

J'ai le projet de créer un mur de texte collaboratif où chaque visiteur pourrait envoyer quelques mots. Je souhaiterai programmer ça sans base de donnée MySQL. En utilisant enfaite XML.

l'envoi des données se fait en PHP, de cette manière:


<?php
$t="<donnee>Test</donnee>";
// Enregistrer les donnees

$fichier = 'base.xml';

$fp=fopen($fichier,"a+");
fwrite($fp,"
$t");
//fermer le fichier
fclose($fp);

?>


Ici il n'y a pas de problème, par contre la réception est moins évidente. Cette page envoi une nouvelle ligne au fichier XML qui la place automatiquement à la fin, en donc en dehors de mes balises racines, ce qui rend le fichier inutilisable.

<racine>
<donnee>Donnée déjà présente</donnee>
</racine>
<donnee>Test</donnee>



Y'a-t-il un moyen pour placer l'envoi des données avant la fermeture de la racine ?

Ensuite j'ai un autre problème, qui concerne moins mon projet mais toujours l'XML:
Comment réutiliser les données d'un fichier XML avec HTML ?
Cette méthode est censée fonctionner, mais je tombe toujours sur un tableau vide.

<xml id="fichierxml" src="base.xml"></xml>
<table border="0" width="100%" datasrc="#fichierxml">
<tr align="left">
<td><span datafld="donnee"></span></td>
</tr>
</table>



Je commence en XML, veuillez excusez mes très faibles bases.

Merci d'avance
Modifié par Laponies (09 Mar 2008 - 13:10)
Administrateur
a écrit :
Y'a-t-il un moyen pour placer l'envoi des données avant la fermeture de la racine ?

Il faut tout réécrire, ou bien utiliser des classes PHP. Mais il n'est pas possible de gérer du XML avec un simple fopen qui ajoute des données à la fin.

a écrit :
Comment réutiliser les données d'un fichier XML avec HTML ?

Avec un langage de scripting côté serveur (PHP, ASP, Perl...)
Modifié par dew (09 Mar 2008 - 13:54)
Ok, merci.
Par rapport à l'envoi des données, n'y aurait-il pas moyen de supprimer la fermeture de la balise racine et de rajouter la nouvelle donnée ainsi que la balise fermante par la suite ? Ou ces méthodes fopen et fwrite ne permettent pas de supprimer ?
utilises le DOM ( quasy pareil php que javascript en plus ).

tiens essai ce code pour voir d'abord en mettant l'adresse web de ton fichier.

puis en rajoutant ?val=quelquechose

<?php
header('content-type:text/xml');

 $dom = new DOMDocument();

$racine = $dom->createElement('racine');
$dom->appendChild($racine);

$donne1 = $dom->createElement('donnee');
$textdonne1 = $dom->createTextNode(utf8_encode('Donnée déjà présente'));
$donne1->appendChild($textdonne1);

$racine->appendChild($donne1);

$premieraffichage = $dom->saveXML();

if ( !isset($_GET['val']))  {
echo $premieraffichage; 

} else {

$donne2 = $dom->createElement('donnee');
$textdonne2 = $dom->createTextNode(utf8_encode('Test'));
$donne2->appendChild($textdonne2);

$racine->appendChild($donne2);

$secondaffichage = $dom->saveXML();

echo $secondaffichage;
}
?>


ne laisse pas d'affichage avant le fichier xml pas même une ligne vide
Modifié par CPascal (09 Mar 2008 - 15:19)
Uhm, je suis un peu perdu là. Smiley ohwell
Il faut donc que je précise le chemin de mon fichier XML, et que je définisse val ?
Je ne vois pas exactement comme faire.

Pour val un simple: $val = quelquechose ?
et pour localiser le fichier XML, je ne vois pas du tout par contre.
val=1 ou val=machin, n'importe quoi en gos c'est pour le test suivant:

if ( !isset($_GET['val']))  { // si val n'est pas defini afficher le xml 1er verison
echo $premieraffichage; 

} else {

pour definir l'endroit

chez moi c'est cela:

http://localhost/test/testdom.php.

et

http://localhost/test/testdom.php?val=1.

pour evaluer un fichier PHP il faut lancer un serveur local sur son PC.
en effet mon fichier est un fichier php. ensuite analyser comme du xml a cause de la fonction header.

j'ai installé wampserver 2 quand a moi. tu n'en as pas?
Modifié par CPascal (09 Mar 2008 - 17:27)
Ah d'accord je viens de comprendre.
Non, oui, j'ai un serveur local pour PHP.

Mais disons que je ne vois pas vraiment en quoi ton code pourrait m'aider dans mon problème, dans la mesure où il ne gère qu'un seul nouvel ajout. Ce que j'aimerai faire c'est une sorte de Shoutbox infinie. C'est enfaite pour ça que je préférais utiliser du XML que MySQL, pour que mon "mur" soit infini et puisse être facilement déplacé.
baf avec le DOM tu peux faire autant d'ajout que tu veux, selon ce que tu programme. ou vois tu une limite? au moins dans la création il n'y en as pas et c'est fluide.

as tu vu que l'on pouvait fabriquer des elements les attacher où on veux et les rattacher à un element comme ça. il genere toutes les fermetures de balise apres coup.

et tu as aussi la possibilité d'ajouter ou modifier des attributs a tes balises.

mon programme n'etait qu'un exemple de l'utilisation de DOM pour fabriquer ton exemple.

c'est ce qui est utiliser dans la programmation ajax pour manipuler les fichiers xml coté serveurs PHP.

ça ou l'autre possibilité apparu avec PHP5: le simpleXML qui selon son nom est censé être plus simple. notamment pour la reprise de xml déja existant et pour le manipuler.

ce sera toujours plus simple que ce tu essaie de faire a savoir réécrire un parseur a partir de zero.

tu trouves ça plus simple, plus fluide qu'une BDD? je pense que de manipuler du XML c'est plus dur et ça demande l'apprentissage d'un tas de techno XPath minimum.

ou alors tu as la bosse des expressions régulieres.jusqu'a simpleXML c'etait la solution la plus frequente je crois en PHP.car il y avait peu d'outils en php4.


sans vouloir t'offenser l'ecriture d'un parseur XML est quelquechose sur lesquels des tas de programmeurs competents se sont penché pendant des années.il en existe de trés optimisé.
Même si le XML est plus récent en PHP qu'il ne l'est en Java par exemple.

le seul soucis avec DOM c'est qu'il faut stocker tous l'arbre en memoire vive.

si on ne veut pas cela il faut utiliser un parseur JAX comme j'en avais vu en java.

je ne sais pas si php en possedes l'equivalent.
Modifié par CPascal (09 Mar 2008 - 22:49)
Ben disons qu'il me semblait qu'utiliser du XML plutôt que des BDD était malin, vu que je n'y connais rien du tout en MySQL, quoique pas vraiment plus en ce qui concerne l'envois de donnée vers XML.

Bon eh bien je crois que je vais donc me tourner vers des BDD et apprenant un peu à les utiliser. Vu que là, tout ça me dépasse un peu. Mais merci beaucoup pour ton aide et tes lumières Smiley cligne !