2010-09-04 7 views
0

Créer un projet flash où les utilisateurs peuvent visiter le site et éteindre/allumer des objets dans une maison (lumières, télévision, ordinateur, etc.) L'utilisateur suivant qui visitera la maison le site Web, va voir ce que les lumières ou les appareils ménagers ont été laissés sur. Les variables Flash sont transmises à PHP et ces variables sont enregistrées dans un fichier XML. (Pour tester ce qui est enregistré dans le fichier XML, cliquez sur --vars.xml à chaque clic.) Dans le fichier vars.xml, je vois que les objets de la maison qui ont été activés en dernier sont enregistrés dans le fichier .vars.xml. Fichier XML - MAIS dans le fichier SWF, seul l'un des objets répertoriés dans le fichier XML est activé. Seul le dernier objet qui a été cliqué sur montrerait ON - pas tous les objets dans le fichier XML)Passer des variables de Flash à PHP

package { 
    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 
    import flash.events.Event; 
    import flash.text.*; 
    import flash.net.*; 

    public class House extends MovieClip { 

    var request:URLRequest = new URLRequest("vars.xml") 
    var loader:URLLoader = new URLLoader(); 


    // Constructor-------------------------------------------------------------------- 
    public function House() 


    { 

     loader.addEventListener(Event.COMPLETE, parseXML); 
     loader.load(request); 

} 

// function sendPhp ------------------------------------------------------------------ 
    function sendPhp():void 
    { 

     // send vars to php 
     var request:URLRequest = new URLRequest("write_xml.php"); // the php file to send data to 
     var variables:URLVariables = new URLVariables(); // create an array of POST vars 


     for (var i:int=0; i<onList.length; i++) { 
      variables["v"+i] = onList[i]; 
     } 

     //variables['powerUsage'] = totalTxt.text; 

     request.data = variables; // send the vars to the data property of the requested url (our php file) 
     request.method = URLRequestMethod.POST; // use POST as the send method 
     try 
     { 
      var sender:URLLoader = new URLLoader(); 
      sender.load(request); // load the php file and send it the variable data 
      navigateToURL(new URLRequest("vars.xml"), '_blank'); //show me the xml 
     } 
     catch (e:Error) 
     { 
      trace(e); // trace error if there is a problem 
     } 
    } 


// function parseXML ------------------------------------------------------------------ 

function parseXML(evt:Event) 
{ 
    var xdata:XML = new XML(loader.data); // using E4x 

    //xdata.child(0); 

    for (var j:int=0; j<xdata.length(); j++) { 
     onList[j] = xdata.child(j); 

     for (var k:int=0; k<HouseObjects.length;k++) { 
      //root[onList[j]].gotoAndStop(3); 
      if (onList[j] == HouseObjects[k].name) { 
       HouseObjects[k].gotoAndStop(3); 
       //trace("tracing house objects"+ HouseObjects[k]); 
       trace("onList[j]: " + onList[j]); 
       trace("Array onList: " + onList); 

      } 

     } 

    } 

} 



} //end of class 

} // end of package 
+0

Cela peut ne pas être très bon parce que beaucoup de gens peuvent changer les choses à la fois –

+0

Assurez-vous d'échapper/valider vos variables '$ _POST'. En ce moment tout le monde peut mettre quelque chose dans votre fichier '.xml' –

Répondre

1

Vous n'avez pas besoin en fait de mettre tout ce code ici, et il est vrai que vous devriez. rendre votre application plus sûre, surtout après avoir montré toutes ces informations! Si votre fichier XML n'est pas le problème, vérifiez la partie Actionscript, en particulier la fonction parseXML().

Etes-vous capable de tracer les noms des composants qui sont allumés? Si oui, concentrez-vous sur ce qui se passe dans votre boucle. Si votre fichier XML est correct, le problème n'est pas de transmettre des données de PHP à Flash.

J'aime la cabane dans les arbres! ;)

Questions connexes