从Flash AS3向PHP发送和接收数据

时间:2011-07-29 17:08:10

标签: php actionscript-3

我知道这是经常被问到的,但是我已经在互联网上查找我正在使用我用来发送和接收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;
}

[domain] /test.php中的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";    
?>

感谢您的回答。

3 个答案:

答案 0 :(得分:7)

您的AS代码似乎是正确的。所以问题可能在于PHP。请先用这个PHP文件测试:

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

这应该让你的电影追踪"true"。 然后你应该调试你的PHP。 print_r($_POST);当然会破坏你的输出。可能你忘了删除这个调试语句: - )

@Jesse和@​​Ascension Systems,查看有关URLVariables的文档:http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/URLVariables.html

答案 1 :(得分: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;
}

更新了已完成的功能......

答案 2 :(得分:2)

首先,改变这行代码:

trace(loader2.data.done);

到此:

trace(loader2.data);

您正在从php输出原始文本,因此您在Flash中的数据对象将只是原始文本。它不是附加.done的对象。如果你想拥有一个数据结构,那么你需要在PHP中创建一些XML或其他东西,打印出来然后将loader2.data转换为XML,如下所示:

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

但是,如果您的XML格式不正确,您将在Flash中创建一个未被捕获的错误并使您的应用程序崩溃,因此请确保使用try / catch语句。