8791 sujets

Développement web côté serveur, CMS

Bonjour,

j'ai un tchat en php/ajax qui se sert d'un fichier xml pour stocker les messages.
j'aimerais savoir comment garder uniquement les 10 ou 20 derniers messages.

<?php
if ($_POST['pseudo']!="" and $_POST['msg']!="" ) {
	$dom = new DomDocument();
	$dom->load('tchat.xml');
	
	$nouveauMessage = $dom->createElement("msg"); 
	$nouveauMessage->setAttribute("pseudo", htmlspecialchars($_POST['pseudo']));
	$msgCont = $dom->createTextNode(htmlspecialchars($_POST['msg']));

	$nouveauMessage->appendChild($msgCont);
	
	$list = $dom->getElementsByTagName("list")->item(0);
	$list->appendChild($nouveauMessage);
	$dom->appendChild($list);

	$dom->validate();
	$dom->save('tchat.xml');
}
?>

Modifié par rui93 (26 Jan 2014 - 01:35)
Salut, comme d'habitude il faut chercher dans la doc: removeChild?
Je ne vois pas ton xml mais selon ton code tu n'enregistres que le pseudo et le message? Pourquoi pas le timestamp aussi?
Bon courage Smiley smile
merci de m'avoir repondu
voilà mon xml

<?xml version="1.0"?>
<list>
<msg pseudo="pseudo1">Msg1</msg>
<msg pseudo="pseudo2">Msg2</msg>
...
<msg pseudo="pseudo20">Msg20</msg>
</list>


j'ai regardé le lien, mais c'est uniquement pour supprimer les noeuds en entier ici c'est "list".
Mais je veux supprimer par exemple les la première ligne du noeud "list" quand le message 21 sera écrit puis la 2eme ligne quand il aura un 22e message et ainsi de suite...
Modifié par rui93 (26 Jan 2014 - 01:58)

$doc = new DOMDocument;
$doc->load('tchat.xml');

$tchat = $doc->documentElement;

$msg1 = $tchat->getElementsByTagName('msg')->item(0);
$tchat->removeChild($msg1);

echo $doc->saveXML();


Ce code en théorie supprimera le premier msg de ton xml, test et adapte.
Modifié par floreo (26 Jan 2014 - 14:32)