IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

[FLASH MX] Flash et XML


Sujet :

Flash

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 32
    Par défaut [FLASH MX] Flash et XML
    Bonjour,

    J'arrive pas a ecrire dans mon fichier XML a partir de flash...

    Je navigue dans mon XML pour me retrouver au bon noeud (celui qui doit contenir le nouvel element). Ce noeud est contenu dans la variable countryNode.

    voila ce que je fais ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fiche = countryNode.createElement("fiche");
    		fiche.attributes.login = _root.name + _root.surname;
    		fiche.attributes.name = _root.name;
    		fiche.attributes.surname = _root.surname;
    		fiche.attributes.pwd = _root.pwd;
    		fiche.attributes.mail = _root.email;
    		fiche.attributes.contact = _root.contactList.getSelectedItem().label;
    		countryNode.appendChild(fiche);
    		myXML.send("test.xml");
    Ca marche pas et je sais pas pourquoi....Il y a pleins de tutoriels pour lire le XML mais tres peu pour ecrire dedans...

    Merci

  2. #2
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    Ton problème c'est de l'enregistrer ? Mais tu l'enregistres avec quoi ?? Tu sais que flash le fais pas tout seul ? Faut utiliser du php ou autre pour enregistrer une chaine de caractère dans un fichier

    Sois plus précis merci

    EKA+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 32
    Par défaut
    Ah merde je pensais qu'on pouvait ecrire dans l'XML avec Flash...En fait on peut que changer la version locale (myXML) ?
    Comment on fait alors pour mettre a jour le fichier XML avec cette nouvelle version local ? Quelqu'un aurait un lien vers un exemple ?
    Merci

  4. #4
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Comme je te l'ai dit au dessus, tout dépend de ce que tu veux faire (une application local, online ? )
    Exemple en online avec du php :
    > www/php/save.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    	$root = "../xml/" ; // répertoire où se trouve ton xml sur le serveur
    	$file = "savefile.xml" ; // nom du fichier dans lequel tu veux sauver ton xml
     
    	// recevoir variable provenant de FLASH en "POST"
    	$contenu = $_POST['contenu'] ;
     
     
    	$fichier = $root . $file ;
     
    	$ecrire = fopen ( $fichier , "w" ) ;      
     
    	fwrite ( $ecrire , $contenu ) ;    
     
    	fclose ($ecrire) or die  ("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><error>Erreur... problème serveur</error>") ;
     
    	echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><result>Fichier bien enregistré</result>" ;
    Et dans flash un code du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    var envoi:LoadVars = new LoadVars () ;
    var result:XML = new XML () ;
    result.onLoad = function (success) {
    	if (success) {
     
    		switch ( this.firstChild.nodeName) {
     
    			case "result" : 
    				trace(this.firstChild.firstChild.nodeValue) ;
    				// ici relancer le chargement du xml qui vient d'être mi à jour
    				break ;
     
    			case "error" :
    					trace (this.firstChild.firstChild.nodeValue) ;
    					break ;
    			default :
    				trace("erreur serveur") ;
     
    			}
     
    		} else {
     
    			trace("enregistrement impossible") ;
     
    		}
     
    }
    envoi.contenu = myXML.toString() ;
    envoi.sendAndLoad ( "php/save.php" , result ) ;
    Pour le reste.. faut que tu fasses des essais etc... mais bon comme tu en dis pas + ... je vais pas en dire + non plus

    EKA+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 32
    Par défaut
    C'est parfais, exactement ce qu'il me faut merci bcp...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 32
    Par défaut
    En fait ca marche pas....
    Ca fait rien du tout.

    Pour etre clair, je veux juste envoyer myXML de mon fichier flash dans un fichier sur le serveur test.xml. J'ai pas besoin de recharger le xml ensuite... J'ai tout mis dans le meme dossier pour faciliter les choses.

    voila mon code en flash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var envoi:LoadVars = new LoadVars () ;
    envoi.contenu = myXML.toString() ;
    myXML.send("save.php",_blank);
    et voila le fichier save.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <html>
    <head>
    <title>Transfert</title>
     
    <?PHP
     
    $root = "" ; // répertoire où se trouve ton xml sur le serveur
    $file = "test.xml" ; // nom du fichier dans lequel tu veux sauver ton xml
     
    // recevoir variable provenant de FLASH en "POST"
    $contenu = $_POST['contenu'] ;
     
     
    $fichier = $file ;
     
    $ecrire = fopen ( $fichier , "w" ) ;     
     
    fwrite ( $ecrire , $contenu ) ;   
     
    fclose ($ecrire) or die  ("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><error>Erreur... problème serveur</error>") ;
     
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><result>Fichier bien enregistré</result>" ;
     
    ?>
    Voila, je connais pas bien le php...en tout cas quand ma fonction en flash est lance, il ne se passe rien, la page php n'est pas charge (en tout cas elle est pas affiche dans le browser) et mon fichier test.xml ne change pas...

    Donc si tu vois une erreur grossiere quelquepart merci bcp...

  7. #7
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    .... Tu veux sortir de ton flash ou pas? l'intérêt en général de faire un sendAndLoad et de ne pas ouvrir une page blanche justement et d'avoir quelquechose de propre !
    Ensuite le but de renvoyer des infos vers flash pour qu'il soit au courant si tout c'est bien passé ou pas... donc on recharge pas le xml.. on renvoi un xml pour indiquer si tout est ok ou pas....

    Sinon avant de changer les choses et d'en faire à ta tête pourquoi tu essayes pas de faire fonctionner ce qu'on te file sur le forum ?
    N'oublie pas sinon quand tu fais une page HTML qu'elle doit finir par une balise de fin.. et que dans une page HTML si tu mets du xml mélangé.. il va rien se passer en affichage !
    Bref... avant de faire un changement dans tout cela... test simplement les choses...

    EKA+

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 32
    Par défaut
    Bonjour,

    J'ai essaye avec ton code, mais ca marchait pas, alors j'ai essaye de le simplifier un peut pour trouver le probleme, mais sans resultat...
    Je comprend pas pourquoi ca marche pas, j'ai essaye de sauver mon xml dans un autre xml, et il ne se passe rien, le nouveau xml est toujours vide...

    Ce qui est emmerdant c'est que je peux pas utiliser le debuger pour voir ce qui se passe puisque j'utilise du php...

    Enfin bon voila, je m'arrache les cheveux...Je vais essayer de trouver un exemple sur le net qui marche

    merci en tout cas pour ton temps...

  9. #9
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    bah moi cela marche mon code.. donc si cela marche pas pour toi.. Cherche avant tout pourquoi tu arrives pas à le faire marcher non ?
    EKA+

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 32
    Par défaut
    Apparement, chez moi il rentre pas dans la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    if (success) {
     
          switch ( this.firstChild.nodeName) {
     
             case "result" :
                trace(this.firstChild.firstChild.nodeValue) ;
                // ici relancer le chargement du xml qui vient d'être mi à jour
                break ;
     
             case "error" :
                   trace (this.firstChild.firstChild.nodeValue) ;
                   break ;
             default :
                trace("erreur serveur") ;
     
             }
     
          } else {
     
             trace("enregistrement impossible") ;
     
          }

    m'enfin je vais me repencher sur la question....
    merci en tout cas, je trifouille un peut le code parcequ'il y a pas mal de trucs dedans que je comprends pas...

  11. #11
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    Tu vois où une boucle dans ton code au dessus ?
    Sinon tu utilises des trace() ou une sortie dans un champ de texte pour voir ? qu'est ce qu'il se passe avant et aprés le if(success) ? Que te renvois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    trace (success) ;
    trace (this.status) ; 
    if (success) {
          trace (this.firstChild) ;
          // etc....
    EKA+

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 32
    Par défaut
    Ce que je comprends pas, c'est que tu fais un

    switch ( this.firstChild.nodeName)

    alors que this c'est "result" et c'est un xml vide donc

    this.firstChild.nodeName = undefined

    donc il va dans le default case...

    Et je comprends pas pourquoi tu send and load contenu et pas envoi.contenu, parcequ'il n'y a pas de variable contenu...Ou alors il y a quelquechose que je capte pas...

  13. #13
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Hello

    Mon code de départ est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    var envoi:LoadVars = new LoadVars () ;
    var result:XML = new XML () ;
    result.onLoad = function (success) {
       if (success) {
     
          switch ( this.firstChild.nodeName) {
     
             case "result" :
                trace(this.firstChild.firstChild.nodeValue) ;
                // ici relancer le chargement du xml qui vient d'être mi à jour
                break ;
     
             case "error" :
                   trace (this.firstChild.firstChild.nodeValue) ;
                   break ;
             default :
                trace("erreur serveur") ;
     
             }
     
          } else {
     
             trace("enregistrement impossible") ;
     
          }
     
    }
    envoi.contenu = myXML.toString() ;
    envoi.sendAndLoad ( "php/save.php" , result ) ;
    J'envoi vers mon script PHP en "POST" le xml à sauver via une chaine de caractère... j'ai pas besoin d'envoyer autre chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    envoi.contenu = myXML.toString() ;
    Du coup dans le php je récupère cette chaine de caractère et je l'enregistre sur le serveur ! ... de là je vais savoir si l'enregistrement c'est bien passé ou pas ? Et je veux l'afficher dans flash pour pas que l'utilisateur reste comme un imbécile sans savoir si c'est ok ou pas au niveau du xml ... c'est important de toujours indiqué qu'une requête ou autre c'est bien réalisée... ou alors tu as un drole de sens de l'ergonomie sur un site

    Donc je ne renvois pas le meme type de DOM XML selon ce qu'il se passe..

    - un xml de type <result> sert pour dire que tout est OK .. le xml est bien sauvé sur le serveur : Dans le nodeValue du noeud result je met un petit message selon mes besoins.. je peux envoyer par exemple la taille du fichier sur le serveur.. l'heure d'enregistrement etc.. à toi d'améliorer cela si tu en as besoin ...

    - un xml de type <error> indique une erreur.. là tu peux personnaliser tes erreurs (n'oublie pas que je te fais un exemple.. pas un truc complet .. tu me payes pas pour cela )

    - SINON .. si un imbécile essai d'envoyer vers mon flash à ce moment là une structure XML invalide sur le schéma qu'il me faut ... (cela peut arriver qu'un bidouilleur fasse un truc dans le genre ... ) et bien je laisse une porte de sortie pour mon debug en mettant un test sur un hypothétique XML reçu mais qui n'a pas le nom de noeud error ou result ... d'où le test sur le default !


    Je ne renvois pas result pour rien.. je renvois result vers flash si tout c'est bien passé au niveau de l'enregistrement.. je renvois un xml de type error si il y a un problème... et si j'envois un xml qui a aucun rapport.. et bien je le détecte aussi avec le default...

    Bref franchement rien de compliqué... vraiment

    EKA+

  14. #14
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    PS : si tu veux faire un debug simple en utilisant comme objet de retour un LoadVars et en renvoyant juste une valeur c'est possible aussi hein ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    var envoi:LoadVars = new LoadVars () ;
    var result:XML = new LoadVars () ;
    result.onLoad = function (success) {
          if (success) {
                if (this.result) {
                     trace ("result : " + this.result) ;
                } else {
                     if (this.error) {
                          trace ("error : " + this.error) ;
                     } else {
                          trace ("erreur serveur") ;
                     }
                }
          } else {
             trace("enregistrement impossible") ;
          }
    }
    envoi.contenu = myXML.toString() ;
    envoi.sendAndLoad ( "php/save.php" , result ) ;
    et dans le php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?PHP
     
    $root = "" ; // répertoire où se trouve ton xml sur le serveur
    $file = "test.xml" ; // nom du fichier dans lequel tu veux sauver ton xml
     
    // recevoir variable provenant de FLASH en "POST"
    $contenu = $_POST['contenu'] ;
     
     
    $fichier = $file ;
     
    $ecrire = fopen ( $fichier , "w" ) ;     
     
    fwrite ( $ecrire , $contenu ) ;   
     
    fclose ($ecrire) or die utf8_encode("error=erreur d'écriture serveur") ;
     
    echo "result="Fichier bien enregistré" ;
     
    ?>
    PS : par contre faut pas de balise <html et <body dans ton script PHP hein !! fait attention au fait

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 32
    Par défaut
    Bonjour,

    Je comprend bien que l'XML result sert a stocker les different resultats. Ce que je ne comprends pas, c'est que tu regardes result avant meme d'avoir envoye le XML au serveur...
    Chez moi, result est vide quand je test :

    switch ( this.firstChild.nodeName)

    donc il va toujours au default.

    Le problem aussi, c'est que quand je test la flash avec le php, je doit mettre le flash dans une fenetre html histoire de pouvoir le lancer avec le server easyPhp et du coup, je peux pas debugger avec les trace...

    Tu pourrais m'envoyer un exemple de .fla et .php qui marche pour que je vois s'il te plais ? Tu peux me l'envoyer a romdig@yahoo.fr

    Je fais peut etre le boulet complet , mais je suis pas habituer a coder cote serveur, donc j'arrive pas a debuger... (d'ou le chargement d'une page php au debut pour essayer de voir ce que ressoit le serveur...)

    merci

  16. #16
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    euh ... onLoad est une fonction qui est invoquée quand les données dans l'instance de la classe LoadVars ("result") reçoit les informations.. c'est pas par ce que je l'ai déclarée avant qu'elle est utilisée tout de suite hein.. c'est le but d'une fonction de ne pas être utilisée tout de suite ... là c'est ce qu'on appelle un événement.. le success te dit que tout c'est bien passé.. maintenant heureusement que je la déclare avant que tout se soit déroulé.. sinon forcément elle sera pas lu la fonction

    Sinon non il va pas toujours à default... crois moi que le code que je t'envoi fonctionne

    Sinon tu as testé en mettant en URL "http://localhost/....." ?
    Sinon pour tester tu peux toujours remplacer tes trace() par un champ de texte dynamique et en envoyant dedans la valeur de la chaine de caractère.... faut un peu sortir de mon exemple et le voir dans son ensemble

    Sinon.. mon code fonctionne hein je peux rien te dire de + et tout fichier que je peux t'envoyer contiendra exactement ce que tu as là en code

    N'oublie pas que le debuggage tu peux le faire à la main.. les données que tu reçois du serveur.. tes trace() .. tu peux les cibler dans un textField.

    EKA+

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 32
    Par défaut
    Bon bin je comprends pas pourquoi ca marche pas chez moi alors...
    J'ai fait un fichier flash vierge avec just un chargement de xml et j'utilise ton code pour sauver cet xml dans un autre, mais ca fait rien du tout...

    et ton code php il faut bien le mettre entre des balises php non ? (de toute maniere j'ai essaye les deux, mais bon on sait jamais...)

    enfin bon je commence a craquer sur ce foutu code, alors que c'est vraiment pas complique ce que je veux faire....c'est juste de melanger php flash qui pose probleme....

    enfin bon merci quand meme, je continuer a m'arracher les cheveux dessus.

  18. #18
    Membre chevronné Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Par défaut
    Montre exactement ce que tu fais... (si tu as des trucs au milieu qui ont aucun rapport cela m'intéresse pas de le voir.. isole ce que tu fais et envois sur le forun un fla et un php pour voir)

    PS : pense à tester ton PHP sans flash ! tu lances directement le script php sur le serveur en remplaçant la variable que tu récupères en POST par une variable qui contient une chaine de type XML !
    Attention on parle bien de script PHP hein .. pas de page HTML qui contient du PHP !

    EKA+

Discussions similaires

  1. [FLASH 8] Flash vers Flash
    Par Dark Anakin dans le forum Flash
    Réponses: 5
    Dernier message: 11/08/2006, 14h01
  2. [FLASH MX] Flash > Mysql > Flash
    Par Typhlosion dans le forum Flash
    Réponses: 9
    Dernier message: 20/04/2005, 22h40
  3. Réponses: 4
    Dernier message: 07/05/2004, 21h15
  4. [FLASH MX] Chargement de XML
    Par Dra_Gun dans le forum Flash
    Réponses: 13
    Dernier message: 13/02/2004, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo