2011-07-29 2 views
10

Tôi biết điều này thường được yêu cầu, nhưng tôi đã xem xét tất cả trên internet để tìm lỗi mà tôi đang thực hiện với mã tôi đã sử dụng để gửi và nhận dữ liệu từ AS3 đến PHP và viceversa. Bạn có thể tìm thấy lỗi sai không? Đây là mã của tôi:Gửi và nhận dữ liệu từ Flash AS3 tới 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 bên trong [miền] /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";  
?> 

Cám ơn câu trả lời của bạn.

+2

Xin vui lòng, cung cấp ít nhất thông tin chính xác những gì đang xảy ra sai. –

+0

Cố gắng chạy PHP của bạn trực tiếp trong trình duyệt, chuyển đổi các biến POST cho GET để bạn có thể kiểm tra nó dễ dàng. Tôi nghi ngờ bạn sẽ tìm thấy một lỗi ở đó. – shanethehat

+0

kết quả của resptxt.text = event.target.data.done này là gì; –

Trả lời

7

Mã AS của bạn có vẻ đúng. Vì vậy, vấn đề có thể là trong PHP. Vui lòng kiểm tra trước bằng tệp PHP này:

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

Sau đó, hãy để đoạn phim của bạn theo dõi "true". Sau đó, bạn nên gỡ lỗi PHP của mình. print_r($_POST); phá hủy đầu ra của bạn tất nhiên. Có thể bạn đã quên để loại bỏ tuyên bố gỡ lỗi này :-)

@Jesse và @Ascension Systems, kiểm tra các tài liệu cho URLVariables: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/URLVariables.html

+0

+1 cho phát hiện 'loader.dataFormat = URLLoaderDataFormat.VARIABLES;' – shanethehat

+0

Bạn đã đúng về 'print_r ($ _ POST);', đó là sai lầm !!! Cảm ơn tất cả mọi người cho câu trả lời của họ, tôi sẽ giữ cho họ trong tâm trí. – j1c1m1b1

6

Hãy thử

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; 
} 

Updated chức năng hoàn thành ...

+0

+1 đó là chính xác những gì tôi nghĩ rằng vấn đề là (hoặc ít nhất một trong số họ), thực tế là anh ta truy cập .done như nó là tài sản trên đối tượng .data, nhưng trên thực tế thì không. –

2

Trước hết, thay đổi dòng mã này:

trace(loader2.data.done); 

này:

trace(loader2.data); 

Bạn đang xuất văn bản thô từ php, vì vậy đối tượng dữ liệu của bạn trong flash chỉ là văn bản thô. Nó không phải là một đối tượng với .done gắn liền với nó. Nếu bạn muốn có một cấu trúc dữ liệu thì bạn cần phải tạo ra một số XML hoặc một cái gì đó bên trong PHP, in đó ra và sau đó đúc loader2.data như XML, như vậy:

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

Tuy nhiên, nếu XML của bạn không được hình thành một cách chính xác, bạn sẽ tạo ra một lỗi vô tình trong flash và làm hỏng ứng dụng của bạn, vì vậy hãy đảm bảo bạn sử dụng các câu lệnh try/catch.