2011-07-29 19 views
10

Sé que esto se suele preguntar, pero he buscado en todo Internet para encontrar el error que estoy cometiendo con el código que he utilizado para enviar y recibir datos de AS3 a PHP y viceversa. ¿Puedes encontrar el error? Aquí está mi código:Enviar y recibir datos de Flash AS3 a 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 dentro de /test.php [dominio]:

<?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";  
?> 

Gracias por sus respuestas.

+2

Por favor, proporcione la información al menos qué es exactamente lo que está mal. –

+0

Intenta ejecutar tu PHP directamente en el navegador, cambiando las variables POST para GET para que puedas probarlo fácilmente. Sospecho que encontrarás un error allí. – shanethehat

+0

cuál es el resultado de este resptxt.text = event.target.data.done; –

Respuesta

7

Su código AS parece ser correcto. Entonces el problema podría estar en PHP. Por favor, prueba primero con este archivo PHP:

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

Esto debería permitir que su rastro película "true". Luego debe depurar su PHP. print_r($_POST); destruye su salida, por supuesto. Puede ser que usted se olvidó de quitar esta declaración depuración :-)

@Jesse y @Ascension Systems, comprobar los documentos de URLVariables: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/URLVariables.html

+0

+1 para detectar 'loader.dataFormat = URLLoaderDataFormat.VARIABLES;' – shanethehat

+0

Tenías razón sobre 'print_r ($ _ POST);', ese fue el error !!! Gracias a todos por sus respuestas, los tendré en cuenta. – j1c1m1b1

6

Trate

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

ha actualizado la función completado ...

+0

+1 eso es exactamente lo que creo que es el problema (o al menos uno de ellos), el hecho de que esté accediendo .ha hecho como si fuera propiedad del objeto .data, pero de hecho no lo es. –

2

En primer lugar, cambie esta línea de código:

trace(loader2.data.done); 

a esto:

trace(loader2.data); 

Está produciendo texto sin formato de php, entonces tu objeto de datos en flash solo va a ser texto sin formato. No es un objeto con .done unido a él. Si usted quiere tener una estructura de datos, entonces usted necesita para crear alguna XML o algo dentro de PHP, la impresión de que fuera y luego echó loader2.data como XML, así:

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

Sin embargo, si el código XML no se forma correctamente, creará un error no capturado en flash y bloqueará su aplicación, por lo tanto, asegúrese de usar declaraciones try/catch.

Cuestiones relacionadas