2011-07-29 4 views
10

これはよく尋ねられますが、私はインターネット上で、AS3からのデータの送受信に使用したコードを使って間違いを見つけました。 PHPとviceversa。間違いを見つけることができますか?ここに私のコードは次のとおりです。Flash AS3からPHPへのデータの送受信

AS3:[ドメイン] /test.phpの内部

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:あなたの答えのための

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

感謝。これに

trace(loader2.data.done); 

+2

してください、間違って起こっている正確に何少なくとも情報を提供します。あなたは、

@Jesseと@Ascensionシステム:-)このデバッグステートメントを削除URLVariablesオブジェクトのためのドキュメントをチェックすることを忘れなかったかもしれません。 –

+0

ブラウザでPHPを直接実行し、POST変数をGET用に切り替えて、簡単にテストできるようにしてください。私はそこに誤りがあると思う。 – shanethehat

+0

このresptxt.text = event.target.data.doneの結果は何ですか; –

答えて

7

あなたのASコードは正しいと思われます。だから問題はPHPにあるかもしれません。このPHPファイルを使用して最初のテストをしてください:

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

そして、これはムービーのトレース"true"をさせてください。 これでPHPをデバッグする必要があります。 print_r($_POST);はもちろんあなたの出力を破壊します。 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

関数の完了...すべての

+0

+1それは私がその問題が(または少なくともそれらのうちの1つ)、彼が.dataオブジェクトのプロパティのようにアクセスしているという事実だと思っていますが、実際はそうではありません。 –

2

まず、このコード行を変更する更新日

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

を試してみてください

trace(loader2.data); 

生のテキストを出力していますphpから、フラッシュ内のデータオブジェクトは生のテキストになります。 .doneが付いたオブジェクトではありません。あなたは、データ構造を持っているしたい場合は、そうのように、アウトして、XMLとしてloader2.dataキャストいくつかのXMLやPHP内部の何か、プリントを作成する必要があります。

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

しかし、あなたのXMLが形成されていない場合正しく、あなたはフラッシュで不明なエラーを作成し、あなたのアプリをクラッシュするので、try/catchステートメントを使用することを確認してください。

関連する問題