Impossible d'écrire dans un fichier XML...

ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010 - 21 avril 2010 à 14:50
ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010 - 30 mai 2010 à 14:42
Bonjour à tous,

voila plusieurs solutions que j'ai trouvé sur le net et que j'essaie mais qui restent jusque là sans résultat aucun.
la dernière en date ne fonctionnant pas a été trouvée sur ce site :
/* Sauvegarder un document XML dans un fichier
 * =============================================================================
 * Auteur: Dean <charloweb@hotmail.com>
 * =============================================================================
 */

// Exemple de document XML
// -----------------------------------------------------------------------------
example = new XML();

example.xmlDecl = '<?xml version="1.0" encoding="UTF-8"?>';

example_root = example.createElement("exemple");

example_author = example.createElement("auteur");
example_author.appendChild(example.createTextNode("Dean"));

example_description = example.createElement("description");
example_description.appendChild(example.createTextNode("Ceci est un exemple !"));

example_root.appendChild(example_author);
example_root.appendChild(example_description);

example.appendChild(example_root);
// -----------------------------------------------------------------------------

status = "Document non sauvegardé.";

// Actions effectuées lors du clic sur le bouton
// -----------------------------------------------------------------------------
function onClick(component){

  if(component._name == "SaveXML"){

    /* Créé une instance de LoadVars, la méthode send de l'objet XML
       étant trop limitée au niveau de la configuration */
    data = new LoadVars();
    // Ajoute notre document XML
    data["xml"] = example.toString();

    // Poste la variable avec sendAndLoad
    response = new LoadVars();
    response.onLoad function(failure) { if(!failure) status "Document sauvegardé avec succès !";trace(failure); return failure; }

    data.sendAndLoad("sauvegarder_xml.php", response, "POST");

  }

}
// -----------------------------------------------------------------------------

<?php

/* Sauvegarder un document XML dans un fichier
 * =============================================================================
 * Auteur: Dean <charloweb@hotmail.com>
 * =============================================================================
 */

// Écrit les données dans un fichier
$fp = fopen('exemple.xml', 'w');
fwrite($fp, stripslashes($_POST['xml']));
fclose($fp);

?>


Et le fichier exemple.xml n'est pas créé...
J'ai aussi essayé des choses encore plus simples à ma sauce, mais à tous les coups la fonction sendAndLoad() ne fonctionne pas.
Je précise que mon easyphp est lancé...

Si vous avez une solution, c'est sympa !
Merci en tout cas

72 réponses

Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
21 avril 2010 à 17:56
Bonjour,


Ton fichier va être créé
$fp = fopen('exemple.xml', 'w');
fwrite($fp, stripslashes($_POST['xml']));

Es-tu sur d'avoir les droits d'écriture sur le répertoire de ton serveur
Web ?

Vamos
0
ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010
21 avril 2010 à 18:36
Je travaille actuellement dans le dossier C:\Documents and Settings\ben\Mes documents\IN42
Mais peut être devrais-je mettre à la racine de mon serveur web local : C:\Program Files\EasyPHP 3.0\www ?
0
Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
21 avril 2010 à 18:56
Ton fichier Php est à la racine sous www ?
Dans ce cas tu peux créer sous www un répertoire xml par exemple
et modifier ton prog php
$fp = fopen('exemple.xml', 'w');

par

$fp = fopen('xml/exemple.xml', 'w');

Tu donnes alors les droits suffisant au répertoire xml pour pouvoir ecrire
au pire pour tests tu le mets en 777


Vamos
0
ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010
21 avril 2010 à 19:04
Je teste ça demain aprèm (car pas dispo avant) et puis je te dis ce qu'il en est.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010
22 avril 2010 à 13:26
Voila j'ai fais le test mais ça ne change strictement rien : toujours pas de fichier exemple.xml en vue...

Une autre solution peut être ?
Merci d'essayer en tout cas !
0
Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
22 avril 2010 à 14:36
Ok

Alors pour savoir si tu as un problème avec Flash ou Php ou ton serveur :

Commençons par faire uniquement du Php ensuite si le php fonctionne on utilisera la fonction trace() de flash AS

Test ceci
test_xml.php

<?
$file= fopen("resultat.xml", "w");
$_xml ="<?xml version="1.0" encoding="UTF-8" ?>\r\n";
$_xml .="<site>\r\n";
$_xml .="</site>";
fwrite($file, $_xml);
fclose($file);
?>

Cela devrait créer un fichier resultat.xml tant que tu n'as pas le fichier de créer inutile de voir le côté flash.

Vamos
0
ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010
22 avril 2010 à 14:40
Pas de souci de ce coté là, le fichier resultat.xml est bien créé.
0
Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
22 avril 2010 à 15:27
C'est déjà ça.

Donc il y a un problème du côté de flash.

Tu peux faire un trace(xml); pour voir ce que la variable contient.

// Ajoute notre document XML
data["xml"] = example.toString();
trace(xml);
......

et tu devrais avoir dans la fenêtre de sortie de flash la valeur de la
variable xml.

Vamos
0
Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
22 avril 2010 à 16:44
Une autre solution qui serait plus simple serait de faire générer le Xml par Php.
Côté Flash tu aurais un bouton qui appel le prog php qui génère le fichier et le copie sur le serveur. Le php renvoie ensuite à flash si Ok ou Ko

Maintenant je ne sais pas ce que tu souhaites faire comme application.
Uniquement générer et sauvegarder un fichier xml
Ou
générer et sauvegarder un fichier Xml avec des informations saisie dans Flash

?


Vamos
0
ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010
22 avril 2010 à 17:32
donc le trace m'affiche :
[type Function]

Pour te résumer un peu le pourquoi du comment, et bien en fait c'est effectivement des données qui seront saisies via un formulaire et je devrais ensuite MODIFIER un fichier xml existant contenant les données de l'appli. Là je voulais deja voir comment en créer un, car la copie c'est semblable...
0
Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
22 avril 2010 à 19:11
Bon la trace prouve que le fichier xml est pas pris en compte.
Petite question , cela sert à quoi le toString()
et le if(component._name == "SaveXML") ?
Je n'ai pas l'habitude de traiter du xml dans flash, j'imagine que c'est lié à cela.


Voici un test à faire :
Ne te soucis pas des retours de php (this.ok_retour) on verra éventuellement cela plus tard. recopie tel quel l'action script.
L'important est d'avoir les infos dans le trace(xml).

function onClick(component)
{
if(component._name == "SaveXML"){
var data = new LoadVars();
var response = new LoadVars();
data.xml = example.toString();
trace(xml);

response.onLoad = function(success)
{
if (success)
{
if (this.ok_retour == "0") // la creation a echoue
{
message = "Creation KO";
}
else if (this.ok_retour == "1") // creation ok
{
message = "Creation Ok";
}
}
else
{
message = "Problème Technique avec le fichier php";
}
}
data.sendAndLoad("sauvegarder_xml.php", response, "POST");

}
}


Vamos
0
Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
22 avril 2010 à 19:13
oups petite précision qui a son importance c'est de l'action script 2
0
ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010
22 avril 2010 à 19:18
Le trace me retourne la même chose ici.

Je ne sais pas à quoi sert le toString car c'est un code que j'ai repris de ce site.
Par contre à mon avis le if(component...) c'est simplement pour gérer le click sur le bouton "Sauvegarder"

Par contre à quoi sert ta variable message ?
Si j'essaie de faire un trace dessus, ça affiche undefined...
0
Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
22 avril 2010 à 19:51
Et si tu fais un test en enlevant le toString();
juste data.xml = example;

Le message servira ensuite (eventuellement) pour le Php
qui retournera une valeur si OK ou KO

Mais là le problème c'est que l'on recupere pas le xml

Je vais tester aussi sur mon hebergement

Vamos
0
ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010
22 avril 2010 à 19:55
Toujours pareil en enlevant le toString

Par contre moi c'est bel et bien en local sur mon PC hein ! Bon j'ai esayphp de lancé biensur, mais c'est pas une application prévue pour être en ligne, c'est un projet de cours.
0
Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
22 avril 2010 à 20:13
de re

Je viens de faire un test avec ceci et aucun problème

example = new XML();

example.xmlDecl = '<?xml version="1.0" encoding="UTF-8"?>';

example_author = example.createElement("auteur");
example_author.appendChild(example.createTextNode("Dean"));

example_description = example.createElement("description");
example_description.appendChild(example.createTextNode("Ceci est un exemple !"));

example.appendChild(example_author);
example.appendChild(example_description);


trace(example);



Vamos
0
ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010
22 avril 2010 à 20:18
Effectivement, chez moi aussi.

Donc ce serait le code que j'ai repris sur ce site qui n'est pas correct ??
0
Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
22 avril 2010 à 20:37
Je ne pourrais pas le certifier car je génère surtout le xml avec php

Mais d'après la doc AS2 / XML voici le principe

// Création d'un document XML
var doc:XML = new XML();

// Création de trois nœuds XML à l'aide de createElement()
var element1:XMLNode = doc.createElement("element1");
var element2:XMLNode = doc.createElement("element2");
var element3:XMLNode = doc.createElement("element3");

// Placement des nouveaux nœuds dans l'arborescence XML
doc.appendChild(element1); // On voit ici qu'il fait reference à doc
element1.appendChild(element2); // Ici par contre il met element 2 dans element 1
element1.appendChild(element3); // et ici element 3 dans element 1

trace(doc);
// Renvoie : <element1><element2 /><element3 /></element1>


C'est un peu plus clair :)

Tu peux telecharger la doc ici
Doc AS2

Sinon tu l'as dans Flash via Aide


Vamos
0
ben54120 Messages postés 66 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 août 2010
22 avril 2010 à 20:45
OK, mais par contre là ça crée un élément XML dans Flash, mais maintenant il faudrait que ça le crée dans un fichier
0
Vamosplaya Messages postés 127 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 10 décembre 2012
22 avril 2010 à 21:04
Mainteant avec cela ca devrait fonctionner


example = new XML();

example.xmlDecl = '<?xml version="1.0" encoding="UTF-8"?>';

example_author = example.createElement("auteur");
example_author.appendChild(example.createTextNode("Dean"));

example_description = example.createElement("description");
example_description.appendChild(example.createTextNode("Ceci est un exemple !"));

example.appendChild(example_author);
example.appendChild(example_description);

var data_test = new LoadVars();
var response_test = new LoadVars();
data_test.xml_fic = example;
trace(data_test.xml_fic);

response_test.onLoad = function(success)
{
if (success)
{
if (this.ok_retour == "0") // la creation a echoue
{
message = "Creation KO";
}
else if (this.ok_retour == "1") // creation ok
{
message = "Creation Ok";
}
}
else
{
message = "Problème Technique avec le fichier php";
}
}
data_test.sendAndLoad("sauvegarder_xml.php", response_test, "POST");



Dans ton fichier php le $_POST['xml'] par $_POST['xml_fic']


Vamos
0
Rejoignez-nous