2010-09-04 119 views
0

創建一個Flash項目,用戶可以訪問該網站並關閉/打開房屋中的物體(即燈光,電視,計算機等)。下一個將訪問該房屋的用戶該網站將會看到什麼燈或家用電器留下。 Flash變量被傳遞給PHP,並且這些變量被保存在一個XML文件中。 (要進行測試以查看保存到XML文件的內容,請單擊--vars.xml打開。)在vars.xml文件中,我看到上次打開的房屋對象 - 保存在XML文件 - 但在SWF文件中,只有XML中列出的一個對象被打開。只有被點擊的最後一個對象會顯示ON - 不是所有的XML文件中的對象)將變量從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

這可能不是很好,因爲很多人可能會立即切換 – 2010-09-04 02:52:15

+0

請確保您轉義/驗證您的$ _POST變量。此刻任何人都可以將任何東西放入你的'.xml'文件中 – 2010-09-04 16:11:35

回答

1

你其實並不需要在這裏把所有的代碼,並且,你應該是真的。讓您的應用程序更安全,特別是在顯示所有這些信息之後!如果您的XML不是問題,請檢查Actionscript部分,特別是parseXML()函數。

您能夠跟蹤開啓的組件名稱嗎?如果是的話,請專注於你的循環中發生的事情。如果你的xml很好,問題不在於將數據從PHP傳遞到Flash。

我喜歡樹屋! ;)