Ecrire dans mon fichier XML [Résolu]

Signaler
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009
-
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009
-
Bonjour,

Voila je vous expose ma demande. J'ai un fichier XML qui gère mon diaporama FLASH. J'aimerais grace a php mettre ce fichier à jour. Il y a une partie pour la config et une partie pour les photos.

<?xml version="1.0"?>



J'aimerais que quand je met les options à jour il n'y a que la partie jusqu'a  de qui soit remplacée et quand je met la partie photo à jour il n'y a que la partie qui soit remplacée.

Faisable ? Quelle solution ?

Merci

18 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

ben si, c'est du xml, on peut très bien via l'extension DOM par exemple.
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
tu stockes dans une variable ( $truc .= ) au lieu de faire un echo et ensuite,, tout à la fin, tu sauves cette variable dans un fichier.
http://ch2.php.net/fwrite

*****
noisy communication - wherever, be everywhere!
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
excuse moi de dire ça, mais tu es u npeu désespérant... essaie de réfléchir un petit peu avant de poser ce genre de questions!

$image_xml =  '';

while ($scan = readdir($dir)) {

if(is_file($rep."/".$scan)) {

$ext = strtolower(substr($scan, strrpos($scan, '.') + 1));if (($ext "jpg") || ($ext "jpeg") || ($ext == "gif") || ($ext == "bmp") || ($ext == "png")) {

$image_xml .= "";        
  }
 }
}

*****
noisy communication - wherever, be everywhere!
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
$x .= $y est un raccourci pour dire $x = $x+$y.
Visiblement, tu as ton error_reporting avec les notices, du coup si tu ne déclares pas la variable, il bloque et il faut donc effectivement commencer par la déclarer, vide.

*****
noisy communication - wherever, be everywhere!
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Tu ne peux pas modifier juste une partie d'un fichier, il te faut utiliser une astuce.

L'idée:

$content = file_get_contents('nom_de_ton_xml');
$new_param = 'noisy communication - wherever, be everywhere!
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
$text c'est $new_param et $filename c'est "nom_de_ton_xml" dans mon bout de code

*****
noisy communication - wherever, be everywhere!
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
ah ben effectivement... j'ai tellement pas l'habitude des fichiers XML que je pense jamais à ça ...

Malalam, t'aurais une seconde? http://www.phpcs.com/infomsg_CACHE-OB_START-AJAX_1060501.aspx

*****
noisy communication - wherever, be everywhere!
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
En fait, Malik, j'ai lu ton post déjà. Mais il faut que je teste et ça, je n'ai pas eu le temps. Je ne me suis jamais penché sur ce problème donc je ne peux pas te dire quoi que ce soit comme ça, de but en blanc :-)
Mais j'y pensais! Je comptais bien tester ton idée :-)
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

OK merci mais c'est quoi DOM ?
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Tu récupères comme tu l'entends tes nouveaux attributs... dans mon petit exemple ils sont stockés dans un tableau $attributs:

$filename = 'fichier.xml';
$xmlDoc = new DomDocument();
$xmlDoc->load($filename);

$album = $xmlDoc->getElementsByTagName('album');
// NOUVEAUX ATTRIBUTS
$album->item(0)->setAttribute('showbuttons', $attributs['showbuttons']);
$album->item(0)->setAttribute('showtitles', $attributs['showtitles']);
... etc ...
$album->item(0)->setAttribute('speed',$attributs['speed']);

$xmlDoc->save($filename);

*****
noisy communication - wherever, be everywhere!
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

Bon voila j'ai un message d'erreur: Parse error: parse error, unexpected T_OBJECT_OPERATOR in /mnt/www/*******.com/www/administration/gestion_photo.php on line 713

ligne 713: $album->item(0)->setAttribute('showbuttons', $showbuttons);
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
T'as forcément fait une erreur quelque part, genre en déclarant $album

*****
noisy communication - wherever, be everywhere!
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

Je ne comprends pas ce qui se passe .....
$album = $xmlDoc->getElementsByTagName('album');
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

Apparement DOMXML n'est pas activé chez mon hébergeur !!!

Sinon je passe par une écriture de fichier. J'aimerais juste savoir comment récupérer tous les résultats de ce code pour les écrire dans mon fichier:

$rep = "../images/diaporama/thumbs/";
$dir = opendir($rep);


while ($scan = readdir($dir)) {


if(is_file($rep."/".$scan)) {


$ext = strtolower(substr($scan, strrpos($scan, '.') + 1));if (($ext "jpg") || ($ext "jpeg") || ($ext == "gif") || ($ext == "bmp") || ($ext == "png")) {


echo "";        
  }
 }
}
  
closedir($dir);

Là il y a une boucle et on affiche les résultat avec echo moi j'aimerais les écrire dans mon fichier
avec:

fputs($fichier, $contenu_xml.$image_xml.$end_xml);

@+
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

Sinon si je fais comme tu écrits : $image_xml .= il me dit variable non défini ($image_xml) et si j'enlève le '.' avant le '=' il ne me retourne que un résultat dans mon xml.   
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

Ok très bien celà fonctionne correctement à présent. Si je comprends bien il faut d'abord déclarer la variable vide ?

De là venait l'erreur ?
Messages postés
50
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
10 février 2009

OK merci. Sinon pour faire partager le script:

<?php

$xmlfile = '../images/diaporama/dewslider.xml';

$showbuttons = $_POST['showbuttons'];
   $randomstart = $_POST['randomstart'];
      $timer = $_POST['timer'];
         $transition = $_POST['transition'];

$contenu_xml = '<?xml version="1.0"?>
';


$rep = '../images/';
   $dir = opendir($rep);


$image_xml =  '';


while ($scan = readdir($dir)) {


if(is_file($rep."/".$scan)) {


$ext = strtolower(substr($scan, strrpos($scan, '.') + 1));if (($ext "jpg") || ($ext "jpeg") || ($ext == "JPG") || ($ext == "JPEG") || ($ext == "gif") || ($ext== "bmp") || ($ext == "png")) {


$image_xml .= ''."\n";     
        }
    }
}  
closedir($dir);


$end_xml = '';


if (file_exists($xmlfile))
 {
$fichier = fopen($xmlfile,'w+');
fputs($fichier, $contenu_xml.$image_xml.$end_xml);
fclose($fichier);
}


mysql_query("UPDATE slider SET showbuttons ='$showbuttons', randomstart ='$randomstart', timer ='$timer', transition ='$transition'") or die ("Impossible de mettre à jour table_slider");

?>

Ceci pour enregistrer la modif des paramètres. Sinon quand j'ajoute ou supprime une photo je fais pareil mais en récuperant la configuration dans la table MySQL

@+ et encore merci