RSS Testeintrag: Datenaustausch PHP und Flash

verfasst 05.12.2006 von MediaCix | kurze URL: /t23 | 2 Kommentare

Datenaustausch PHP und Flash

Diesmal möchte ich auf die Möglichkeiten eingehen, um Daten zwischen PHP,MySQL und Flash auszutauschen.

Wozu überhaupt das ganze ?

Klar, es gibt Pro und Contra was den Einsatz von Flash betrifft,
jedoch sollen meine folgenen Zeilen nicht dazu dienen, dies zu diskutieren.
Flash bietet sehr viele Einsatzmöglichkeiten, um Daten bzw. Informationen interaktiv darzustellen.
Ob nun Gästebücher, Statistiken, Browsergames, Navigationen oder Präsentationen.

Im folgenden möchte ich als Beispiel von einen Gästebuch nutzen.
Wobei ich aber hier mal auf kompeltten PHP-Quelltext eines Gästebuches verzichten möchte,
dazu findet man hier im Forum genug.
Vielmehr möchte ich auf den Datenaustausch eingehen.

Wie kommen die PHP-Daten nun zum Flash ?

Die wohl einfachste Variante, die Werte an die Flash-Datei anzuhängen.

» HTML
mein_flash.swf?start=1


Nun bei kurzen und kleinen Werten ist das sicher möglich,
aber was wenn wir eine größerer Anzahl von Daten aus einer Datenbank im Flash haben möchten.
Dann sollten wir uns für einen anderen Weg entscheiden - Flash holt sich die Daten.

Variablen für Flash lesbar ?

Ein ganz wichtiger Punkt muss noch angesprochen werden.
Damit Flash auch die Variablen aus einer PHP-Datei erkennt, müssen diese in einer bestimmte Syntax geschrieben werden.
Hierzu benutzt Flash das &-Zeichen als - naja sagen wir einfach mal als Trenner (klingt einfacher).
Weiterhin kommt hinzu, dass die Werte, die zum Flash gelangen sollen mit echo ausgegegebn werden.

Beispiel:

» PHP
<?php
echo "&nr=$nr";
echo 
"&name=$name $ort";
echo 
"&email=$email";
echo 
"&url=$url";
echo 
"&email=$email";
echo 
"&url=$url";
echo 
"&text=$text";
echo 
"&datum=$datum";
echo 
"&";
?>


Die Flash-Variablen müssen also &flash_variable=$php_variable aufweisen.
Toll, aber da gibt es noch einen kleinen Hacken :-)
Das Zeichen & wird meist als belanglos betrachtet !
Nehmen wir an, wir wollen den Textinhalt an Flash übergeben.

Beispiel:

» PHP
<?php
echo "&text=$text";
?>


Wenn der Text nun Zeilenumbrüche enthält, kann es passieren, dass hier nicht der komplette Text im Flash ankommt.

Warum ?

Wie bereits oben beschrieben, benutzt Flash das Zeichen & als Trennzeichen zwischen den Variablen.
Da im letzten Beispiel kein &-Zeichen mehr folgt, kann dies zu problemen führen.
Schreibe dann bei der letzten Variable noch ein echo mit dem &-Zeichen.

Beispiel:

» PHP
<?php
echo "&text=$text";
echo 
"&";
?>


Dann erkennt das Flash besser das Ende, klingt ganz lustig, ist aber so.

Daten vom Flash aus laden

Hierzu gibt es im Flash den sogenannten AcrionScript (AS).
Um Variablen zu laden stehen hierzu zwei Befehle zur Verfügung (bis Flash MX):

» Flash ActionScript
loadVariables() - loadVariables ("url" , ziel [, variablen])
loadVariablesNum() - loadVariablesNum ("url" ,stufe [, variablen])


Betrachten wir uns zunächst diese Methoden (es gibt noch mehr, aber dazu später).
Beim laden von Daten können wir den 3 Parameter [,variablen] weg lassen.
Als URL sollte eine absolute oder relative URL stehen.
Ziel kann ein MovieClip sein.
Stufe ist eine Ganzzahl, die die Stufe im Flash-Player darstellt.
Auf Ziel und Stufe möchte ich aber hier erstmal nicht weiter eingehen.

Um nun meine PHP-Datei zu laden, kann folgende Zeile benutzt werden:

» Flash ActionScript
loadVariables('FMX_GB.php', '');
loadVariablesNum('FMX_GB.php', 0, '');


Jetzt werden alle Variablen mit echo "&nr=$nr" ... in das Flash geholt und stehen dort zur Verfügung.
Nun gibt es noch eine Möglichkeit die ab Version Flash MX möglich ist.

» Flash ActionScript
LoadVars()


Hierbei handelt es sich um eine LoadVars-Klasse.
Um nicht den Rahmen hier zu sprengen will ich nur ganz kurz darauf eingehen.
Variablen aus der PHP-Datei können damit z.B. so geladen werden:

» Flash ActionScript
file = 'FMX_GB.php';
test = new LoadVars();
test.load( file );


Unsere Variablen stehen dann mit test.name oder test.text zur Verfügung.
Der ein oder andere wird jetzt vermuten, durch den etwas mehr AS-Code wäre dies umständlich.
Mag sein, aber diese LoadVars-Klasse bietet weitaus mehr Möglichkeiten als man annimmt :-)
Sie kann auf den HTTP-Header reagieren, die geladenen Bytes ermtteln, MIME-Typ ermitteln und

kann prüfen ob ein load- oder sendAndLoad-Vorgang abgeschlossen ist.
Diese Möglichkeiten gibt es bei loadVariables() oder loadVariablesNum() nicht.
Nützlich sind Angaben, um z.B. zu prüfen, ob auch wirklich alles geladen wurde.
loadVariables() und loadVariablesNum() laden - naja sagen wir mal Blindlinks :-)
Mitunter muss man prüfen, ob eine Variable richtig im Flash geladen wurde,
sonst kann es dazu führen, dass das Flash plötzlich stehen bleibt, und wer will das schon.

Werden MySQL-Abfragen gemacht müssen diese auch mit echo "&nr=$nr" ... ausgegeben werden.

Nachdem wir uns die Möglichkeiten angeschaut haben, um Werte aus einer PHP-Datei zu holen,
wollen wir uns nun ansehen wie Variablen vom Flash zur PHP-Datei kommen.

Wie kommen die Flash-Daten nun zur PHP-Datei ?

Ähnlich wie bei HREF-Links oder Formulare, gibt es auch hier zunächst die GET- und POST-Methode.
Nehmen wir an, wir wollen den Text vom Gästebuch an eine PHP-Datei schicken.
Die Flash-Variable sei hier mal »inhalt«.

Ähnlich wie beim Laden von Werten, können wir auch senden:

» Flash ActionScript
loadVariables('FMX_GB.php', '');


Jedoch reicht diese Zeile nicht wirklich aus, das ganze muss mit GET oder POST passieren.

» Flash ActionScript
loadVariables('FMX_GB.php', '', 'POST');
loadVariables('FMX_GB.php', '', 'GET');


Jetzt müssen nur noch die Variablen übergeben werden.
Betrachten wir uns die Methode GET.
Ähnlich wie bei Links mit kann dies auch im Flash gemacht werden.

» Flash ActionScript
loadVariables('FMX_GB.php?text=' + inhalt , '', 'GET');


Beachte hier die richtige Schreibeweise, sonst kommt nichts an :-)
Bei der Methode POST kann folgende Syntax benutzt werden:

» Flash ActionScript
inhalt = 'uhu aha oho';
loadVariables('FMX_GB.php', '', 'POST');


Flash sendet nun alle Variablen per Post an die PHP-Datei.
Aber, hier gibt es noch einen Hacken.
Flash sendet hier ALLE Flash-Variablen per POST !
Man kann dies einfach in der PHP-Datei überprüfen:

» PHP
<?php
echo ''print_r$_POSTtrue ), '';
?>


Alternative wäre hier, wieder mit der LoadVars-Klasse zu arbeiten.

» Flash ActionScript
test.send(url [,ziel, methode])


URL und Methode sollte klar sein, bei ZIEL kann ein Framefenster gewählt werden.
Wollen wir nun unseren Inhalt damit an die PHP-Datei senden, würde unser Beispiel so aussehen:

» Flash ActionScript
test.inhalt = 'uhu aha oho';
test.send('FMX_GB.php', '', 'POST')


Kleine Hinweis zum Schluss

Meist stolpert man über das Problem, dass Umlaute im Flash nicht dargestellt werden,
wenn man Werte aus einer PHP-Datei oder genrell aus einer Datei bezieht.
Abhilfe schafft hier eine Zeile, die gleich zu beginn im Flashfilm als AS eingegeben werden muss:

» Flash ActionScript
System.useCodepage=true;


Zur Erklärung:


Wenn die Eigenschaft auf false gesetzt ist, werden externe Textdateien von Flash Player als Unicode erkannt.
(Diese Dateien müssen beim Speichern als Unicode verschlüsselt werden.)

Wenn die Eigenschaft auf true gesetzt ist, werden externe Textdateien als Dateien mit der
herkömmlichen Codepage des Betriebssystems erkannt, unter dem Flash Player ausgeführt wird.


Vieleicht konnte ich auch diesmal wieder etwas näher bringen,
und den Datenaustausch zwischen PHP und Flash etwas vermitteln.

(Änderungen vorbehalten - MediaCix)

bisherige Kommentare

1
03.09.2008
Kaspar meint dazu:
Trotz des Alters des Beitrages und auch mangelndes Flasherfahrung:
Müsste es nicht reichen einfach alle Texte bzw. mit base64 zu kodieren und dann wieder aufzulösen. Dann müsste man sich keine Gedanken über &s oder Newlines machen.

just my two cents

2
03.09.2008
[CIX88] meint dazu:
Naja, Flash benutzt die &-Zeichen als Trennzeichen zwischen den Variablen. Früher war es mal so, dass Strings fehlerhaft im Flash angekommen sind, weil Flash nicht das Ende eines Strings sauber erkannt hat.

Die Sache mit base64 geht im PHP, aber das muss dann im Flash wieder ausgelesen werden. Dafür gibt es keine Funktion, jedenfalls ist mir in diesem Moment nichts bekannt.

neuen Kommentar schreiben

Ich möchte automatisch eine E-Mail bei neuen Kommentaren erhalten.



Themen mit ähnlichen Inhalten


Tags zum Beitrag

actionscript     loadvariables     loadvariablesnum     movieclip     loadvars