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 !