Modifier XML avec PHP
dj-postka
Messages postés
2409
Statut
Membre
-
dj-postka Messages postés 2409 Statut Membre -
dj-postka Messages postés 2409 Statut Membre -
Bonjour,
Je suis actuellement en stage, et j'ai pour mission d'améliorer leur site web.
Il on quelques images à afficher j'ai donc mit un slideshow/diaporama. Celui ci fonctionne avec un fichier XML. Pour rendre plus simple l'ajout de photos, j'ai mit un formulaire d'upload en php. J'aimerai que ce formulaire, a chaque fois qu'on upload une photo, qu'il ajoute les ligne nécessaire dans le XML pour que le slideshow prenne en compte la nouvelle photo fraîchement uploader.
Voici le XML:
<?xml version="1.0" encoding="UTF-8"?>
<gallery>
<folder path="Gallery_images" category="General Category" >
<folder path="Gallery_images/img1" category="Category 1" >
<image thumbnail="thumb_image1.jpg" large_image="image1.jpg" date="01.05.2009" link="http://webstunning.com" target="" caption="Image 1 caption" transition="random">
<description><![CDATA[<P ALIGN='CENTER'><FONT FACE='_sans' SIZE='12' COLOR='#FF0000'>Test HTML format</FONT></P>]]></description>
</image>
</folder>
</folder>
</gallery>
J'ai chercher sur le net, ça parle du DOM, mais je ne sais pas coder en PHP, et tout ce que j'ai pu essayer, me retournai des erreurs, donc si une âme charitable pourrai me donner un coup de mains... J'ai jusqu'à demain soir pour finir.
Je suis actuellement en stage, et j'ai pour mission d'améliorer leur site web.
Il on quelques images à afficher j'ai donc mit un slideshow/diaporama. Celui ci fonctionne avec un fichier XML. Pour rendre plus simple l'ajout de photos, j'ai mit un formulaire d'upload en php. J'aimerai que ce formulaire, a chaque fois qu'on upload une photo, qu'il ajoute les ligne nécessaire dans le XML pour que le slideshow prenne en compte la nouvelle photo fraîchement uploader.
Voici le XML:
<?xml version="1.0" encoding="UTF-8"?>
<gallery>
<folder path="Gallery_images" category="General Category" >
<folder path="Gallery_images/img1" category="Category 1" >
<image thumbnail="thumb_image1.jpg" large_image="image1.jpg" date="01.05.2009" link="http://webstunning.com" target="" caption="Image 1 caption" transition="random">
<description><![CDATA[<P ALIGN='CENTER'><FONT FACE='_sans' SIZE='12' COLOR='#FF0000'>Test HTML format</FONT></P>]]></description>
</image>
</folder>
</folder>
</gallery>
J'ai chercher sur le net, ça parle du DOM, mais je ne sais pas coder en PHP, et tout ce que j'ai pu essayer, me retournai des erreurs, donc si une âme charitable pourrai me donner un coup de mains... J'ai jusqu'à demain soir pour finir.
A voir également:
- Modifier XML avec PHP
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Xml download - Télécharger - Édition & Programmation
- Modifier story facebook - Guide
- Modifier extension fichier - Guide
4 réponses
Bonjour,
Le moyen le plus simple: gérer les références de photos en base de données, puis générer le XML entièrement après chaque validation de photo.
En PHP5, il a la classe simpleXml, assez facile à utiliser, exemple:
Avec ça, je construit un XML de ce genre:
A+
Le moyen le plus simple: gérer les références de photos en base de données, puis générer le XML entièrement après chaque validation de photo.
En PHP5, il a la classe simpleXml, assez facile à utiliser, exemple:
function genereFichierXmlAiresDuPays($codePays) {
$sql = "...ici la requête qui récupère mes données....";
$listeAires = $this->fetch($sql);
$airesXml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><aires pays="' . $codePays . '"></aires>');
$codeProvince = 'XXX';
$nomVille = 'XXX';
foreach ($listeAires AS $key => $row) {
// on crée le noeud province à chaque changement de province
if ($codeProvince != $row['province']) {
$codeProvince = $row['province'];
$province = $airesXml->addChild('province');
if (!empty($row['province'])) {
// on récupère le nom de la province à partir de son code
$resultat = $this->getProvince($codePays, $codeProvince);
$province->addAttribute('nom', $resultat[0]['nom_province']);
$province->addAttribute('code', $codeProvince);
} else {
$province->addAttribute('nom', $codePays);
}
}
// on crée le noeud ville à chaque changement de ville, ce dans le noeud province
if ($nomVille != $row['ville']) {
$nomVille = $row['ville'];
$ville = $province->addChild('ville');
$ville->addAttribute('nom', $row['ville']);
if (!empty($row['ville_vo'])) {
$ville->addAttribute('ville_vo', $row['ville_vo']);
}
}
$aire = $ville->addChild('aire');
$aire->addAttribute('num_fiche', $row['num_fiche']);
$aire->addAttribute('type_aire', $row['type_aire']);
$aire->addChild('adresse', str_replace('&', '&', $row['adresse']));
$aire->addChild('longitude', $row['longitude']);
$aire->addChild('latitude', $row['latitude']);
if ($row['photo'] == 'O') {
$aire->addChild('photo', $row['photo']);
}
if (!empty($row['elevation'])) {
$aire->addChild('elevation', $row['elevation']);
}
if (!empty($row['commentaire'])) {
$aire->addChild('commentaire','OK');
}
if (!empty($row['parametres'])) {
$aire->addChild('parametres');
$parametres = simplexml_load_string(str_replace("&","&",$row['parametres']));
foreach ($parametres AS $val) {
// echo $val->getName(); die;
$aire->parametres->addChild($val->getName(), $val);
}
}
}
return $airesXml;
}
Avec ça, je construit un XML de ce genre:
<?xml version="1.0" encoding="UTF-8"?>
<aires pays="LT">
<province nom="LT">
<ville nom="KAUNAS">
<aire num_fiche="100012" type_aire="Camping">
<adresse>CP Jonavos g. 51A</adresse>
<longitude>23.91778</longitude>
<latitude>54.93424</latitude>
<elevation>27</elevation>
<parametres>
<telephoneFixe>+370 618 09407</telephoneFixe>
<nuiteePossible>oui</nuiteePossible>
</parametres>
</aire>
</ville>
</aire>
</ville>
</province>
</aires>
A+
J'ai réussi à écrire, mais il m'efface tout plutôt que d'écrire a la suite.
<?php
//ouverture du XML
$f='............................/image_list.xml';
//lecture du XML
$contents = file_get_contents("$f");
//texte ajouter
$text = "Mon texte a ajouter";
//droits E/L
$handle = fopen($f,"w+");
//ecriture du XML
if (is_writable($f)) {
if (fwrite($handle, $text) === FALSE) {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
exit;
}
echo 'Ecriture terminé';
fclose($handle);
}
else {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
}
?>
<?php
//ouverture du XML
$f='............................/image_list.xml';
//lecture du XML
$contents = file_get_contents("$f");
//texte ajouter
$text = "Mon texte a ajouter";
//droits E/L
$handle = fopen($f,"w+");
//ecriture du XML
if (is_writable($f)) {
if (fwrite($handle, $text) === FALSE) {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
exit;
}
echo 'Ecriture terminé';
fclose($handle);
}
else {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
}
?>
je vous ai dit de regarder du cote de la classe simpleXml.
On charge une structure xml comme suit:
$xml = simple_xml_loadfile(....mon fichier xml à charger....);
....ici le bout de code qui va bien pour rajouter une structure.... -> voir les fonctions addChild et addAttribute
ensuite, on réécrit dans le fichier:
$xml->asXml('....mon fichier à qsauvegarder....');
je vous donne une piste, ensuite prenez un peu de temps pour lire la doc en ligne. Goggle et chercher:
php simpleXml
Il y a beaucoup d'exemples.
Votre problème est réglé en 2 heures chrono.
A+
On charge une structure xml comme suit:
$xml = simple_xml_loadfile(....mon fichier xml à charger....);
....ici le bout de code qui va bien pour rajouter une structure.... -> voir les fonctions addChild et addAttribute
ensuite, on réécrit dans le fichier:
$xml->asXml('....mon fichier à qsauvegarder....');
je vous donne une piste, ensuite prenez un peu de temps pour lire la doc en ligne. Goggle et chercher:
php simpleXml
Il y a beaucoup d'exemples.
Votre problème est réglé en 2 heures chrono.
A+
Déjà merci d'avoir répondu et désolé, je n'avais pas vu votre premier post. Du coup j'ai réussi à faire ce que je voulais, a quelque choses près.
Voici tout mon code:
<?php
//----------------------------
// DEFINITION DES VARIABLES
//----------------------------
$target = 'Gallery_images/bus/Gallery_images/'; // Repertoire cible
$f='Gallery_images/bus/Gallery_files/image_list.xml'; // Fichier XML
$files = $_FILES['fichier']['name'];
//----------------------
// SCRIPT D'UPLOAD
//----------------------
?>
<html>
<head>
<title>Bus - Upload</title>
</head>
<body>
<?php
if(!empty($_POST['posted'])) {
// On vérifie si le champ est rempli
if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
$contents = file_get_contents("$f");
$text = "<image thumbnail="$_FILES['fichier']['name']" large_image="$_FILES['fichier']['name']" caption="Image 1 caption" transition="random"></image>";
$handle = fopen($f,"a+");
if (is_writable($f)) {
if (fwrite($handle, $text) === FALSE) {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
exit;
}
echo '<b>XML Mis a jour avec succes !</b>';
echo '<hr />';
fclose($handle);
}
else {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
}
// Si upload OK alors on affiche le message de réussite
echo '<b>Fichier uploader avec succes !</b>';
echo '<hr />';
echo '<b>Fichier uploader :</b> ', $_FILES['fichier']['name'], '<br />';
echo '<hr />';
echo '<br /><br />';
} else {
// Sinon on affiche une erreur pour le champ vide
echo '<b>Le champ du formulaire est vide !</b><br /><br />';
}
}
?> <form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
<b>Envoyer le fichier :</b><br /><br />
<input type="hidden" name="posted" value="1" />
<input name="fichier" type="file" />
<input type="submit" value="Uploader" />
</form>
</body>
</html>
Le formulaire d'upload est couplé avec le code qui modifie le XML. Avec ce code, je reçois ce message:
Parse error: syntax error, unexpected T_VARIABLE in /homez.41/publibus/www/admin_upload/upload_bus.php on line 27
J'ai modif un peux, avant il éditait bien mon XML, mais écrivais "$files" plustôt que le nom de l'image uploadé. L'entriprise ou je suis en stage ne savent pas si il on une BDD, donc pour votre méthode ça va être difficile.
Voici tout mon code:
<?php
//----------------------------
// DEFINITION DES VARIABLES
//----------------------------
$target = 'Gallery_images/bus/Gallery_images/'; // Repertoire cible
$f='Gallery_images/bus/Gallery_files/image_list.xml'; // Fichier XML
$files = $_FILES['fichier']['name'];
//----------------------
// SCRIPT D'UPLOAD
//----------------------
?>
<html>
<head>
<title>Bus - Upload</title>
</head>
<body>
<?php
if(!empty($_POST['posted'])) {
// On vérifie si le champ est rempli
if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
$contents = file_get_contents("$f");
$text = "<image thumbnail="$_FILES['fichier']['name']" large_image="$_FILES['fichier']['name']" caption="Image 1 caption" transition="random"></image>";
$handle = fopen($f,"a+");
if (is_writable($f)) {
if (fwrite($handle, $text) === FALSE) {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
exit;
}
echo '<b>XML Mis a jour avec succes !</b>';
echo '<hr />';
fclose($handle);
}
else {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
}
// Si upload OK alors on affiche le message de réussite
echo '<b>Fichier uploader avec succes !</b>';
echo '<hr />';
echo '<b>Fichier uploader :</b> ', $_FILES['fichier']['name'], '<br />';
echo '<hr />';
echo '<br /><br />';
} else {
// Sinon on affiche une erreur pour le champ vide
echo '<b>Le champ du formulaire est vide !</b><br /><br />';
}
}
?> <form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
<b>Envoyer le fichier :</b><br /><br />
<input type="hidden" name="posted" value="1" />
<input name="fichier" type="file" />
<input type="submit" value="Uploader" />
</form>
</body>
</html>
Le formulaire d'upload est couplé avec le code qui modifie le XML. Avec ce code, je reçois ce message:
Parse error: syntax error, unexpected T_VARIABLE in /homez.41/publibus/www/admin_upload/upload_bus.php on line 27
J'ai modif un peux, avant il éditait bien mon XML, mais écrivais "$files" plustôt que le nom de l'image uploadé. L'entriprise ou je suis en stage ne savent pas si il on une BDD, donc pour votre méthode ça va être difficile.