2011-07-29 87 views
10

我知道這是一個經常被問到的問題,但我已經查看了整個互聯網,發現我用我用來從AS3發送和接收數據的代碼所犯的錯誤, PHP和反之亦然。你能找到這個錯誤嗎?這裏是我的代碼:從Flash AS3發送和接收數據到PHP

AS3:

import flash.events.MouseEvent; 
import flash.net.URLLoader; 
import flash.net.URLRequest; 
import flash.net.URLVariables; 
import flash.net.URLLoaderDataFormat; 
import flash.net.URLRequestMethod; 
import flash.events.Event; 

submitbtn.addEventListener(MouseEvent.CLICK, sendData) 

function sendData(event:MouseEvent):void 
{ 
    var loader : URLLoader = new URLLoader; 
    var urlreq:URLRequest = new URLRequest("http://[mydomain]/test.php"); 
    var urlvars: URLVariables = new URLVariables; 
    loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
    urlreq.method = URLRequestMethod.POST; 
    urlvars.uname = nametxt.text; 
    urlvars.apellido = aptxt.text; 
    urlvars.email = emtxt.text; 
    urlvars.cedula = cctxt.text; 
    urlvars.score = scoretxt.text; 
    urlreq.data = urlvars; 
    loader.addEventListener(Event.COMPLETE, completed); 
    loader.load(urlreq); 
} 

function completed(event:Event): void 
{ 
    var loader2: URLLoader = URLLoader(event.target); 
    trace(loader2.data.done); 
    resptxt.text = event.target.data.done; 
} 

PHP [域] /test.php內:

<?php 
    $username = $_POST["uname"]; 
    $apellido = $_POST["apellido"]; 
    $cedula = $_POST["cedula"]; 
    $email = $_POST["email"]; 
    $score = $_POST["score"]; 
    print_r($_POST); 
    if (!($link=mysql_connect(databasemanager,username,password))) 
     { 
      echo "Error conectando a la base de datos."; 
      exit(); 
     } 
     if (!mysql_select_db(database,$link)) 
     { 
      echo "Error seleccionando la base de datos."; 
      exit(); 
     } 
     try 
     { 
      mysql_query("insert into scores(name,lastName,email,document,score) values('$username','$apellido','$email','$cedula','$score')",$link);     
      print "done=true";   
     } 
     catch(Exception $e) 
     { 
      print "done=$e->getMessage()";   
     } 
     echo "done=true";  
?> 

謝謝您的回答。

+2

請,至少提供的信息究竟是怎麼了。 –

+0

嘗試在瀏覽器中直接運行PHP,切換GET變量以便您可以輕鬆進行測試。我懷疑你會在那裏發現一個錯誤。 – shanethehat

+0

這是什麼結果resptxt.text = event.target.data.done; –

回答

7

您的AS代碼似乎是正確的。所以這個問題可能在PHP中。請這個PHP文件先測試:

<?php 
     echo "test=1&done=true";  
?> 

這應該然後讓你的電影痕跡"true"。 然後你應該調試你的PHP。 print_r($_POST);當然會破壞你的輸出。可能是你沒有忘記刪除這個調試聲明:-)

@Jesse和@​​Ascension系統,查看文檔的使用URLVariables:http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/URLVariables.html

+0

+1,用於發現'loader.dataFormat = URLLoaderDataFormat.VARIABLES;' – shanethehat

+0

您對'print_r($ _ POST)'是正確的,',那是錯誤!感謝大家的答案,我會牢記它們。 – j1c1m1b1

6

嘗試

submitbtn.addEventListener(MouseEvent.CLICK, sendData); 

function sendData(event:MouseEvent):void 
    var urlreq:URLRequest = new URLRequest ("http://[mydomain]/test.php"); 
    urlreq.method = URLRequestMethod.POST; 

    var urlvars:URLVariables = new URLVariables(); 
    urlvars.uname = nametxt.text; 
    urlvars.apellido = aptxt.text; 
    urlvars.email = emtxt.text; 
    urlvars.cedula = cctxt.text; 
    urlvars.score = scoretxt.text; 
    urlreq.data = urlvars;   

    var loader:URLLoader = new URLLoader (urlreq); 
    loader.addEventListener(Event.COMPLETE, completed); 
    loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
    loader.load(urlreq); 
} 

public function completed (event:Event):void{ 
    var variables:URLVariables = new URLVariables(event.target.data); 
    resptxt.text = variables.done; 
} 

更新完成的功能...

+0

+1這正是我認爲問題是(或至少其中之一)的事實,他正在訪問.done,就像它在.data對象上的屬性一樣,但事實上並非如此。 – 2011-07-29 17:31:12

2

首先,這行代碼更改:

trace(loader2.data.done); 

這樣:

trace(loader2.data); 

您正在輸出原始文本從PHP,所以你的Flash中的數據對象就是純文本。它不是附帶.done的對象。如果你想有一個數據結構,那麼你需要創建一些XML或PHP內的東西,打印了這一點,然後抹上loader2.data如XML,像這樣:

var returnedData:XML = new XML(loader2.data); 

但是,如果沒有形成你的XML正確地說,你會在Flash中創建一個未被捕獲的錯誤,並使應用程序崩潰,所以確保使用try/catch語句。