web-dev-qa-db-ja.com

FlashAS3からPHP)へのデータの送受信

これは頻繁に尋ねられることは知っていますが、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;
}

[ドメイン] /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";    
?>

あなたの答えをありがとう。

11
Julio Mendoza

ASコードは正しいようです。したがって、問題はPHPにある可能性があります。最初にこのPHPファイル:

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

これにより、ムービーで_"true"_をトレースできるようになります。次に、PHPをデバッグする必要があります。もちろん、print_r($_POST);は出力を破棄します。このデバッグステートメントを削除するのを忘れたのかもしれません:-)

@Jesseおよび@ AscensionSystems、URLVariablesのドキュメントを確認してください: http://livedocs.Adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/URLVariables.html

7
Kaken Bok

試してみてください

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

完成した関数を更新しました...そして欠落しているブラケットを修正しました。

7
Jesse

まず、次のコード行を変更します。

trace(loader2.data.done);

これに:

trace(loader2.data);

PHPから生のテキストを出力しているので、フラッシュ内のデータオブジェクトは生のテキストになります。 .doneが付加されたオブジェクトではありません。データ構造が必要な場合は、PHP内にXMLなどを作成し、それを出力してから、次のようにloader2.dataをXMLとしてキャストする必要があります。

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

ただし、XMLが正しく形成されていないと、フラッシュでキャッチされないエラーが発生し、アプリがクラッシュするため、必ずtry/catchステートメントを使用してください。

2
user562566