cnt

Flash und Datenbanken: Nichts einfacher als das!

Mit Server-Side-Scripting und Kommunikation über Variablen fällt der Zugriff auf Datenbank-gestützte Informationen von Flash-Movies trotz fehlender spezieller Datenbankfunktionen äusserst leicht.

Artikel erschienen in Swiss IT Magazine 2001/16

     

Auch Flash-Gestalter möchten nicht auf dynamische, Datenbank-gestützte Sites verzichten, die bei jedem Zugriff mit frischen Informationen versorgt werden oder sich vom Site-Besucher gleich selber mit den gewünschten Daten anreichern lassen. Flash enthält zwar eine umfassende Programmierumgebung, eigentliche Datenbankzugriffsfunktionen sind im Sprachschatz von ActionScript aber nicht enthalten.



Dafür bietet Flash eine fast schon unverschämt simple Möglichkeit, Daten mit externen Scripts und Applikationen auszutauschen: Der gute alte, seit den CGI-Urzeiten bekannte Mechanismus mit Variablen, die der Absender - in diesem Fall das Flash-Movie - beim Aufruf einer ausführbaren Datei an diese übergibt beziehungsweise als Resultat der Ausführung zurückerhält, funktioniert in den letzten paar Versionen anstandslos auch in Flash.




Die folgenden zwei Beispiele demonstrieren das grundlegende Vorgehen in der ActionScript-Syntax von Flash 5, die mit ihrer grossen Ähnlichkeit zu JavaScript wesentlich moderner und letzten Endes bequemer zu handhaben ist als die vorher gebräuchliche Slash-Notation. Der Upgrade auf die neueste Flash-Version empfiehlt sich auch wegen der stark verbesserten Oberfläche und weiteren attraktiven Features. Es mag sein, dass die installierte Browserbasis noch stark auf Flash 4 konzentriert ist; aber jede neue Flash-5-Site ist für den Surfer ein Anstoss, seinen Flash-Player ebenfalls auf den neuesten Stand zu bringen.


Der einfache Fall: Das Einlesen einer Textdatei

Die simpelste Variante, externe Informationen in einem Flash-Movie zu präsentieren, ist das Einlesen und Anzeigen eines Textfiles. Wie der eigentliche Datenbankzugriff, den wir im zweiten Beispiel zeigen werden, basiert auch die Verarbeitung von Textdateien in Flash auf der Kommunikation über Variablen:




So heisst der ActionScript-Befehl, mit dem sich Daten zwischen Flash und externen Quellen übermitteln lassen. Das Verfahren ist im Grunde simpel, birgt jedoch einige Tücken, die ohne prinzipielles Verständnis der ablaufenden Vorgänge zu hartnäckigen, oft "unerklärlichen" Fehlern führen. Einige wichtige Punkte:





• URL: dieser Parameter gibt die externe Datenquelle an und ist im gewohnten Internet-URL-Format anzugeben. Befindet sich die Datei also im gleichen Verzeichnis wie das Flash-Movie, wird nur der Dateiname benötigt. Andernfalls muss die volle relative oder absolute URL angegeben werden, zum Beispiel http://www.derandereserver.com/dertext.txt




• Die Art des Objekts, das sich hinter der URL verbirgt, spielt keine Rolle. Einziges Kriterium: Das Resultat, das von dem Objekt an Flash zurückgegeben wird, muss eine Zeichenkette im MIME-Format application/x-www-urlformencoded sein, dem Standardformat, in dem Daten von und zu CGI-Scripts übermittelt werden. Es wird auch Variable-Value-Format genannt.




• Das einfachste Objekt, das einen Variable-Value-String liefert, ist ein Textfile, das die Zeichenkette schlicht und einfach enthält - mit loadVariables wird automatisch der gesamte Inhalt des Textfiles in die Flash-Variablen übertragen, die im Text spezifiziert sind. Aber auch sämtlicher ausführbarer Programmcode, der auf einem Webserver läuft und als Resultat einen korrekten Variable-Value-String ausgibt, ist als URL denkbar. Beispiele sind CGI-, ASP-, JSP- und PHP-Scripts.




• Der ActionScript-Befehl enthält keinerlei Informationen, welcher Text in welche Variablen übertragen werden soll. Die gesamte Beziehung zwischen Variablennamen und Inhalten wird durch den eingelesenen Text selbst bestimmt. Flash kann also nicht irgendwelche Textfiles einlesen, sondern nur solche, in denen mindestens ein Variable-Value-Paar definiert ist.




• Ziel: Dieser Parameter gibt den Flash-Level an, in den die eingelesenen Variablen geladen werden sollen. Er ist nicht obligatorisch; um sicher zu gehen, sollte man ihn aber stets spezifizieren. In einfachen, nicht verschachtelten Beispielen empfiehlt sich die Angabe von Level Null.




• Der loadVariables-Befehl arbeitet asynchron: Das Flash-Movie läuft sofort nach dem Aufruf des Befehls weiter und wartet nicht, bis das Textfile vollständig eingelesen wurde. Es empfiehlt sich deshalb, eine kleine Animationssequenz einzubauen, die den Benutzer über den Ladevorgang informiert. Den erfolgreichen Abschluss von loadVariables kann man daran überprüfen, ob die letzte einzulesende Variable etwas enthält. Ist sie nicht definiert oder leer, spielt man die Loader-Animation nochmals ab; nach dem Abschluss verzweigt man zu dem Frame, in dem der Text angezeigt werden soll. Es geht zwar auch ohne Loader-Animation - aber dann dauert es unter Umständen einige Zeit, bis der Surfer den Inhalt tatsächlich zu sehen bekommt, oder es werden zunächst alte Daten von einem früheren Durchlauf angezeigt.




• Wie kommt der Text zur Anzeige? Ganz einfach: Flash füllt ein dynamisches Textfeld, das im Instance-Panel mit einem Variablennamen verknüpft ist, automatisch mit dem Inhalt dieser Variablen. Schriftart, Farbe, Stil und Grösse entsprechen den Spezifikationen des Textfelds, oder sie werden über HTML-Befehle im Text definiert: Flash 5 unterstützt in dynamischen Textfeldern einen eng begrenzten Satz von HTML-Tags.


Nicht viel schwieriger: Der Zugriff auf die Datenbank

Statt einfach ein Textfile einzulesen, kann Flash mit dem gleichen Mechanismus auch beliebige andere Daten übernehmen. Sie müssen bloss im Variable-Value-Format übergeben werden. Dies erledigt eine Datenbank nicht von alleine - und ausserdem bedingt ein sinnvoller Datenbankzugriff auch die Übergabe von Informationen in umgekehrter Richtung, zum Beispiel zur Übermittlung des Suchkriteriums bei einer Abfrage.



Zu diesem Zweck bietet der loadVariables-Befehl einen dritten Parameter: loadVariables (URL, Ziel, Methode).




Wird beim Aufruf von loadVariables zusätzlich eine der Methoden GET oder POST angegeben, überträgt Flash bei Aufruf sämtliche Variablen an die aufgerufene URL, die im aktuellen Flash-Level definiert sind. Im Fall von POST erhält die URL die Variablen analog einem HTML-Formular einzeln; GET übermittelt alle Variablen zusammen im sogenannten Query String, den Flash automatisch zusammensetzt.



Ein Beispiel: In Flash sind zum Zeitpunkt des Aufrufs von loadVariables mit GET zwei Variablen namens derSuchbegriff und dieVariante definiert. Flash überträgt in diesem Fall folgenden Query String an die URL: derSuchbegriff=Hühnereier&dieVariante=Freiland - es liefert die Informationen also im genau gleichen Format an, die es auch als Resultat entgegennimmt. Die Kommunikation funktioniert in beiden Richtungen identisch.



Nun fehlt nur noch eines: der eigentliche Zugriff auf die Datenbank. Dafür ist voll und ganz die aufgerufene URL zuständig - die gesamte Verarbeitung läuft auf der Serverseite ab. Voraussetzung für Datenbankgestützte Flash-Sites ist demnach ein Webserver mit installiertem Server-Side-Scripting - ob ASP, JSP, PHP oder sonst eine Scripting-Architektur ist nicht von Belang; einzige Bedingung: Der Server muss auf den Request hin einen String im CGI-Standardformat zurückgeben können.



In unserem Praxisbeispiel verwenden wir ASP: Ein ASP-fähiger Webserver ist in jedem modernen Windows-Betriebssystem entweder bereits aktiv oder kann ohne weitere Kosten von der Windows-Installations-CD nachinstalliert werden.




Eine einfache Datenbankabfrage

Die minimalen Voraussetzungen bestehen neben Flash 5 aus folgenden Komponenten: Ein Webserver mit ASP-Unterstützung muss auf dem System installiert sein, wobei der Personal Web Server von Windows 9x ebenso funktioniert wie die WWW-Dienste von Windows NT oder 2000. Daneben muss für unser Beispiel eine Access-Datenbank mitsamt installiertem Treiber vorliegen.



1. Erstellen Sie als erstes eine Datenbank mit einigen Testdaten. Zur Demonstration verwenden wir Access; für Real-Life-Websites ist allenfalls SQL Server, Oracle oder ein anderer leistungsfähiger DB-Server nötig. Unsere Beispieldatenbank listet verschiedene Obstsorten auf und besteht aus einer Tabelle "Obst" mit den drei Feldern "Name", "Farbe" und "Kalorien". Nennen Sie das Datenbankfile obst.mdb und legen Sie es in einem Verzeichnis auf dem Webserver ab, zum Beispiel unter c:intetpubwwwrootflashdbtest.mdb




2. Als zweite Komponente kommt das Flash-File, das als Oberfläche für die Datenbankabfrage dient. Es besteht aus neun Frames, die wie folgt aufgebaut sind: Frame 1 dient der Texteingabe. Plazieren Sie irgendeinen erklärenden Text, ein Eingabefeld und einen Button. Das Eingabefeld muss in den Textoptionen mit dem gleichen Namen benannt werden, der später im ASP-Script für den Suchbegriff verwendet wird. Wir nennen es der sinnvollerweise derSuchbegriff. Der entsprechende Button führt als einzige Anweisung den Befehl gotoAndStop(2) aus: Beim Anklicken der Schaltfläche verzweigt unser Movie zum zweiten Frame. Vergessen Sie nicht, in den Frame Actions von Frame 1 ebenfalls einen Stop-Befehl einzubauen, sonst "rennt das Movie davon". Die Frame Actions von Frame 2 nehmen den loadVariables-Befehl auf:



p class="abodyfirst">Damit wird dann schliesslich das eigentliche ASP-Script aufgerufen und der Inhalt des Eingabefelds derSuchbegriff von Frame 1 übergeben. Da wir nur eine Variable verwenden, empfiehlt sich die simplere GET-Methode: Flash damit sendet den Query-String "derSuchbegriff=" an das Script.



Die Frames 3 bis 8 enthalten eine Loader-Animation, die inhaltlich beliebig gestaltet werden kann. Wichtig sind bloss die Frames Actions im Start- und Endframe. Frame 3 überprüft, ob die letzte zu ladende Variable, in unserem Fall "Kalorien", schon bereit ist und verzweigt in diesem Fall zu Frame 9, andernfalls läuft die Loader-Animation bis Frame 8 weiter:



3. Das dazugehörende ASP-Script für die Datenbankabfrage finden Sie im Kasten auf der vorhergehenden Seite. Die Funktionen sind im Kommentar erklärt.



Plazieren Sie das ASP-Script im gleichen Ordner, in dem auch die Access-Datenbank, das Flash-File und die aufrufende HTML-Seite liegen. Nun ist unsere Datenbank-gestützte Flash-Site zum Testen bereit.



Achten Sie schliesslich noch auf folgenden Punkt: Sie dürfen nicht einfach die HTML-Seite, auf der sich das Flash-Movie befindet, von der Harddisk laden. Damit das ASP-Script funktioniert, muss der Webserver die Verarbeitung übernehmen. Geben Sie also die korrekte URL der Testseite ein, zum Beispiel http://typhoon/obst/ obst.html.





Variable-Value-Format application/x-www-urlformencoded

Damit Flash Variablen aus externen Quellen einlesen kann, müssen die Daten im CGI-Standardformat vorliegen, das stets eine Kombination von Variablenname und Inhalt der Variable spezifiziert.


Es können mehrere Variablen in der gleichen Zeichenkette enthalten sein. Die Name-Werte-Paare müssen dazu durch das Ampersand-Zeichen & getrennt werden, wobei sich beliebig viele Paare aneinander reihen lassen:




Die Variablennamen setzen sich aus alphanumerischen Zeichen zusammen; Leerschläge und Sonderzeichen sind nicht erlaubt. Der Inhalt der Variablen kann beliebig lang sein und beliebige Zeichen enthalten - ausser dem Ampersand, das ja zur Trennung mehrerer Variablen dient: Textdaten, die Ampersands enthalten, können auf diese Weise leider nicht ausgetauscht werden.



Zwischen Variablenname und Gleichheitszeichen sowie Ampersand und dem nächsten Variablennamen sollten ebenfalls keine Leerschläge stehen.




Das ASP-Script für die Datenbankabfrage


(ubi)


Artikel kommentieren
Kommentare werden vor der Freischaltung durch die Redaktion geprüft.

Anti-Spam-Frage: Wie hiess im Märchen die Schwester von Hänsel?
GOLD SPONSOREN
SPONSOREN & PARTNER