DYNAMISCHE INHALTE

Transcrição

DYNAMISCHE INHALTE
KAPITEL 3
DYNAMISCHE INHALTE
DYNAMISCHE WEBSEITEN MIT FLASH UND PHP
18
Kapitel 3
In diesem Kapitel zeige ich Ihnen die grundlegenden Möglichkeiten zum Austausch von
Daten zwischen Flash und PHP. Zu jedem Beispiel finden Sie jeweils auch eine kleine
Funktionsreferenz.
3.1 Variablen von PHP in Flash laden
In diesem Kapitel wird gezeigt, wie sich Daten aus PHP in Flash-Filme übertragen (einlesen) und dort auswerten bzw. darstellen lassen.
3.1.1 Schema der Übergabe
Abbildung 3.1: Schema der Übergabe von Daten aus PHP an Flash. Mit den Befehlen loadVariables() oder
loadVariablesNum()wird aus dem Flash-Film das Script aufgerufen und werden die vom Script ausgegebenen
Daten empfangen. Auf die Flash-kompatible Formatierung von Daten wird in Kapitel 3.1.3 eingegangen.
3.1.2 Funktionen für das Laden
Um Daten von PHP nach Flash zu laden, werden in Flash einige Funktionen benötigt.
Diese werden in diesem Abschnitt vorgestellt. Außerdem werden einige häufige Fehler
beim Umgang mit diesen Funktionen angesprochen.
•
HINWEIS
Die nachfolgend beschriebene Funktion loadVariables() und loadVariablesNum() sind asynchrone Prozesse. Das bedeutet, dass bei ihrem Aufruf die
Timeline keinesfalls anhält und auf den Abschluss des Befehls wartet, sondern dass die Timeline sich ohne anzuhalten weiterbewegt. Es kann also
nicht davon ausgegangen werden, dass im Schlüsselbild, das auf den Befehl
folgt, die Daten bereits verfügbar sind. Die Verfügbarkeit von Daten muss
zuerst überprüft werden. Mehr dazu in Kapitel 3.1.8.
DYNAMISCHE WEBSEITEN MIT FLASH UND PHP
Dynamische Inhalte
19
loadVariablesNum()
Beschreibung: Mit loadVariablesNum() können Daten aus externen Datenquellen auf
Ebenen im SWF geladen werden.
Definition:
void loadVariablesNum (string url, string position [, int methode]);
Parameter:
string url
Ein absoluter oder relativer URL zu dem Script, das aufgerufen werden soll.
URL – URL steht für Uniform Resource Locator und ist die Abkürzung
für eine Internetadresse.
•
HINWEIS
Ob der URL nun ein PHP-Script, ein ASP-Script, ein Perl-Script
oder eine einfache Textdatei ist, macht keinen Unterschied, solange die Daten korrekt formatiert sind. Wie eine korrekte Formatierung aussieht, wird in Kapitel 3.1.3 erläutert.
Seit Version 4.0.1.2 von Flash muss der angegebene URL auf
demselben Host sein wie das SWF, von dem aus der Aufruf
erfolgt (siehe Kapitel 5.1).
SWF – SWF ist die Abkürzung für ShockWave Flash. SWF wird aber meistens dazu verwendet, einen mit Flash erstellten Film zu benennen, da die
Dateiendung .swf ist.
string position
Eine Ebene in unserem SWF.
int methode
Dieses Argument ist optional. Es gibt an, wie die in Flash vorhandenen
Variablen an den URL gesendet werden. Mögliche Werte sind POST oder GET.
Auf die verschiedenen Methoden wird in Kapitel 3.2.3 näher eingegangen.
Anwendung:
Um die Ausgabe eines Scripts (hier: meinScript.php) auf Ebene 0 unseres
Films zu laden, muss der Aufruf folgendermaßen aussehen:
//~ ActionScript
loadVariablesNum("meinScript.php", 0);
•
HINWEIS
Andere Betriebssysteme als Windows (z.B. Linux) unterscheiden zwischen Groß- und Kleinschreibung. Deshalb ist es wichtig, dass die Schreibweise des Scriptnamens bei einem Aufruf
aus Flash mit dem wirklichen Namen der Datei übereinstimmt.
DYNAMISCHE WEBSEITEN MIT FLASH UND PHP
20
Kapitel 3
loadVariables()
Beschreibung: Mit loadVariables() können Daten aus externen Quellen auf Ebenen oder
in Filmsequenzen geladen werden.
Definition:
void loadVariables (string url , string position [, int methode]);
Parameter:
string url
Ein absoluter oder relativer URL zu dem Script, das aufgerufen werden soll.
string position
Die Position ist hier ein Ziel innerhalb des SWF, beispielsweise eine
Filmsequenz oder eine Ebene.
int methode
Dieses Argument ist optional. Es gibt an, wie die in Flash vorhandenen
Variablen an den URL gesendet werden. Mögliche Werte sind POST oder GET.
Auf die verschiedenen Methoden wird in Kapitel 3.2.3 näher eingegangen.
Anwendung:
Um die Ausgabe eines Scripts (hier: meinScript.php) in eine Filmsequenz
auf unserer Hauptzeitleiste zu laden, muss der Aufruf des SWF folgendermaßen aussehen:
//~ ActionScript
loadVariables("meinScript.php", "_root.movieClip");
oder
//~ ActionScript
_root.movieClip.loadVariables("meinScript.php");
3.1.3 Korrekte Formatierung
Damit Flash die Ausgabe eines Scripts richtig interpretieren kann, müssen die Daten eine
bestimmte Form haben (application/x-www-form-urlencoded):
variablenName=variablenWert
Bei mehreren Variablen sieht dies so aus:
variable1=wert1&variable2=wert2,...,&variableN=wertN
Als Trennzeichen zwischen den einzelnen Variablen dient das &-Zeichen.
DYNAMISCHE WEBSEITEN MIT FLASH UND PHP
Dynamische Inhalte
•
21
Der Inhalt des PHP-Scripts (hier: meinScript.php) ist folgender:
<?php
echo "variable1=wert&variable2=wert";
?>
echo() gibt einen String auf der Standardausgabe (Bildschirm bzw. Browser) aus.
In Flash lädt folgender Code das PHP-Script mit oben stehendem Inhalt:
//~ ActionScript
loadVariablesNum("meinScript.php", 0);
Wenn die Daten geladen wurden, dann sind sie an der Stelle verfügbar, die
bei den Befehlen als Ziel angegeben wurde. Das heißt, die Variablen variable1 und variable2 sind jetzt auf der Hauptzeitleiste verfügbar und können
beispielsweise als
_root.variable1
_root.variable2
BEISPIEL
angesprochen oder in einem Textfeld auf der Hauptzeitleiste mit dem
Namen variable1 oder variable2 angezeigt werden.
Einleitung und Schluss der Daten
Flash lädt Daten normalerweise korrekt, wenn man bei der ersten Variable das &-Zeichen
weglässt. Beispielsweise so:
variable1=wert&variable2=wert
Sollte das Script jedoch davor etwas anderes ausgeben (beispielsweise eine Warnung
o. Ä.), dann wird der erste Variablenname durch die Ausgabe der Warnung verfälscht.
•
Wenn vor der Ausgabe der eigentlichen Daten ungewollt eine Warnung ausgegeben wird, z.B. so:
UNGEWOLLTE_WARNUNGvariable1=wert&variable2=wert
Dann wird in diesem Fall die erste Variable nicht mehr
Variable variable1 = "wert"
lauten, sondern:
Variable UNGEWOLLTE_WARNUNGvariable1 = "wert"
Dieses Problem kann man umgehen, indem man vor den Namen der ersten
Variable auch ein &-Zeichen setzt; folglich so:
BEISPIEL
UNGEWOLLTE_WARNUNG&variable1=wert&variable2=wert
DYNAMISCHE WEBSEITEN MIT FLASH UND PHP
22
Kapitel 3
Es werden nun z.B. bei der Ausgabe eines Fehlers zwar trotzdem noch mehr (unnötige)
Daten geladen, jedoch wird an den übergebenen Variablen nichts verfälscht. Leiten Sie Ihre
Daten also immer mit einem &-Zeichen ein.
Dasselbe gilt auch für das Ende der Daten. Wenn eine Warnung o. Ä. am Ende ausgegeben
wird, dann wird diese an den Wert der letzten Variable angehängt.
•
Die Ausgabe eines Scripts enthält nach der Ausgabe der Daten eine ungewollte Warnung:
&variable1=wert&variable2=wertUNGEWOLLTE_WARNUNG
Wenn dies in Flash geladen wird, dann ist der Wert der Variable »variable2«
nicht mehr
Variable variable2 = "wert"
sondern:
Variable variable2 = "wertUNGEWOLLTE_WARNUNG"
Es ist also sinnvoll, auch an das Ende der Daten ein &-Zeichen anzuhängen.
Etwa so:
BEISPIEL
&variable1=wert&variable2=wert&UNGEWOLLTE_WARNUNG
Die Warnung wird zwar trotzdem noch geladen, allerdings wird sie nicht an den Wert der
letzten Variable angehängt. Beenden Sie Ihre Datenausgabe also ebenfalls immer mit einem
&-Zeichen.
•
HINWEIS
Bei Verwendung eines &-Zeichens am Ende wird in Flash eine überflüssige
Variable mit leerem Namen geladen (wenn danach nichts mehr kommt), da
das &-Zeichen ja normalerweise dafür verwendet wird, eine neue Variable
einzuleiten. Wenn Sie diese Variable stört, so können Sie sie beruhigt löschen.
Auf diese Variable können Sie mit \r\n oder \n zugreifen (je nachdem wie Sie diese aus
PHP ausgeben). Entsprechend lautet der Befehl, um diese Variable zu entfernen:
delete \r\n;
oder:
delete \n;
Dies erzeugt in der Flash-Entwicklungsumgebung eine Fehlermeldung; die Variable wird
aber korrekt entfernt.
DYNAMISCHE WEBSEITEN MIT FLASH UND PHP
Dynamische Inhalte
23
Strukturierte Datenausgabe
Dasselbe gilt auch, wenn man seine Ausgabe strukturieren möchte, um einen besseren
Überblick zu bekommen.
Falls Sie die Ausgabe etwa so schreiben wollen
&preis1=25
&preis2=40
&preis3=80
dann werden Sie nach jedem Wert noch die Zeichen \r\n finden, so genannte Whitespaces
(unter Whitespaces werden alle nicht sichtbaren Zeichen wie z.B. Space, Tab, Newline und
Carriage Return verstanden). Um dies zu umgehen, müssen Sie hinter jedem Wert ein &Zeichen anbringen:
&preis1=25&
&preis2=40&
&preis3=80&
Solange die Werte nicht angezeigt werden, bemerkt man Whitespaces nicht. Es scheint einerlei zu sein, ob sie da sind oder nicht – will man jedoch mit den Werten rechnen, wie z.B.
mit den Preisen im oberen Beispiel, so muss man sichergehen, dass keine Whitespaces vorhanden sind, sonst schlägt die Rechenoperation fehl.
Rechnen mit eingelesenen Werten
Noch eine weitere Besonderheit muss man beachten, wenn man mit eingelesenen Werten
rechnen möchte: Im englischsprachigen Raum ist bei der Angabe von Preisen der Punkt
das Äquivalent des Kommas im deutschsprachigen Raum.
Englische Angabe: 9.99 €
Deutsche Angabe: 9,99 €
Wenn Sie nun Preise (z.B. bei einem Onlineshop) im deutschen Format übergeben, dann
können Sie mit diesen nicht rechnen, da sie nicht als Zahl, sondern als String erkannt werden. Wollen Sie mit eingelesenen Zahlen rechnen, muss die Ausgabe folgendermaßen aussehen:
&preis1=9.99&preis2=18.07&
Nicht:
&preis1=9,99&preis2=18,07&
DYNAMISCHE WEBSEITEN MIT FLASH UND PHP
24
Kapitel 3
Leerzeichen
Leerzeichen zwischen dem Variablennamen und dem Gleichheitszeichen werden an den
Variablennamen angehängt.
•
Die Ausgabe eines PHP-Scripts ist folgende:
&variable1
=wert
Sie sehen, dass zwischen variable1 und dem Gleichheitszeichen Leerzeichen sind. Diese werden von Flash nicht etwa ignoriert, sondern an den
Variablennamen (in diesem Fall variable1) angehängt.
Der Name ist also nicht mehr:
Variable variable1 = "wert"
sondern:
Variable variable1
BEISPIEL
= "wert"
Sie sollten demnach keinen ungewollten Abstand setzen.
Übergabe von booleschen Werten
Bei der Übergabe von booleschen Werten, also true (wahr) oder false (falsch) müssen Sie
beachten, dass bei folgender Schreibweise:
&variable1=true&variable2=false&
die Werte von Flash als String angesehen werden. Um zu überprüfen, ob diese Variablen
die richtigen Werte haben, müssten Sie folgenden Code benutzen:
//~ ActionScript
if (variable1 == "true" && variable2 == "false") {
//~ Bedingung erfüllt
} //~ end if
Hier wird überprüft, ob der Wert der variable1 gleich dem String »true« ist und ob der
Wert der variable2 gleich dem String »false« ist. Sie sehen, dass die Werte in diesem Falle
Strings sind, keine booleschen Werte.
Die richtige Formatierung, um einen Vergleich mit booleschen Werten zuzulassen, ist:
&variable1=1&variable2=0&
DYNAMISCHE WEBSEITEN MIT FLASH UND PHP
Dynamische Inhalte
25
Dieses Format erzielt das gewünschte Ergebnis:
//~ ActionScript
//~ prüfen, ob variable1 wahr und variable2 falsch ist
if (variable1 && !variable2) {
//~ Bedingung erfüllt
} //~ end if
Diese Abfrage prüft, ob variable1 true (wahr) und variable2 false (falsch) ist.
URL-Kodierung von Werten
Dieses Beispiel befindet sich im Ordner Applikationen\urlEncode\ auf der CD-ROM.
Da bei der Übergabe von Daten nur ein bestimmter Zeichensatz erlaubt ist, müssen alle
Zeichen, die nicht alphanumerisch sind (bis auf -_. ), in % gefolgt von dem ASCII-Code des
Zeichens umgewandelt werden. Dies ist vor allem bei den &-Zeichen wichtig, die als
Trennzeichen für Variablen fungieren. So führt
&menue=Fish & Chips&
nicht zu einer Variable menue mit dem Wert Fish & Chips innerhalb von Flash, sondern zu
zwei Variablen: zu einer mit dem Namen menue und dem Wert Fish und zu einer mit dem
Namen Chips und einem leeren Wert:
Variable menue = "Fish "
Variable Chips = ""
Sie sehen, dass das zweite &-Zeichen ungewollt eine neue Variable einleitet, obwohl es eigentlich ein Teil vom Wert der Variable menue sein sollte.
Um das gewünschte Ergebnis zu erzielen, ist folgende Formatierung korrekt:
&menue=Fish+%26+Chips&
Dies ergibt nach dem Laden in Flash folgende Variable:
Variable menue = "Fish & Chips"
Die Funktion urlencode()
Damit man nicht alles von Hand kodieren muss, gibt es in PHP die Funktion
urlencode(), welche die Daten in das korrekte Format bringt.
Tutorial
string urlencode (string str)
string str
Das Argument ist der String, der kodiert werden soll. Zurückgegeben wird
ein String im kodierten (richtigen) Format.
DYNAMISCHE WEBSEITEN MIT FLASH UND PHP
!

Documentos relacionados