Impressum


mit Flash XML lesen und schreiben mithilfe von PHP geschrieben am 10.07.2008

Anbei eine kleine Zusammenfassung wie man das Datenhandling eines Gästebuchs mit Flash, XML und PHP realisieren könnte.
Die Scripte sind aufs wesentliche zusammengefasst. Auch Überprüfungen ob es die Datei gibt oder ob die Daten gültig sind (Fehlerbehandlungen, Sicherheit) werden hier nur am Rand oder nicht behandelt.
Für die detaillierte Beschreibung der Befehle mögest Du die Programm-Hilfe oder entsprechende Webseiten bemühen.

Flash nach PHP

Für das Projekt stelle ich die Flash-Veröffentlichungseinstellungen auf "Flash 8" mit "Actionscript 2.0".

In Flash habe ich ein paar dynamische Eingabefelder. Diese lese ich aus und speichere die Daten in eine Variabel vom Typ LoadVars:
ActionScriptvar savevar=new LoadVars(); savevar.vorname=TextfeldVorname.text; savevar.nachname=TextfeldNachname.text; savevar.message=TextfeldMessage.text;
dazu Kann man noch eine Funktion definieren um zu Kontrollieren ob das versenden geklappt hat. Die Meldung wird dann im Textfeld "Meldung" ausgegeben.
ActionScript savevar.onLoad=function (success) { if(success) {TextfeldMeldung.text='Eintrag wurde gespeichert.';} else {TextfeldMeldung.text='Eintrag konnte nicht gespeichert werden.';} } Nun fehlt noch der wichtigste Teil, das eigendliche versenden der Daten:
ActionScriptsavevar.sendAndLoad("saveEintrag.php",savevar,"POST"); Das passiert hier mit POST.

PHP nach XML

Die Daten die aus Flash gesendet wurden, empfange ich in der saveEintrag.php.

Zuerst lade ich eine vorhandene XML ein:
php $xmlobj=simplexml_load_file("gaestebuch.xml", null, LIBXML_NOCDATA); Dabei wird aus der XML-Datei ein Objekt gemacht, welches ich dann weiter verarbeiten kann.
Vorher sollte man z.B. mit file_exists prüfen ob es die Datei überhaupt gibt. Wenn nicht sollte man die Datei anlegen.

Nun erzeuge ich einen neuen Eintrag und hänge ihn an das xmlobj an:
php $eintrag = $xmlobj->addChild('eintrag'); $eintrag->AddAttribute('Vorname',$_POST["vorname"]); $eintrag->AddAttribute('Nachname',$_POST["nachname"]); $temp= $_POST["message"]; $temp =urlencode(utf8_encode($temp)); $eintrag->addChild('text',$temp ); $xmlobj->asXML($xml_datei); die letzte Zeile bewirkt das Speichern der XML.
Was man noch beachten sollte ist das richtige Codieren der Inhalte um zu verhindern das fremde Scripte eingeschleust werden. Beispielsweise habe ich das mit der message gemacht. Es sollte aber auch mit den anderen Werten geschehen.

XML nach Flash

Das ist recht unkompliziert, das Flash von hause aus das einlesen unterstützt.

Zuerst wird eine Variabel vom Typ XML definiert.
ActionScriptvar XMLdaten:XML=new XML(); XMLdaten.ignoreWhite=true; //leerzeichen ignorieren
Dann kommt eine Funktion die nach dem Laden ausgeführt wird. In der Informatik spricht man auch von Events. Hier fange ich das onLoad-Event ab:
ActionScript XMLdaten.onLoad = function(success){//wenn *.xml geladen auswerten if(success) {auswertungXML();} else {TextfeldMeldung.text='xml konnte nicht geladen werden.';} } Wurde die XML erfolgreich geladen, wird die Funktion auswertungXML aufgerufen - dazu später mehr.

Was erstmal noch fehlt ist der eigentliche lade-Befehl:
ActionScriptXMLdaten.load('gaestebuch.xml');

XML in Flash auswerten

Nach dem die XML-Daten in die Variabel XMLdaten geladen wurde, wird sie hier ausgewertet:
ActionScript function auswertungXML(){ var Eintragsanzahl=XMLdaten.firstChild.childNodes.length; Textfeldinhalt.text=''; for(var t=0;t<Eintragsanzahl;t++) { var node:XMLNode=XMLdaten.firstChild.childNodes[t]; if(node.nodeName=='eintrag') { Textfeldinhalt.htmlText+=node.attributes.Vorname + ' ' + node.attributes.Nachname + '<br>'; for(var t2=0;t2<node.childNodes.length;t2++) var node2:XMLNode=node.childNodes[t2]; if(node2.nodeName=='text') { Textfeldinhalt.htmlText+=node2.firstChild.nodeValue+ '<br><br>'; } } } } Für die einfache Anzeige gibt es neben dem Status-Textfeld ein HTML-Textfeld.

Was passiert dort?
Zuerst wird die Anzahl der Einträge ermittelt und nach dem leeren des Textfeldes namens "Textfeldinhalt" durchwandert eine Schleife alle Einträge.
In der Schleife wird wird ein Knoten (Node) abgegriffen und geprüft ob sie den Namen "eintrag" hat. Trifft das zu wird der Vorname und Nachname ausgelesen und im Textfeld "Textfeldinhalt" ausgegeben.
Im nächsten Schritt wird die Anzahl Unterknoten gesucht und geprüft ob einer namens "text" dabei ist. Ist dieser vorhanden wird der Inhalt auch ausgegeben.

Das waren die Basics zum einlesen und speichern von XML-Dateien.

Das Projekt für das einlesen einer XML-Datei kann hier für Flash CS3 heruntergeladen werden:
Flash-XML-lesen.rar

Links

http://www.flashforum.de
http://www.tutorials.de
http://www.mediengestalter.info


schreibe den ersten Kommentar:


Inhalt zur freien Verwendung gibs es beim Thema Downloads.
nach oben springen
mehr auf: Instagram, github, thingiverse