Invio e ricezione di dati da Flash AS3 a PHP

So che questo è spesso richiesto, ma ho cercato su Internet per trovare l'errore che sto facendo con il codice che ho usato per submit e ricevere dati da AS3 a PHP e viceversa. Riesci a trovare l'errore? Ecco il mio codice:

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 all'interno di [dominio] /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"; ?> 

Grazie per le tue risposte.

Il tuo codice AS sembra essere giusto. Quindi il problema potrebbe essere in PHP. Per favore prova prima con questo file PHP:

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

Questo dovrebbe quindi lasciare il tuo film traccia "true" . Dovresti quindi eseguire il debug del tuo PHP. print_r($_POST); distrugge ovviamente la tua produzione. Potresti aver dimenticato di rimuovere questa dichiarazione di debug 🙂

@Jesse e @Ascension Systems, controlla i documenti per URLVariables: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/URLVariables.html

Provare

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

Aggiornata la function completata …

Prima di tutto, modifica questa row di codice:

 trace(loader2.data.done); 

a questa:

 trace(loader2.data); 

Stai emettendo text non elaborato da php, quindi il tuo object dati in flash sarà solo text non elaborato. Non è un object con .done collegato ad esso. Se si desidera avere una struttura dati, è necessario creare qualche XML o qualcosa all'interno di PHP, printingrlo e quindi lanciare loader2.data come XML, in questo modo:

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

Tuttavia, se il tuo XML non è formato correttamente, creerai un errore non catturato in flash e bloccherai la tua app, quindi assicurati di utilizzare le istruzioni try / catch.