Siehe die anschaulichen Beispiele auf der Seite PHP und Flash TIPP auf AXXG Blog Danke dafür.
Mein Beispiel habe ich von ihm "geklaut" und zu einem Email Formular umgeändert.
Im folgenden Beispiel wird eine Emailformular mit Flash erstellt. Die Daten werden an eine PHP-Seite gesandt. Die PHP Seite empfängt die Daten und versendet diese per PHP-mail Funktion. Bei Erfolg schreibt PHP eine Variable auf die Seite. Diese wird dann von Flash empfangen und in Flash in einem dynamischen Textfeld dargestellt.
PHP läuft auf dem Server. Man kann dieses Beispiel also nur auf einem Server ausführen.
Actionscript im ersten Bild der fla Datei
//import Anweisungen sind in der fla nicht nötig import flash.system.Capabilities; import flash.display.Sprite; import flash.net.URLRequest; import flash.net.URLLoader; import flash.net.URLVariables; import flash.net.navigateToURL; import flash.net.URLLoaderDataFormat; import flash.net.URLRequestMethod; var loader:URLLoader; var req:URLRequest; var urlVar:URLVariables = new URLVariables(); send_btn.addEventListener(MouseEvent.CLICK,senden); function senden(evt:MouseEvent):void { // Objekt URLLoader loader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.VARIABLES; // Eventhandler zum auffangen der Antwort von PHP /Funktion siehe unten loader.addEventListener(Event.COMPLETE, handleComplete); // Objekt URLRequest / Pfad zur Php Datei req = new URLRequest("mail.php"); // Methode GET oder POST / PHP muss mit gleicher Methode die Daten empfangen req.method = URLRequestMethod.POST; // Variablen festlegen und belegen // Name kann nach dem urlVar.******* frei festgelegt werden! //diese Variablen werden an PHP geschickt //die Werte stammen aus den Eingabetextfeldern // Die Funktion escape() transformiert den Inhalt URL-freundlich urlVar.vollname = escape(vollname.text); urlVar.adresse = escape(adresse.text); urlVar.ort = escape(ort.text); urlVar.mail = escape(email.text); urlVar.nachricht = escape(nachricht.text); // Variablen dem Request zuweisen req.data = urlVar; // Daten senden loader.load(req); } function handleComplete(evt:Event):void { var resultVars:URLVariables = new URLVariables(evt.target.data); //die Variable namen ok welche von PHP empfangen wurde, //wird dem dynamischen Textfeld zugewiesen //weitere Variablen auf gleiche Weise Z.B: resultVars.myVar this.anzeige.text = resultVars.ok; }
PHP
Die Daten werden mittels post empfangen und PHP Variablen zugewiesen.
Die PHP mail() Funktion hat 4 Parameter
Die mail() Funktion gibt bei Erfolg den Wert true zurück. Deswegen steht die mail() Funktion in einer if Struktur. Bei Erfolg schreibt PHP etwas auf die Seite. Wegen eines Bugs in Flash wird zuerst eine Variable mit Wertzuweisung erzeugt, die nicht empfangen wird und ansonsten auch keine Bedeutung hat. (test=hallo) Anschließend werden Variablen mit kaufmännischem & angehängt. Das Ganze wird mittels echo auf die Seite geschrieben und dann von Flash empfangen. In diesem Beispiel ist es nur die Variable "ok" aber man könnte auch weitere Variablen mit kaufmännischem & anhängen. z.B.:
echo "test=hallo&myVar1=ersteNachricht&myVar2=noch eine Nachricht";
In voriger Zeile kann man die Werte der beiden Variablen myVar1 und myVar2 in Flash auffangen.
Der PHP Code im folgenden wurde in Kommentarzeichen eingefügt, da ich sonst nicht anzeigen lassen könnte. Das muss man wie im folgendem Beispiel korrigieren:
<?php
PHPCode;
?>
Hier werden die Variablen aus einer Textdatei von Flash eingelesen. In diesem Falle ist eine Textdatei, es könnte aber auch eine PHP-Datei sein, in welcher der Inhalt mittels echo eingefügt wurde.
Actionscript im ersten Bild der fla
//import in fla nicht nötig import flash.display.Sprite; import flash.net.URLRequest; import flash.net.URLLoader; import flash.net.navigateToURL; import flash.events.Event; var loader:URLLoader; var req:URLRequest; loader = new URLLoader(); // Eventhandler zum auffangen der Antwort loader.addEventListener(Event.COMPLETE, handleComplete); // Pfad zur Php Datei; req = new URLRequest("highscore.txt"); loader.load(req); //Daten werden empfangen und den beiden dynamischen Textfeldern zugewiesen; function handleComplete(evt:Event):void { var resultVars:URLVariables = new URLVariables(evt.target.data); this.punkte_txt.text = resultVars.punkte; this.namen_txt.text = resultVars.namen; }
Inhalt der Textdatei highscore.txt
test=hallo&punkte=100&namen=Werner Müller
Hier werden Punkte und Namen mit Komma getrennt aufgeführt. Dadurch hat man die Möglichkeit mittels split() die Werte in Arrays abzulegen. Außerdem werden Punkte und Namen durch einen Tabulator \t aufgeführt. Siehe dazu auch meinen Tipp Textfelder.
Im folgenden Beispiel wurde das Textfeld händisch auf die Bühne gezogen. Bei dieser Methode hat man nicht die Möglichkeit die Abstände der Tabulatoren genau festzulegen. Wenn man die Abstände genau definieren will, muss das Textfeld per Actionscript erzeugt werden, wie im folgenden Beispiel. Man beachte, dass die Methode setTextFormat() nach der Zuweisung des Textes erfolgen muss.
var ft:TextFormat = new TextFormat(); var highscore_txt:TextField = new TextField(); highscore_txt.x=20; highscore_txt.y=100; ft.font="Verdana"; ft.size=14; highscore_txt.autoSize = TextFieldAutoSize.LEFT; addChild(highscore_txt); ft.tabStops = [200]; highscore_txt.text="alle meine\tentchen"; highscore_txt.setTextFormat(ft);
Actionscript im ersten Bild der fla
//import in fla nicht nötig import flash.display.Sprite; import flash.net.URLRequest; import flash.net.URLLoader; import flash.net.navigateToURL; import flash.events.Event; var loader:URLLoader; var req:URLRequest; loader = new URLLoader(); // Eventhandler zum auffangen der Antwort loader.addEventListener(Event.COMPLETE, handleComplete); // Pfad zur Php Datei; req = new URLRequest("highscore.php"); loader.load(req); //Daten werden empfangen und den beiden dynamischen Textfeldern zugewiesen; function handleComplete(evt:Event):void { var resultVars:URLVariables = new URLVariables(evt.target.data); //this.punkte_txt.text = resultVars.punkte; var punkteStr:String = ""; var punkteAr:Array = resultVars.punkte.split(","); var namenAr:Array = resultVars.namen.split(","); for (var i=0; i < punkteAr.length; i++) { punkteStr += String(punkteAr[i]) + "\t"; punkteStr += String(namenAr[i]) + "\n"; } highscore_txt.text = punkteStr; }