| |
ActionScript, PHP und MySQL
Allgemeines
zu PHP und MySQL
Was ist PHP?
PHP ist eine Skriptsprache, die in den HTML-Code einer
Webseite eingebettet werden kann. Ein spezieller Interpreter
übernimmt dann die Abarbeitung und Ausführung des Codes. Der
Server erkennt anhand der Dateiendung, dass es sich um eine
Webseite mit PHP handelt, und leitet diese zur
Interpretation an den PHP-Interpreter weiter. Dieser führt
das PHP-Skript aus und schickt die interpretierte Webseite
zurück zum Webserver, welcher die Seite anschließend zum
Client sendet.
Mit PHP lassen sich auf dem Server die vielfältigsten
Aufgaben durchführen. So sind z.B. Datenbankzugriffe,
Dateizugriffe oder auch die Auswertung von Benutzereingaben
möglich.
Was ist MySQL?
MySQL ist ein relationales Datenbank-Managementsystem.
Eine relationale Datenbank speichert Daten in separaten
Tabellen, anstatt sie alle in einem einzigen großen
Speicherraum unterzubringen. Hierdurch werden hohe
Geschwindigkeit und Flexibilität erreicht. Die Tabellen
werden durch definierte Beziehungen verbunden (Relationen),
was es möglich macht, Daten aus verschiedenen Tabellen auf
Nachfrage zu kombinieren. Der SQL-Teil von MySQL steht für "Structured
Query Language" (strukturierte Abfragesprache) - die
verbreiteteste standardisierte Sprache für
Datenbankzugriffe.
Warum PHP und MySQL? Die Skriptsprache PHP
erfreut sich immer größerer Beliebtheit, da Sie einfach zu
erlernen und sehr leistungsfähig ist und einfache
Zugriffsmöglichkeiten auf verschiedene Datenbanken
bereitstellt.
MySQL ist sehr schnell, zuverlässig und leicht zu benutzen.
Die hohe Geschwindigkeit und Sicherheit machen MySQL äußerst
geeignet, um auf Datenbanken über das Internet zuzugreifen.
Beides sind weit verbreitete Open – Source – Produkte, die
speziell für den Einsatz in Web-Anwendungen entwickelt
wurden. Open Source bedeutet, dass es für jeden möglich ist,
solche Software zu benutzen und zu verändern. Jeder kann
MySQL aus dem Internet herunterladen und benutzen, ohne
etwas zu bezahlen. Zudem bieten viele Provider
preisgünstigen Webspace mit PHP und MySQL an.
Entwicklungsumgebung
Da PHP serverseitig ausgeführt wird, benötigt man zum
Entwickeln den Apache – Webserver. Auf diesem Webserver muss
das Modul PHP und bei der Verwendung von Datenbanken zum
Beispiel MySQL installiert sein. Zur Administration der
MySQL – Datenbank eignet sich besonders gut die Oberfläche
phpMyAdmin.
Die Beispiele in diesem Kapitel sind mit folgenden Versionen
entwickelt wurden:
Betriebssystem: Windows XP
Webserver: Apache 1.3.29
PHP Version 4.3.6
MySQL Version 4.0.18
phpMyAdmin Version 2.5.6
Grundlagen
Mit Flash – Aktionen und Objektmethoden können Informationen
an serverseitige Skripts gesendet oder aus diesen empfangen
werden. Im Folgenden werden diese Aktionen und Methoden
aufgelistet und kurz erklärt.
Methoden und Aktionen des MovieClip-Objektes
Für alle Möglichkeiten, Daten aus Dateien zu laden gilt,
dass diese nur aus Dateien geladen werden, die sich auf
einem Server in derselben Subdomäne befinden wie das
Flash-Dokument. Auf diese Weise wird verhindert, dass über
ein Flash-Dokument Informationen von fremden Servern
heruntergeladen werden.
Die Aktionen loadVariables, loadVariablesNum und getURL
kommunizieren über das Protokoll HTTP mit serverseitigen
Skripts und übertragen alle Variablen aus der Zeitleiste,
mit der die Aktion verknüpft ist. Bei Verwendung als
Methoden des MovieClip-Objekts übertragen loadVariables und
getURL alle Variablen des angegebenen Movieclips.
Die Variablen, die von der angegebenen URL geladen werden
sollen, müssen im Standard-MIME-Format application/x-www-form-urlencoded
vorliegen. Das heißt, eine Variable und der zugehörige Wert
sind durch ein Gleichheitszeichen (=) verbunden und die
verschiedenen Variablen werden durch ein kaufmännischen UND
(&) getrennt.
Beispiel:
&name=max&alter=23&hobbys=lesen+schlafen&
loadVariables()
Die Aktion loadVariables() liest Daten aus einer externen
Datei und setzt die Werte für Variablen einer Flash
Player-Stufe oder eines Ziel – Movieclips. Es können auch
Variablen im aktiven Film durch neue Werte aktualisiert
werden.
Syntax:
loadVariables("url", stufe/"ziel" [,"methode"]);
Als Parameter werden übergeben:
-> die URL der Datei, aus der die Variablen geladen werden
sollen
-> Flash Player – Stufe oder Ziel – Movieclip, in die die
Variablen geladen werden sollen.
-> die Methode mittels der die Variablen übertragen werden
sollen
Werden keine Variablen gesendet, entfällt dieser Parameter.
Ansonsten stehen folgende Methoden zur Auswahl:
• POST – Variablen werden in einem separaten HTTP – Header
gesendet.
Ideal für längere Variablenstrings und wenn die Werte nicht
in der URL zu sehen seien sollen.
• GET – Die Variablen werden beim Senden ans Ende der URL
angehängt. Diese Methode ist nur für eine kleine Menge von
Variablen geeignet.
Da diese Aktionen asynchron arbeitet, das heißt die
Ergebnisse werden zu einem unbekannten Zeitpunkt
zurückgegeben, muss sichergestellt werden, dass die Daten
tatsächlich geladen wurden, bevor sie verwendet werden
können.
Wurden die Daten in einen Ziel – Movieclip geladen, wird die
Aktion onClipEvent(data) ausgeführt, sobald alle Variablen
geladen wurden.
Syntax:
onCilpEvent(data)
{
gotoAndPlay(10);
}
Sobald alle Daten geladen wurden springt der Film ins Bild
10.
Dieses Verfahren findet Anwendung im Beispiel MD5 – Codierer.
loadVariablesNum()
Die Aktion loadVariablesNum() liest wie die Aktion
loadVariables() Daten aus einer externen Datei, lädt die
übertragenen Variablen aber nur in eine Flash Player – Stufe
und nicht in einen Ziel – Movieclip. Auch bei dieser Aktion
können Variablen im aktiven Film durch neue Werte
aktualisiert werden.
Syntax:
loadVariablesNum("url", stufe [,"methode"]);
Als Parameter werden übergeben:
-> die URL der Datei, aus der die Variablen geladen werden
sollen
-> Flash Player – Stufe, in die die Variablen geladen werden
sollen.
-> die Methode mittels der die Variablen übertragen werden
sollen
Werden keine Variablen gesendet, entfällt dieser Parameter.
Ansonsten stehen folgende Methoden zur Auswahl:
• POST – Variablen werden in einem separaten HTTP – Header
gesendet.
Ideal für längere Variablenstrings und wenn die Werte nicht
in der URL zu sehen seien sollen.
• GET – Die Variablen werden beim Senden ans Ende der URL
angehängt. Diese Methode ist nur für eine kleine Menge von
Variablen geeignet.
getURL()
Mit der Aktion getURL() wird ein Dokument aus einer
bestimmten URL in das angegebene Fenster geladen. Es können
außerdem Variablen über die Methoden GET oder POST an eine
andere Anwendung übergeben werden, die sich an der
angegebenen URL befindet.
Die Aktion getURL() gibt dabei alle Informationen an ein
Browserfenster zurück, nicht an den Flash Player.
Syntax:
getURL(url [,"fenster" [,"methode"]]);
Als Parameter werden übergeben:
-> die URL von der das Dokument geladen werden soll
-> das Fenster, in das das Ergebnis geladen werden soll
Es wird entweder der Namen des jeweiligen Fensters angegeben
oder einer der folgenden reservierten Zielnamen.
• _self bezeichnet den aktuellen Frame im aktuellen Fenster
• _blank bezeichnet ein neues Fenster
• _parent bezeichnet den übergeordneten Frame des aktuellen
Frames
• _top bezeichnet den obersten Frame des aktuellen Fensters
-> die Methode mittels der die Variablen übertragen werden
sollen
Werden keine Variablen gesendet, entfällt dieser Parameter.
Ansonsten stehen folgende Methoden zur Auswahl:
• POST – Variablen werden in einem separaten HTTP – Header
gesendet.
Ideal für längere Variablenstrings und wenn die Werte nicht
in der URL zu sehen seien sollen.
• GET – Die Variablen werden beim Senden ans Ende der URL
angehängt. Diese Methode ist nur für eine kleine Menge von
Variablen geeignet.
Das LoadVars – Objekt
Mit dem LoadVars-Objekt können Sie alle Variablen einer
Instanz des Objekts an eine bestimmte URL senden und alle
von einem Server empfangenen Variablen in die Instanz des
Objekts laden.
Bevor die Methoden des LoadVars – Objekts aufgerufen werden
können, muss durch den Konstruktor new LoadVars() eine neue
Instanz des LoadVars – Objekts erzeugt werden. Diese Instanz
fungiert als Container für die Daten, die an eine URL
übertragen oder vom Server geladen werden sollen.
LoadVars.send()
Die Methode LoadVars.send() überträgt alle Variablen aus dem
LoadVars-Objekt an eine bestimmte URL.
Syntax:
meinLoadVars.send(url [,ziel, methode] );
Als Parameter werden übergeben:
-> meinLoadVars, die Instanz des LoadVars – Objekts, aus dem
die Variablen übertragen werden sollen
-> die URL an die die Variablen des Objektes übertragen
werden sollenn
-> Ziel, das Frame des Browsers, in dem die Antwort des
Servers angezeigt werden soll. Wird dieser Parameter
weggelassen, so wird die Antwort des Servers ignoriert.
-> die Methode mittels der die Variablen übertragen werden
sollen
Ist dieser Parameter nicht gesetzt, wird standardmäßig die
Methode POST verwendet. Ansonsten stehen folgende Methoden
zur Auswahl:
• POST – Variablen werden in einem separaten HTTP – Header
gesendet.
Ideal für längere Variablenstrings und wenn die Werte nicht
in der URL zu sehen seien sollen.
• GET – Die Variablen werden beim Senden ans Ende der URL
angehängt. Diese Methode ist nur für eine kleine Menge von
Variablen geeignet.
LoadVars.load()
Die Methode LoadVars.load() lädt alle Variablen von einer
bestimmten URL herunter, und stellt die geladenen Variablen
in die angegebene Instanz des LoadVars - Objekts. Alle
Variablen dieser Instanz, die den gleichen Namen tragen wie
heruntergeladene Variablen, werden überschrieben. Alle
weiteren Variablen dieses Objekts werden beibehalten.
Die Variablen, die von der angegebenen URL geladen werden
sollen, müssen im Standard – MIME – Format application/x-www-form-urlencoded
vorliegen.
Syntax:
meinLoadVars.load(url);
Als Parameter werden übergeben:
-> meinLoadVars, die Instanz des LoadVars – Objekts, in das
die Variablen geladen werden sollen
-> die URL von der die Variablen geladen werden sollen
LoadVars.sendAndLoad()
Die Methode LoadVars.sendAndLoad() sendet alle Variablen aus
der angegebenen Instanz des LoadVars – Objekts an eine
bestimmte URL. Die Antwort des Servers wird heruntergeladen
und in die angegebene Instanz des LoadVars – Objekts
gestellt.
Auch dabei müssen die Variablen, die geladen werden sollen
im Standard – MIME – Format application/x-www-form-urlencoded
vorliegen.
Syntax:
meinLoadVars.sendAndLoad(url, zielobjekt[,methode]);
Als Parameter werden übergeben::
-> meinLoadVars, die Instanz des LoadVars – Objekts, aus dem
die Variablen übertragen werden sollen
-> die URL an die die Variablen des Objektes übertragen und
von der das Ergebnis geladen werden soll
-> Das Zielobjekt ist die Instanz des LoadVars – Objekts, in
das die resultierenden Variablen gestellt werden.
-> die Methode mittels der die Variablen übertragen werden
sollen
Ist dieser Parameter nicht gesetzt, wird standardmäßig die
Methode POST verwendet. Ansonsten stehen folgende Methoden
zur Auswahl:
• POST – Variablen werden in einem separaten HTTP – Header
gesendet.
Ideal für längere Variablenstrings und wenn die Werte nicht
in der URL zu sehen seien sollen.
• GET – Die Variablen werden beim Senden ans Ende der URL
angehängt. Diese Methode ist nur für eine kleine Menge von
Variablen geeignet.
LoadVars.onLoad()
Da die Methoden LoadVars.load() und LoadVars.sendAndLoad()
asynchron arbeiten, das heißt das Ergebnis wird zu einem
unbekannten Zeitpunkt zurückgegeben, wird die
Ereignisprozedur onLoad() benötigt, um festzustellen ob die
Daten bereits geladen wurden. LoadVars.onLoad() wird
aufgerufen, wenn ein load – oder sendAndLoad – Vorgang
abgeschlossen ist. Wurden die Variablen erfolgreich
heruntergelden, werden sie in das LoadVars – Objekt kopiert
und beim Aufruf von LoadVars.onLoad() zur Verfügung
gestellt.
Syntax:
meinLoadVars.onLoad(geladen);
Als Parameter werden übergeben:
-> meinLoadVars, die Instanz des LoadVars – Objekts, in das
die Variablen geladen werden
-> der Parameter geladen ist true, wenn die Variable
erfolgreich geladen wurden.
Beispiel
MD5-Codierer In diesem Beispiel soll die
Verwendung der Aktion loadVariables() demonstriert werden.
Gleichzeitig dient der MD5 – Codierer später als Hilfsmittel
beim Erstellen des Gästebuches.
ansehen
Was ist MD5
MD5 (Message Digest Algorithm 5) ist eine von Ronald L.
Rivest entwickelte Einweg – Hash – Funktion. Mittels dieser
Funktion wird für Daten eine Prüfsumme, der so genannte
Hashwert, von 128 Bit Länge erzeugt. Dieser Hashwert wird
üblicherweise als 32-stellige Hexadezimalzahl notiert.
Derartige MD5 – Summen werden unter anderem von PGP
verwendet und zur Integritätsprüfung von Dateien benutzt.
Dabei wird die momentane MD5 – Summe der Datei mit einer
bekannten früheren Summe verglichen. So kann festgestellt
werden, ob die Datei verändert oder beschädigt wurde.
Insbesondere ist es noch nie gelungen, aus einer gegebenen
MD5-Summe die Ursprungsnachricht zu rekonstruieren.
In unserem Fall soll der Codierer dazu dienen, den Hashwert
eines Passwortes zu ermitteln, da dieses nicht im Klartext
in die Datenbank eingetragen werden soll. Aber dazu später
mehr.
Vorbreitung
Stellen Sie zuerst die Bühnengröße auf 300x200 Pixel. Legen
Sie einen neuen Movieclip an und nennen Sie diesen „MC_md5“.
Im Movieclip benötigen Sie 2 Ebenen, eine für Skripte und
eine für Buttons. Legen Sie in beiden Ebenen jeweils ein
Schlüsselbild im Bild 1 und ein Schlüsselbild im Bild 10 an.
Layout
Erzeugen Sie nun 2 neue Schaltflächen, eine mit der
Aufschrift „codieren“ und eine mit der Aufschrift „zurück“.
Den Codieren – Button positionieren Sie im ersten
Schlüsselbild der Ebene Buttons horizontal zentriert im
unteren Drittel der Bühne.
Je nach Größe des Buttons können Sie diese am Ende
symmetrisch zum Textfeld ausrichten. Den Button „Zurück“
setzten Sie im zweiten Schlüsselbild der Ebene Buttons an
die gleiche Stelle. Sie können zudem noch Statische
Textfelder als Überschriften erzeugen.
Kommen wir nun zu dem Textfeld. Dieses werden wir dynamisch
erzeugen, damit beliebige Eigenschaften gesetzt werden
können.
Für das Textfeld geben Sie im ersten Schlüsselbild der Ebene
Skript folgenden Code ein:
stop();
this.createTextField('TF_eingabe',1,20,50,250,60);
with(this.TF_eingabe){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = 1;
wordWrap = 1;
autoSize = false;
background = true;
}
font1=new TextFormat();
font1.size = 13;
font1.Color = 0x000000;
font1.font = "arial";
font1.bold = 1;
TF_eingabe.setNewTextFormat(font1);
Erklärung:
stop();
Zuerst wird die Wiedergabe des Filmes im aktuellen Bild
gestoppt.
this.createTextField('TF_eingabe',1,20,50,250,60);
Es wird ein leeres Textfeld mit dem Instanznamen „TF_eingabe“
erzeugt. Das Textfeld ist 250 Pixel breit, 60 Pixel hoch und
liegt an der Stelle x = 20 / y = 50. Die Tiefe ist 1.
Erzeugt man ein weiteres Textfeld, sollte es eine andere
Tiefe haben, da es sonst zu einer Überlagerung kommt und nur
eines der Textfelder zu sehen wäre.
Die Parameter werden wie folgt angegeben:
createTextField(instanzname, tiefe, x, y, breite, hoehe)
with(this.TF_eingabe){
In dieser with – Anweisung werden die Eigenschaften des
Textfeldes „TF_eingabe“ gesetzt:
type = 'input';
Es handelt sich um ein Eingabetextfeld.
border = 1;
Das Textfeld hat einen Rahmen, wobei die 1 für true steht.
borderColor = 0x000000;
Die Rahmenfarbe ist schwarz (hexadezimal 000000).
multiline = 1;
Es handelt sich um ein mehrzeiliges Textfeld, wobei die 1
hier wieder für true steht.
wordWrap = 1;
Im Textfeld ist Zeilenumbruch erlaubt.
autoSize = false;
Das Textfeld passt sich in Größe und Ausrichtung nicht
automatisch dem Text im Textfeld an.
background = true;
Das Textfeld hat einen gefüllten Hintergrund.
}
font1 = new TextFormat();
„font1“ ist eine neue Instanz des TextFormat – Objekts,
mittels dessen jetzt die Eigenschaften der Schrift im
Textfeld verändert werden können:
font1.size = 13;
Die Schriftgröße wird auf 13 Pixel gesetzt.
font1.Color = 0x000000;
Die Schriftfarbe ist schwarz.
font1.font = "arial";
Die Schriftart ist Arial.
font1.bold = 1;
Es handelt sich um Fettschrift, wobei die 1 hier wieder für
true steht.
TF_eingabe.setNewTextFormat(font1);
Das neue Textformat „font1“ wird für das Textfeld „TF_eingabe“
gesetzt.
Jetzt sollte Ihr Layout so oder ähnlich aussehen:

Layout
im ersten Schlüsselbild

Layout
im zweiten Schlüsselbild
Funktion
Wird der Codieren – Button des MD5 – Codieres gedrückt, soll
der Inhalt des Eingabetextfeldes an ein PHP – Skript
gesendet werden, welches dann die Codierung vornimmt. Der
Rückgabewert des Skriptes wird im zweiten Schlüsselbild
ausgegeben.
Beginnen Sie mit dem Skript des Codieren – Buttons:
on (release) {
eingabe = TF_eingabe.text;
TF_eingabe.text = "";
loadVariables("md5.php", "_root.MC_md5","POST");
}
Erklärung:
on (release) {
Wenn die Schaltfläche „losgelassen“ wird, werden die
folgenden Anweisungen ausgeführt:
eingabe = TF_eingabe.text;
Der Inhalt des Textfeldes „TF_eingabe“ wird in die Variable
„eingabe“ geschrieben.
TF_eingabe.text = "";
Der Inhalt des Textfeldes „TF_eingabe“ wird gelöscht.
loadVariables("md5.php", "_root.MC_md5" ,"POST");
Die Variable wird an das Skript md5.php gesendet, wobei die
Rückgabe an den Movieclip MC_md5 erfolgt und die Variablen
mittels der Methode „POST“ gesendet werden.
}
Nun muss gewartet werden bis alle Daten aus dem Skript
geladen sind. Da der Rückgabewert in die Instanz „MC_md5“
des Movieclips „MC_md5“ geladen wird, muss diese Funktion
dieser Instanz zugeordnet werden. Dazu ziehen Sie den Clip
auf die Bühne und geben dieser Instanz den Instanznamen
„MC_md5“. Jetzt markieren Sie die Instanz, öffnen das
Aktionen – Fenster und geben folgendes Skript ein:
onClipEvent (data) {
gotoAndStop(10);
}
Dadurch springt der Film ins Bild 10 des Movieclips, sobald
alle Daten geladen wurden.
In diesem Schlüsselbild soll jetzt der Rückgabewert
ausgegeben werden. Das realisieren wir, indem zuerst die
Wiedergabe gestoppt wird und dann dem Textfeld „TF_eingabe“
die Variable zugewiesen wird, die wir aus dem PHP – Skript
erhalten:
stop();
TF_eingabe.text = _root.MC_md5.md5;
Der Zielpfad kommt zustande, weil die Instanz „MC_md5“ auf
der Hauptzeitleiste liegt (_root) und die Variable „md5“ aus
dem Skript in diese Instanz geladen wird. Ihren Namen erhält
die Variable im PHP – Skript.
Jetzt fehlt noch das Skript des Zurück Buttons:
on (release) {
gotoAndPlay(1);
}
Dabei wird beim Loslassen der Schaltfläche ins Bild 1
gesprungen.
Das PHP – Skript
Nun benötigen Sie noch das Skript, das den MD5 – Wert
eigentlich ermittelt. Dazu legen Sie eine PHP – Datei namens
„md5.php“ im gleichen Verzeichnis an.
In diese Datei gehört nun folgendes Skript:
<?php
$eingabe = $HTTP_POST_VARS["eingabe"];
$md5 = md5($eingabe);
echo("&md5=".$md5."&");
?>
Erklärung:
$eingabe = $HTTP_POST_VARS["eingabe"];
Die empfangene Variable „eingabe“ wird aus dem
HTTP_POST_VARS – Array in die Variable „$eingabe“
geschrieben.
$md5 = md5($eingabe);
Der Wert der Variablen „$eingabe“ wird mittels der Funktion
md5() MD5 – codiert und der Variablen „$md5“ zugewiesen.
echo("&md5=".$md5."&");
Die Variable wird ins Standard MIME – Format für
ActionScript gebracht und durch die Funktion echo()
ausgegeben.
Download md5.fla (5KB)
Beispiel
Mailformular
In diesem Beispiel sollen Emails in einem Flash – Formular
geschrieben und durch ein PHP – Skript versendet werden. So
ist kein Standard – Email – Programm notwendig, wie es bei
einem Email – Link genutzt wird.
Die Variablenübergabe wird in diesem Fall über das LoadVars()
– Objekt gelöst.
ansehen
Vorbereitung
Legen Sie die Bühnengröße auf 500x400 Pixel fest, erzeugen
Sie einen neuen Movieclip und nennen Sie diesen „formular_mc“.
In diesem Movieclip werden 2 Ebenen benötigt, eine für
Skripte und eine für Textfelder und Buttons. In beiden
Ebenen erstellen Sie nun noch jeweils ein leeres
Schüsselbild im Bild 1, 10 und 15. In jedem Schlüsselbild
der Ebene Skript soll zunächst die Anweisung stopp() stehen.
Layout
Im Formular sollen Name und Email des Empfängers, Name und
Email des Senders sowie Betreff und die eigentliche
Nachricht eingegeben werden können. Dafür erzeugen Sie im
ersten Schlüsselbild 6 Eingabetextfelder mit folgendem
Skript:
System.useCodepage = true;
this.createTextField('TF_nachricht',1,25,230,450,100);
with(this.TF_nachricht){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = 1;
wordWrap = 1;
autoSize = false;
background = true;
}
this.createTextField('TF_betreff',2,175,170,300,20);
with(this.TF_betreff){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = false;
wordWrap = false;
autoSize = false;
background = true;
}
this.createTextField('TF_senderMail',3,175,140,300,20);
with(this.TF_senderMail){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = false;
wordWrap = false;
autoSize = false;
background = true;
}
this.createTextField('TF_senderName',4,175,110,300,20);
with(this.TF_senderName){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = false;
wordWrap = false;
autoSize = false;
background = true;
}
this.createTextField('TF_empfMail',5,175,80,300,20);
with(this.TF_empfMail){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = false;
wordWrap = false;
autoSize = false;
background = true;
}
this.createTextField('TF_empfName',6,175,50,300,20);
with(this.TF_empfName){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = false;
wordWrap = false;
autoSize = false;
background = true;
}
font1=new TextFormat();
font1.size = 12;
font1.Color = 0x000000;
font1.font = "arial";
TF_nachricht.setNewTextFormat(font1);
TF_betreff.setNewTextFormat(font1);
TF_senderMail.setNewTextFormat(font1);
TF_senderName.setNewTextFormat(font1);
TF_empfMail.setNewTextFormat(font1);
TF_empfName.setNewTextFormat(font1);
Erklärung:
System.useCodepage = true;
Mit diesem Befehl wird die systeminterne Codierung von
Unicode auf Latin-1 umgestellt, sodass z.B. Umlaute
angezeigt werden.
this.createTextField('TF_nachricht',1,25,230,450,100);
Diese Methode erzeugt ein leeres Textfeld mit den Parametern
(instanzname, tiefe, x, y, breite, hoehe). Die anderen
Textfelder müssen eine andere Tiefe haben, da sie sonst
nicht sichtbar sind.
with(this.TF_nachricht){
In dieser with – Anweisung werden die Eigenschaften für das
erzeugte Textfeld „TF_nachricht“ gesetzt.
type = 'input';
Es handelt sich um ein Eingabetextfeld.
border = 1;
Das Textfeld hat einen Rahmen, die 1 steht dabei für true.
borderColor = 0x000000;
Die Rahmenfarbe des Textfeldes ist schwarz (hexadezimal
000000).
multiline = 1;
Es handelt sich um ein mehrzeiliges Textfeld, die 1 steht
hier wieder für true.
wordWrap = 1;
Im Textfeld ist Zeilenumbruch erlaubt.
autoSize = false;
Das Textfeld passt sich in Größe und Ausrichtung nicht
automatisch dem Text im Textfeld an.
background = true;
DasTextfeld hat einen gefüllten Hintergrund.
}
font1=new TextFormat();
„font1“ wird als neue Instanz des TextFormat-Objektes
erzeugt.
font1.size = 12;
font1.Color = 0x000000;
font1.font = "arial";
Die Eigenschaften der neuen Instanz des TextFormat –
Objektes werden gesetzt. So wird die Schriftgröße 12 Pixel,
die Schriftfarbe schwarz und die Schriftart Arial.
TF_nachricht.setNewTextFormat(font1);
Das Textformat „font1“ wird auf das Textfeld „TF_nachricht“
angewendet.
Nachdem die Textfelder erzeugt wurden benötigen Sie für das
erste Schlüsselbild nur noch zwei Schaltflächen,
„Zurücksetzen“ und „Senden“.
Haben Sie diese erzeugt, sollte Ihr Layout der folgenden
Abbildung ähneln.

Layout
des Email – Formulars
Im zweiten Schlüsselbild (Bild 10) soll die Ausgabe des
PHP – Skripts erscheinen. Dazu legen Sie ein dynamisches
Textfeld an und geben im Eigenschafteninspektor als Variable
„_root.erfolg“ an. Die Variable „erfolg“, die vom Skript
zurückgegeben wird, wird dann automatisch ausgegeben.

Eigenschafteninspektor
für dynamisches Textfeld
Außerdem benötigen Sie noch eine Schaltfläche „Zurück“
über die man zurück zum Formular gelangt.
Im dritten Schlüsselbild (Bild 15) soll ein statisches
Textfeld mit dem Inhalt „Bitte alle Felder ausfüllen“
erscheinen. Auch hier kommt die „Zurück“ – Schaltfläche zum
Einsatz und das Layout ist komplett.
 Drittes
Schlüsselbild
Funktion
Die wichtigste Funktion hat wohl der „Senden“ – Button,
deshalb sollten Sie mit dieser beginnen:
on (release) {
lader = new LoadVars();
lader.empfName = TF_empfName.text;
lader.empfMail = TF_empfMail.text;
lader.senderName = TF_senderName.text;
lader.senderMail = TF_senderMail.text;
lader.betreff = TF_betreff.text;
lader.nachricht = TF_nachricht.text;
lader.onLoad = function(geladen){
if(geladen){
_root.erfolg = lader.erfolg;
gotoAndPlay(10);
}
}
if((lader.nachricht != "")&&(lader.betreff != "")&&
(lader.senderMail != "")&&(lader.senderName != "")&&
(lader.empfMail != "")&&(lader.empfName != ""))
{
lader.sendAndLoad( "phpMailer.php" , lader, "POST" );
}
else{
this.TF_nachricht.removeTextField();
this.TF_betreff.removeTextField();
this.TF_senderMail.removeTextField();
this.TF_senderName.removeTextField();
this.TF_empfMail.removeTextField();
this.TF_empfName.removeTextField();
gotoAndStop(15);
}
}
Erklärung:
on (release) {
Wenn der “Senden” – Button losgelassen wird, werden die
folgenden Aktionen ausgeführt.
lader = new LoadVars();
“lader” wird als eine neue Instanz des LoadVars-Objekts
erzeugt.
lader.empfName = TF_empfName.text;
Der Inhalt des Textfeldes „TF_empfName“ wird der Variablen „empfName“
der Instanz „lader“ zugewiesen.
lader.onLoad=function(geladen){
Die Ereignisprozedur onLoad des LoadVars() – Objekts wird
aufgerufen, wenn der sendAndLoad – Vorgang abgeschlossen
ist. Die Anweisungen in dieser Ereignisprozedur werden also
nur ausgeführt wenn die Antwort des serverseitigen Skripts
geladen ist. Der Parameter „geladen“ gibt an ob die
Ladeoperation erfolgreich war. Ist das der Fall, dann ist
die Variable „geladen“ gleich true.
if(geladen){
Die folgenden Anweisungen werden ausgeführt, wenn die
Ladeoperation erfolgreich war.
_root.erfolg = lader.erfolg;
Die empfangene Variable „erfolg“ wird aus der Instanz „lader“
gelesen und der Variablen „_root.erfolg“ zugewiesen.
gotoAndPlay(10);
Der Film springt ins Bild 10, in dem die Variable „erfolg“
in einem dynamischen Textfeld ausgegeben wird.
}
}
if((lader.nachricht != "")&&(lader.betreff != "")&&
(lader.senderMail != "")&&(lader.senderName
!= "")&&
(lader.empfMail != "")&&(lader.empfName
!= "")){
Wenn alle Variablen die geladen werden sollen nicht leer ( "
" ) sind, dass heißt wenn alle Felder ausgefüllt wurden,
dann wird die folgende Aktion ausgeführt.
lader.sendAndLoad("phpMailer.php",lader,"POST");
Die Variablen der Instanz „lader“ werden an die PHP-Datei „phpMailer.php“
mittels der Methode POST gesendet. Die vom PHP-Skript
empfangenen Variablen werden in das Zielobjekt „lader“
gestellt .
}
else{
Die folgenden Aktionen werden ausgeführt, wenn die Bedingung
der if – Anweisung nicht zutrifft, also nicht alle Felder
ausgefüllt waren.
this.TF_nachricht.removeTextField();
Das Textfeld „TF_nachricht“, und alle anderen Textfelder
werden entfernt. Diese Methode kann nur bei dynamisch
erzeugten Textfeldern angewendet werden.
gotoAndStop(15);
Der Film springt ins Bild 15, wo das Textfeld „Bitte alle
Felder ausfüllen“ zu sehen ist.
}
}
Die Hauptfunktion wäre damit geschafft, was jetzt noch fehlt
sind Kleinigkeiten wie zum Beispiel der Button
„Zurücksetzten“:
on (release) {
TF_empfName.text = "";
TF_empfMail.text = "";
TF_senderName.text = "";
TF_senderMail.text = "";
TF_betreff.text = "";
TF_nachricht.text = "";
}
Damit wird einfach der Inhalt aller Textfelder gelöscht.
Der „Zurück“ – Button hat im Bild 10 und im Bild 15 das
gleiche Skript:
on (release) {
gotoAndStop(1);
}
Der Film springt in Bild 1 und es ist wieder das Email –
Formular zu sehen.
Jetzt fehlt nur noch ein Skript im zweiten Schlüsselbild,
wodurch die Textfelder des ersten Schlüsselbildes entfernt
werden, da diese sonst den eigentlichen Inhalt verdecken:
this.TF_nachricht.removeTextField();
this.TF_betreff.removeTextField();
this.TF_senderMail.removeTextField();
this.TF_senderName.removeTextField();
this.TF_empfMail.removeTextField();
this.TF_empfName.removeTextField();
Und damit ist der Flash – Anteil des Email – Formulars
erledigt.
Das PHP – Skript
Für das Versenden von Emails gibt es in PHP eine einfache
Funktion:
mail(string to, string subject, string
message [, string
additional_headers])
Für diese Funktion muss serverseitig oder eben auch in der
Entwicklungsumgebung ein Mailserver vorhanden sein.
Aus diesem Grund verwenden wir die vorgefertigte Klasse „class.phpmailer.php“,
durch die die Möglichkeit besteht, den Mailserver explizit
festzulegen und außerdem werden die Email – Adressen gleich
noch auf ihre Richtigkeit geprüft. Die notwendigen Dateien
kann man unter http://phpmailer.sourceforge.net/
herunterladen.
Man benötigt die Klassen „class.phpmailer.php“ und „class.smtp.php“,
die im selben Verzeichnis liegen müssen wie folgendes
Skript, welches nach Belieben verändert werden kann:
<?php
require("class.phpmailer.php");
//Hier wird die PHP – Datei „class.phpmailer.php“
eingebunden.
$mail = new PHPMailer();
//Jetzt werden die empfangenen Variablen aus dem
HTTP_POST_VARS –
//Array geholt:
$empfName = $HTTP_POST_VARS['empfName'];
$empfMail = $HTTP_POST_VARS['empfMail'];
$senderName = $HTTP_POST_VARS['senderName'];
$senderMail = $HTTP_POST_VARS['senderMail'];
$betreff = $HTTP_POST_VARS['betreff'];
$nachricht = $HTTP_POST_VARS['nachricht'];
$mail->IsSMTP(); // über SMTP senden
$mail->Host = "mail.htwm.de"; // SMTP Server
$mail->SMTPAuth = true; // SMTP Authentifizierung aktivieren
$mail->Username = "sschoene"; // SMTP username
$mail->Password = "************"; // SMTP password
//Email – Header aus den empfangenen Variablen
zusammenbasteln:
$mail->From = "sschoene@htwm.de";
$mail->FromName = $senderName;
$mail->AddAddress($empfMail,$empfName);
$mail->AddReplyTo($senderMail,$senderName);
$mail->WordWrap = 50; // Anzahl Zeilenumbrüche
$mail->IsHTML(true); // als HTML senden
//Betreff, Body und alternativen Body definieren:
$mail->Subject = $betreff;
$mail->Body = $senderName." ( ".$senderMail." ) schrieb:
".$nachricht;
$mail->AltBody = $senderName." ( ".$senderMail." ) schrieb:
".$nachricht;
if(!$mail->Send()) //Wenn die Mail nicht versendet wurde:
{
//Ergebnis im MIME-Inhaltstyp application/x-www-form-urlencoded
formatieren //und mittels Funktion echo() ausgeben:
$a = "Senden fehlgeschlagen.";
echo ("&erfolg=".$a."&");
//Programm an dieser Stelle abbrechen:
exit;
}
//Ergebnis im MIME-Inhaltstyp application/x-www-form-urlencoded
formatieren //und mittels Funktion echo() ausgeben:
$a = "Nachricht wurde gesendet.";
echo ("&erfolg=".$a."&");
?>
Bei der SMTP – Authentifizierung sollten Sie natürlich die
Daten (Postausgangsserver, Nutzername, Passwort) Ihres
gewählten Mailservers angeben.
Damit ist das Mailformular voll funktionsfähig und kann
überall ausgeführt werden, vorausgesetzt, die Klassen „class.phpmailer.php“
und „class.smtp.php“ liegen im selben Verzeichnis und ein
PHP – Webserver ist vorhanden.
Download flashmail.fla (23KB)
Beispiel
Gästebuch Das letzte Beispiel in diesem Kapitel
ist etwas umfangreicher. Es soll ein Flash – Gästebuch
erstellt werden, das mittels PHP mit einer MySQL – Datenbank
kommuniziert.
ansehen
Vorbereitungen
Legen Sie die Bühnengröße wieder auf 500 x 400 Pixel fest
und erzeugen Sie einen neuen Movieclip namens „gaestebuch“.
In diesen Movieclip erzeugen Sie nun drei Ebenen, eine für
Skripte, eine für Textfelder und Buttons und wahlweise noch
eine für den Hintergrund. In den Ebenen für Skripte und
Textfelder benötigen wir sieben Schlüsselbilder, legen Sie
also in beiden Ebenen in den Bildern 1, 5, 10, 15, 20, 25
und 30 jeweils ein Schlüsselbild an. Die Ebene für den
Hintergrund verlängern Sie einfach auf 30 Bilder.
In jedem Schlüsselbild der Ebene „Skripte“ fügen Sie nun
noch die Anweisung stop(); hinzu, um die Wiedergabe des
Filmes in den Schlüsselbildern zu stoppen.
Die Datenbank
Als Datenbank verwenden wir MySQL, und administrieren diese
mit phpMyAdmin.
Legen Sie also im phpMyAdmin eine neue Datenbank namens „gaestebuch_db“
an.
Als nächstes legen Sie eine neue Tabelle mit sechs Feldern
an und nennen diese „tbl_gaeste“. In dieser Tabelle sollen
alle Daten eines Gästebucheintrags gespeichert werden. Sie
benötigen jeweils ein Feld für Name, Ort, Nachricht, Datum
und Uhrzeit, und die Emailadresse des Gastes. Das
verbleibende Feld ist für eine Gäste – ID bestimmt, mit der
jeder Eintrag eindeutig identifiziert werden kann. Die
Felder dieser Tabelle definieren Sie wie in der folgenden Abbildung.
Achten Sie darauf die Gäste – ID als Primary – Key
festzulegen.

Struktur
der Tabelle „tbl_gaeste“
Eine zweite Tabelle soll Name und Passwort
administrationsberechtigter Nutzer enthalten. Legen Sie also
noch eine Tabelle mit zwei Feldern an und nennen Sie diese „tbl_admin“.
In diesem Fall muss der Name des Administrators Primary –
Key sein. Definieren Sie die Felder der Tabelle wie in der
nächsten Abbildung.

Struktur
der Tabelle „tbl_admin“
Sie können auch folgende SQL – Befehle eingeben, um die
beiden Tabellen zu erzeugen:
Tabellenstruktur für Tabelle „tbl_gaeste“:
CREATE TABLE `tbl_gaeste` (
`gaeste_id` int(10) unsigned NOT NULL default '0',
`name` tinytext NOT NULL,
`ort` tinytext,
`nachricht` text NOT NULL,
`datum` datetime NOT NULL default '0000-00-00 00:00:00',
`email` tinytext,
PRIMARY KEY (`gaeste_id`)
) TYPE=MyISAM;
Tabellenstruktur für Tabelle „tbl_admin“:
CREATE TABLE `tbl_admin` (
`admin_name` varchar(150) NOT NULL default '',
`admin_pw` varchar(150) NOT NULL default '',
PRIMARY KEY (`admin_name`)
) TYPE=MyISAM;
Geben Sie nun noch zwei oder drei beliebige Testeinträge in
die Tabelle “tbl_gaeste” ein, damit Sie die Anwendung auch
während der Entwicklung schon testen können. Die Gäste – ID
sollte bei 1 beginnen und fortlaufend aufsteigend sein.
Später werden die Einträge natürlich über die Flash –
Oberfläche vorgenommen.
Die Tabelle „tbl_admin“ muss allerdings generell über
phpMyAdmin gefüllt werden. Geben Sie hier wenigstens einen
Nutzernamen und das dazugehörige, MD5 – codierte Passwort
ein. Zum Codieren des Passwortes eignet sich am Besten der
im ersten Beispiel erstellte MD5 – Codierer.
Layout
Legen Sie als Erstes einen Hintergrund im ersten
Schlüsselbild der dafür vorgesehenen Ebene „Hintergrund“ an.
Man kann zum Beispiel das linke Drittel der Oberfläche
farblich hinterlegen, um diese zu strukturieren.
Erstes Schlüsselbild
Beginnen wir nun mit dem ersten Schlüsselbild. In diesem
Bild soll der aktuellste Gästebucheintrag zu sehen sein und
es soll die Möglichkeit bestehen die Einträge
durchzublättern.
Sie benötigen also fünf dynamische Textfelder, die Sie mit
dem Textwerkzeug erstellen können. Ordnen Sie die Textfelder
untereinander an und benennen Sie diese „TF_eintrag_anzeige“,
„TF_datum_anzeige“, „TF_name_anzeige“, „TF_nachricht“ und „TF_email_anzeige“.
Geben Sie im Eigenschafteninspektor für jedes Textfeld die
Variable an, die darin ausgegeben werden soll. Zum Beispiel
im Textfeld „TF_eintrag_anzeige“ die Variable „root.eintrag_anzeige“.

Eigenschafteninspektor
für dynamisches Textfeld „TF_eintrag_anzeige“
Für die anderen Textfelder fügen sie entsprechend des
Instanznamens die Variablen „root.datum_anzeige“, „root.name_anzeige“,
„root.nachricht“ und „root.email_anzeige“ hinzu.
Gestalten Sie nun die Schaltflächen für das erste
Schlüsselbild. Es werden Buttons zum Weiterblättern und
Zurückblättern und zum Auf – und Abscrollen im Textfeld „TF_nachricht“
benötigt. Dazu kommen noch die Schaltflächen „neuer Eintrag“
und „admin“. Diese sechs Buttons ordnen Sie nun auf der
Bühne an, sodass Ihr Layout fürs erste Schlüsselbild der
folgenden Abbildung ähnelt.
 Layout
des ersten Schlüsselbildes in der Entwicklungsumgebung
Zweites Schlüsselbild
Im zweiten Schlüsselbild (Bild 5) soll die Oberfläche zum
Eintragen von Kommentaren ins Gästebuch entstehen. Es werden
Eingabetextfelder für Name, Herkunft, Email und Kommentar
benötigt, die wir dieses Mal durch ein Skript erzeugen,
welches dem zweiten Schlüsselbild der Ebene Skript
zugeordnet ist:
this.createTextField('TF_eingabe_name',1,225,50,250,20);
with(this.TF_eingabe_name){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = false;
wordWrap = false;
autoSize = false;
background = true;
}
this.createTextField('TF_eingabe_ort',2,225,90,250,20);
with(this.TF_eingabe_ort){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = false;
wordWrap = false;
autoSize = false;
background = true;
}
this.createTextField('TF_eingabe_email',3,225,130,250,20);
with(this.TF_eingabe_email){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = false;
wordWrap = false;
autoSize = false;
background = true;
}
this.createTextField('TF_eingabe_kommentar',4,150,200,325,100);
with(this.TF_eingabe_kommentar){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = true;
wordWrap = true;
autoSize = false;
background = true;
}
font1 = new TextFormat();
font1.size = 12;
font1.Color = 0x000000;
font1.font = "arial";
TF_eingabe_name.setNewTextFormat(font1);
TF_eingabe_ort.setNewTextFormat(font1);
TF_eingabe_email.setNewTextFormat(font1);
TF_eingabe_kommentar.setNewTextFormat(font1);
Erklärung:
this.createTextField('TF_eingabe_name',1,225,50,250,20);
Diese Methode erzeugt ein leeres Textfeld mit den Parametern
(instanzname, tiefe, x, y, breite, hoehe). Die anderen
Textfelder müssen eine andere Tiefe haben, da sie sonst
nicht sichtbar sind.
with(this.TF_eingabe_name){
In dieser with – Anweisung werden die Eigenschaften für das
erzeugte Textfeld „TF_eingabe_name“ gesetzt.
type='input’;
Es handelt sich um ein Eingabetextfeld.
border=1;
Das Textfeld hat einen Rahmen, die 1 steht dabei für true.
borderColor=0x000000;
Die Rahmenfarbe des Textfeldes ist schwarz (hexadezimal
000000).
multiline=false;
Es handelt sich um ein einzeiliges Textfeld.
wordWrap=false;
Im Textfeld ist kein Zeilenumbruch erlaubt.
autoSize=false;
Das Textfeld passt sich in Größe und Ausrichtung nicht
automatisch dem Text im Textfeld an.
background=true;
DasTextfeld hat einen gefüllten Hintergrund.
}
font1 = new TextFormat();
„font1“ wird als neue Instanz des TextFormat-Objektes
erzeugt.
font1.size = 12;
font1.Color = 0x000000;
font1.font = "arial";
Die Eigenschaften der neuen Instanz des TextFormat –
Objektes werden gesetzt. So wird die Schriftgröße 12 Pixel,
die Schriftfarbe schwarz und die Schriftart Arial.
TF_eingabe_name.setNewTextFormat(font1);
Das Textformat „font1“ wird auf das Textfeld „TF_eingabe_name“
angewendet.
Des Weiteren benötigen Sie in diesem Schlüsselbild drei neue
Schaltflächen, „eintragen“, „zurücksetzen“ und „zurück zum
Gästebuch“. Die Buttons zum Scrollen eines Textfeldes finden
am Textfeld „TF_eingabe_kommentar“ erneut Verwendung.
Letztendlich sollte Ihr Layout für das zweite Schlüsselbild
der folgenden Abbildung ähneln:

Layout
im zweiten Schlüsselbild
Drittes Schlüsselbild
Im dritten Schlüsselbild soll die Ausgabe „Bitte alle Felder
ausfüllen“ erscheinen. Dazu legen Sie ein statisches
Textfeld mit diesem Text an und erzeugen eine Schaltfläche
„zurück“, über die man später wieder das Formular erreicht.

Layout
des dritten Schlüsselbildes.
Viertes Schlüsselbild
Im vierten Schlüsselbild erscheint die Login – Aufforderung
für den Administrator. Dazu erzeugen Sie wieder zwei
Eingabetextfelder mit folgendem Skript:
this.createTextField('TF_admin_name',1,230,75,245,20);
with(this.TF_admin_name){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = false;
wordWrap = false;
autoSize = false;
background = true;
}
this.createTextField('TF_admin_pw',2,230,125,245,20);
with(this.TF_admin_pw){
type = 'input';
border = 1;
borderColor = 0x000000;
multiline = false;
wordWrap = false;
autoSize = false;
password = true;
background = true;
}
font1 = new TextFormat();
font1.size = 12;
font1.Color = 0x000000;
font1.font = "arial";
TF_admin_name.setNewTextFormat(font1);
TF_admin_pw.setNewTextFormat(font1);
Dieses Skript funktioniert ebenso wie das aus dem zweiten
Schlüsselbild, mit dem Unterschied, dass das zweite Textfeld
zusätzlich die Eigenschaft password=true besitzt, wodurch
der eingegebene Inhalt durch Sternchen (*) dargestellt wird.
Erstellen Sie nun noch eine neue Schaltfläche mit der
Aufschrift „login“ und positionieren Sie diese und die
Schaltfläche „zurück zum Gästebuch“ auf der Bühne.

Layout
des vierten Schlüsselbildes
Fünftes Schlüsselbild
Für das fünfte Schlüsselbild kopieren Sie den Inhalt des
ersten Schlüsselbildes und ersetzten die Schaltflächen
„neuer Eintrag“ und „admin“ durch die Schaltflächen „Eintrag
löschen“ und „zurück zum Gästebuch“.

Layout
des fünften Schlüsselbildes in der Entwicklungsumgebung
Sechstes Schlüsselbild
In das sechste Schlüsselbild kopieren sie den Inhalt des
dritten Schlüsselbildes. Hier soll ebenfalls die Ausgabe
„Bitte alle Felder ausfüllen“ erscheinen, das Skript des
Zurück – Buttons wird aber anders sein.
Siebtes Schlüsselbild
Im siebten und letzten Schlüsselbild erscheinet die Ausgabe
„Kein Eintrag vorhanden“. Legen sie dazu ein statisches
Textfeld mit diesem Inhalt an und positionieren Sie die
Schaltfläche „neuer Eintrag“ am linken Bühnenrand.

Layout
des siebten Schlüsselbildes
Damit wäre das Layout des Gästebuches fertig und wir können
zur Funktion übergehen.
Funktion
Erstes Schlüsselbild
Beginnen wir hier mit dem Skript im ersten Schlüsselbild der
Ebene „Skript“:
System.useCodepage = true;
lader = new LoadVars();
lader.onLoad = function(geladen){
if(geladen)
{
_root.datum = lader.datum;
_root.zeit = lader.zeit;
_root.name = lader.name;
_root.ort = lader.ort;
_root.email = lader.email;
_root.nachricht = lader.nachricht;
_root.elemente = lader.elemente;
_root.leer = lader.leer;
_root.eintrag_anzeige = "Eintrag " + anzeigen + " / " +
_root.elemente;
_root.datum_anzeige = _root.datum + " , " + _root.zeit + "
Uhr";
_root.name_anzeige = _root.name + " aus " + _root.ort + "
schrieb:";
_root.email_anzeige = "Email: " + _root.email;
if(_root.leer == "ok")
{
gotoAndPlay(30);
}
}
}
anzeigen = 1;
lader.anzeigen = anzeigen;
lader.sendAndLoad("gb.php",lader,"POST");
Erklärung:
System.useCodepage = true;
Diese Anweisung stellt die systeminterne Codierung von
Unicode auf Latin-1 um, sodass z.B. Umlaute angezeigt
werden.
lader = new LoadVars();
“lader” ist eine neue Instanz des LoadVars-Objekts.
lader.onLoad = function(geladen){
Die Ereignisprozedur „onLoad“ wird aufgerufen, wenn der
sendAndLoad – Vorgang abgeschlossen ist. Der Parameter
geladen gibt an ob die Ladeoperation erfolgreich war
(geladen = true) und wird vom Server zurückgegeben.
if(geladen)
{
Wenn die Ladeoperation erfolgreich war, also der Parameter
geladen == true ist, dann werden die Anweisungen in dieser
If – Anweisung ausgeführt.
Die vom Server empfangenen und in die Instanz „lader“ der
loadVars() – Objekts geladenen Variablen werden internen
Variablen zugewiesen:
_root.datum = lader.datum;
_root.zeit = lader.zeit;
_root.name = lader.name;
_root.ort = lader.ort;
_root.email = lader.email;
_root.nachricht = lader.nachricht;
_root.elemente = lader.elemente;
_root.leer = lader.leer;
Die Variablen die dann in den dynamischen Textfeldern
ausgegeben werden, werden aus den empfangenen Variablen
zusammengesetzt und formatiert:
_root.eintrag_anzeige = "Eintrag " + anzeigen + " / " +
_root.elemente;
_root.datum_anzeige = _root.datum + " , " + _root.zeit + "
Uhr";
_root.name_anzeige = _root.name + " aus " + _root.ort + "
schrieb
_root.email_anzeige = "Email: " + _root.email;
if(_root.leer == "ok")
{
Die Variable „leer“ wird vom PHP – Skript definiert. Hat
diese den Inhalt “ok”, sind keine Einträge im Gästebuch
vorhanden. In dem Fall wird durch diese If – Anweisung ins
Bild 30 gesprungen.
gotoAndPlay(30);
}
}
}
anzeigen = 1;
lader.anzeigen = anzeigen;
Die Variable „anzeigen“ wird auf 1 gesetzt und der Instanz
„lader“ des LoadVars-Objekts zugewiesen.
lader.sendAndLoad("gb.php",lader,"POST");
Diese Methode sendet die Variablen der Instanz „lader“ an
die PHP-Datei „gb.php“ mittels der Methode POST. Die vom PHP
– Skript empfangenen Variablen werden in das Zielobjekt
„lader“ gestellt.
Die Variable „anzeigen“ gibt an welcher Eintrag angezeigt
werden soll. Im letzten Skript war anzeigen = 1, womit
generell der aktuellste Eintrag angezeigt wird. Kommen wir
nun also zu Durchblättern, muss die Variable „anzeigen“
verändert werden. Beim Weiterblättern wird „anzeigen“ um 1
größer und beim Zurückblättern wieder um 1 kleiner.
Betrachten wir zuerst das Skript der Weiter – Buttons:
on(release)
{
if(anzeigen<_root.elemente)
{
anzeigen = anzeigen+1;
lader = new LoadVars();
lader.anzeigen = anzeigen;
lader.onLoad = function(geladen){
if(geladen)
{
_root.datum = lader.datum;
_root.zeit = lader.zeit;
_root.name = lader.name;
_root.ort = lader.ort;
_root.email = lader.email;
_root.nachricht = lader.nachricht;
_root.elemente = lader.elemente;
_root.eintrag_anzeige = "Eintrag " + anzeigen + " / "
+ _root.elemente;
_root.datum_anzeige = _root.datum + " , " +
_root.zeit + " Uhr";
_root.name_anzeige = _root.name + " aus " + _root.ort
+ " schrieb:";
_root.email_anzeige = "Email: " + _root.email;
}
}
lader.sendAndLoad("gb.php",lader,"POST");
}
}
Erklärung:
if(anzeigen<_root.elemente){
anzeigen = anzeigen+1;
In einer If – Anweisung wird geprüft ob die Variable
„anzeigen“ kleiner ist als die Variable „elemente“. Die
Variable „elemente“ wird vom PHP – Skript zurückgegeben und
sie gibt an wie viele Datensätze in der Datenbank enthalten
sind. Durch die If – Anweisung wird also ermittelt ob noch
weitergeblättert werden kann. Trifft die Bedingung zu, wird
die Variable „anzeigen“ um eins erhöht und das Skript zum
Anzeigen des aktuellen Eintrags ausgeführt.
Das Skript des Zurück – Buttons unterscheidet sich nur im
Detail:
if(anzeigen>1){
anzeigen = anzeigen-1;
Da die Variable „anzeigen“ nicht kleiner als eins werden
darf, muss die Bedingung der If – Anweisung prüfen on
„anzeigen“ größer eins ist, sonst kann nicht
zurückgeblättert werden. Trifft die Bedingung zu, wird
„anzeigen“ um eins verringert und das Skript zum Anzeigen
dieses Eintrags ausgeführt.
Trifft die Bedingung in der If – Anweisungen beider Buttons
nicht zu, wird keine Anweisung ausgeführt, dass heißt es
tritt keine Veränderung ein.
Wenden wir uns nun der Funktion der Scroll – Buttons für das
Textfeld „TF_nachricht“ zu. Um nach unten zu scrollen,
weisen Sie dem entsprechenden Button folgende Zeilen zu:
on (release) {
TF_nachricht.scroll = TF_nachricht.scroll + 1;
}
Die Schaltfläche zum aufwärts Scrollen bekommt dieses
Skript:
on (release) {
TF_nachricht.scroll = TF_nachricht.scroll – 1;
}
Erklärung:
TF_nachricht.scroll ist die Eigenschaft des Textfeldes
welche die vertikale Position des Textes im Bezug auf das
Textfeld beschreibt. Erhöht man diese Position um eins,
scrollt der Text nach unten, verringert man die Position um
eins, scrollt der Text wieder nach oben.
Jetzt fehlen noch die Funktionen der Buttons „neuer Eintrag“
und „admin“. Beide verweisen einfach auf ein anderes
Schlüsselbild, in dem dann das Formular für den neuen
Eintrag bzw. der Administrator – Login angezeigt wird. Sie
benötigen also folgende Skripte:
Schaltfläche „admin“:
on (release) {
gotoAndPlay(15);
}
Schaltfläche „neuer Eintrag“:
on(release)
{
gotoAndPlay(5);
}
Zweites Schlüsselbild
In diesem Schlüsselbild soll dem Gästebuch ein neuer Eintrag
hinzugefügt werden. Die wichtigste Funktion übernimmt dabei
der „eintragen“ – Button:
on (release) {
lader = new LoadVars();
lader.name = TF_eingabe_name.text;
lader.ort = TF_eingabe_ort.text;
lader.email = TF_eingabe_email.text;
lader.kommentar = TF_eingabe_kommentar.text;
lader.onLoad = function(geladen){
if(geladen){
TF_eingabe_name.removeTextField();
TF_eingabe_ort.removeTextField();
TF_eingabe_email.removeTextField();
TF_eingabe_kommentar.removeTextField();
gotoAndPlay(1);
}
}
if((lader.name!="")&&(lader.ort!="")&&(lader.email!="")&&(
lader.kommentar!=""))
{
lader.sendAndLoad("gb_eintragen.php",lader,"POST");
}
else{
TF_eingabe_name.removeTextField();
TF_eingabe_ort.removeTextField();
TF_eingabe_email.removeTextField();
TF_eingabe_kommentar.removeTextField();
gotoAndStop(10);
}
}
Erklärung:
on (release) {
lader = new LoadVars();
lader.name = TF_eingabe_name.text;
lader.ort = TF_eingabe_ort.text;
lader.email = TF_eingabe_email.text;
lader.kommentar = TF_eingabe_kommentar.text;
Es wird eine neue Instanz des LoadVars() – Objekts erzeugt
und der Inhalt der Textfelder in die Variablen dieser
Instanz geschrieben.
lader.onLoad=function(geladen){
if(geladen){
TF_eingabe_name.removeTextField();
TF_eingabe_ort.removeTextField();
TF_eingabe_email.removeTextField();
TF_eingabe_kommentar.removeTextField();
gotoAndPlay(1);
Wenn die Ladeoperation erfolgreich beendet wurde, werden die
dynamisch erzeugten Textfelder wieder entfernt und der Film
springt ins Bild 1, wo der aktuellste Eintrag angezeigt
wird.
}
}
if((lader.name!="")&&(lader.ort!="")&&(lader.email!="")&&(lader.kommentar!=""))
{
lader.sendAndLoad("gb_eintragen.php",lader,"POST");
Wenn alle Textfelder ausgefüllt wurden, werden die Variablen
des LoadVars() – Objekts an das PHP – Skript
„gb_eintragen.php“ gesendet. Die Antwort des Servers wird in
das Zielobjekt „lader“ geladen.
}
else{
TF_eingabe_name.removeTextField();
TF_eingabe_ort.removeTextField();
TF_eingabe_email.removeTextField();
TF_eingabe_kommentar.removeTextField();
gotoAndStop(10);
Wurden nicht alle Textfelder ausgefüllt, werden die
dynamisch erzeugten Textfelder wieder entfernt und er Film
springt ins Bild 10, wo die Fehlermeldung „Bitte alle Felder
ausfüllen“ angezeigt wird
}
}
Durch den Button „zurücksetzen“ soll der Inhalt aller
Textfelder gelöscht werden, und das funktioniert
folgendermaßen:
on (release) {
TF_eingabe_name.text = "";
TF_eingabe_ort.text = "";
TF_eingabe_email.text = "";
TF_eingabe_kommentar.text = "";
}
Die Schaltflächen zum Scrollen eines Textfeldes
funktionieren ebenso wie im vorhergehenden Schlüsselbild,
mit dem Unterschied, das das Textfeld dieses Mal
„TF_eingabe_kommentar“ heißt.
Beim Button „zurück zum Gästebuch“ ist zu beachten, dass
hier die dynamisch erzeugten Textfelder entfernt werden
müssen, bevor ins erste Schlüsselbild gesprungen wird. Das
Skript dieser Schaltfläche würde dann folgendermaßen
aussehen:
on (release) {
TF_eingabe_name.removeTextField();
TF_eingabe_ort.removeTextField();
TF_eingabe_email.removeTextField();
TF_eingabe_kommentar.removeTextField();
gotoAndStop(1);
}
Drittes Schlüsselbild
Im dritten Schlüsselbild ist bei den Funktionen lediglich an
den „zurück“ – Button zu denken, der mit folgendem Skript
belegt werden soll:
on (release) {
gotoAndStop(5);
}
Gehen wir also über zum Administrator – Login im vierten
Schlüsselbild.
Viertes Schlüsselbild
Die wichtigste Funktion liegt in diesem Bild beim „login“ –
Button dessen Skript Ihnen größtenteils bekannt vorkommen
sollte:
on (release) {
lader=new LoadVars();
lader.admin_name = TF_admin_name.text;
lader.admin_pw = TF_admin_pw.text;
lader.onLoad = function(geladen){
if(geladen){
_root.berechtigt = lader.berechtigt;
if(_root.berechtigt=="ja")
{
TF_admin_name.removeTextField();
TF_admin_pw.removeTextField();
gotoAndStop(20);
}
else {
TF_admin_name.text = "";
TF_admin_pw.text = "";
}
}
}
if((lader.admin_name!="")&&(lader.admin_pw!=""))
{
lader.sendAndLoad("gb_admin.php",lader,"POST");
}
else {
TF_admin_name.removeTextField();
TF_admin_pw.removeTextField();
gotoAndPlay(25);
}
}
Erklärung:
Es wird wieder eine neue Instanz des LoadVars() – Objekts
erzeugt und der Inhalt der Textfelder in die Variablen
dieser Instanz geladen. Sind alle Felder ausgefüllt worden,
werden diese Variablen an das serverseitige Skript
„gb_admin.php“ gesendet. Sollten nicht alle Felder
ausgefüllt worden sein, werden die Textfelder gelöscht und
der Film springt ins Bild 25, wo die Fehlermeldung „Bitte
alle Felder ausfüllen“ ausgegeben wird.
Wenn die Ladeoperation erfolgreich war, wird in einer If –
Anweisung geprüft, ob die geladene Variable „berechtigt“
gleich „ja“ ist. Ist das der Fall, werden die Textfelder
gelöscht und der Film springt ins Bild 20, wo dann die
Möglichkeit besteht Einträge zu löschen.
Ist der Nutzer nicht berechtigt, wird nur der Inhalt der
Textfelder gelöscht und der Nutzer kann sich erneut
einloggen.
Ob der Nutzer berechtigt ist, dass heißt Nutzername und
Passwort richtig sind, wird im PHP – Skript ermittelt.
Der zweite Button in diesem Schlüsselbild, „zurück zum
Gästebuch“ wäre mit folgender Funktion zu belegen:
on (release) {
TF_admin_name.removeTextField();
TF_admin_pw.removeTextField();
gotoAndStop(1);
}
Dadurch werden die Textfelder entfernt, und der Film springt
ins Bild 1.
Fünftes Schlüsselbild
Das fünfte Schlüsselbild ähnelt in seiner Funktion stark dem
ersten.
Durch das folgende Skript wird bei Aufruf dieses Bildes der
aktuellste Eintrag angezeigt:
anzeigen = 1;
lader = new LoadVars();
lader.anzeigen = anzeigen;
lader.onLoad = function(geladen){
if(geladen)
{
_root.datum = lader.datum;
_root.zeit = lader.zeit;
_root.name = lader.name;
_root.ort = lader.ort;
_root.email = lader.email;
_root.nachricht = lader.nachricht;
_root.elemente = lader.elemente;
_root.gaeste_id = lader.gaeste_id;
_root.eintrag_anzeige = "Eintrag " + anzeigen + " / "
+ _root.elemente;
_root.datum_anzeige = _root.datum + " , " +
_root.zeit + " Uhr";
_root.name_anzeige = _root.name + " aus " + _root.ort
+ " schrieb:";
_root.email_anzeige = "Email: " + _root.email;
}
}
lader.sendAndLoad("gb.php",lader,"POST");
Dieses Skript funktioniert wie das des ersten
Schlüsselbildes, es wird nur zusätzlich noch die Variable
„gaeste_id“ aus dem PHP – Skript geladen.
Auch die Skripte zum Weiter – und Zurückblättern sind die
gleichen wie im ersten Schlüsselbild, mit dem Unterschied,
das zusätzlich die Gäste – ID aus dem PHP – Skript
übertragen wird.
Skript des „weiter“ – Buttons:
on(release)
{
if(anzeigen<_root.elemente)
{
anzeigen = anzeigen+1;
lader = new LoadVars();
lader.anzeigen = anzeigen;
lader.onLoad = function(geladen){
if(geladen)
{
_root.datum = lader.datum;
_root.zeit = lader.zeit;
_root.name = lader.name;
_root.ort = lader.ort;
_root.email = lader.email;
_root.nachricht = lader.nachricht;
_root.elemente = lader.elemente;
_root.gaeste_id = lader.gaeste_id;
_root.eintrag_anzeige = "Eintrag " + anzeigen +
" / " + _root.elemente;
_root.datum_anzeige = _root.datum + " , " +
_root.zeit + " Uhr";
_root.name_anzeige = _root.name + " aus " +
_root.ort + " schrieb:";
_root.email_anzeige = "Email: " + _root.email;
}
}
lader.sendAndLoad("gb.php",lader,"POST");
}
}
Skript der „zurück“ – Buttons:
on(release)
{
if(anzeigen>1)
{
anzeigen = anzeigen-1;
lader = new LoadVars();
lader.anzeigen = anzeigen;
lader.onLoad = function(geladen){
if(geladen)
{
_root.datum = lader.datum;
_root.zeit = lader.zeit;
_root.name = lader.name;
_root.ort = lader.ort;
_root.email = lader.email;
_root.nachricht = lader.nachricht;
_root.elemente = lader.elemente;
_root.gaeste_id = lader.gaeste_id;
_root.eintrag_anzeige = "Eintrag " + anzeigen +
" / " + _root.elemente;
_root.datum_anzeige = _root.datum + " , " +
_root.zeit + " Uhr";
_root.name_anzeige = _root.name + " aus " +
_root.ort + " schrieb:";
_root.email_anzeige = "Email: " + _root.email;
}
}
lader.sendAndLoad("gb.php",lader,"POST");
}
}
Die Funktionen der Buttons zum Scrollen und des Button
„zurück zum Gästebuch“ können auch aus den vorhergehenden
Schlüsselbildern übernommen werden.
Bleibt als wichtigste Funktion noch das Skript der
Schaltfläche „Eintrag löschen“:
on(release)
{
anzeigen = 1;
lader = new LoadVars();
lader.anzeigen = anzeigen;
lader.gaeste_id = _root.gaeste_id;
lader.onLoad = function(geladen){
if(geladen)
{
_root.datum = lader.datum;
_root.zeit = lader.zeit;
_root.name = lader.name;
_root.ort = lader.ort;
_root.email = lader.email;
_root.nachricht = lader.nachricht;
_root.elemente = lader.elemente;
_root.gaeste_id = lader.gaeste_id;
_root.leer = lader.leer;
_root.eintrag_anzeige = "Eintrag " + anzeigen +
" / " + _root.elemente;
_root.datum_anzeige = _root.datum + " , " +
_root.zeit + " Uhr";
_root.name_anzeige = _root.name + " aus " +
_root.ort + " schrieb:";
_root.email_anzeige = "Email: " + _root.email;
if(_root.leer == "ok")
{
gotoAndPlay(30);
}
}
}
lader.sendAndLoad("gb_loeschen.php",lader,"POST");
}
Erklärung:
In diesem Skript werden die Variablen „anzeigen“ und
„gaeste_id“ der Instanz „lader“ hinzugefügt und an die Datei
„gb_loeschen.php“ übertragen. Wenn die Variablen erfolgreich
geladen wurden, werden die empfangenen Variablen aus der
Instanz „lader“ gelesen und ausgegeben. Hat die Variable
„leer“ den Wert „ok“ wird sofort ins Bild 30 gesprungen,
weil dann kein Eintrag vorhanden ist. Die Variable
„anzeigen“ wird zu Beginn auf eins gesetzt, weil nach dem
löschen eines Eintrags immer der aktuellste Eintrag
angezeigt werden soll.
Die „gaeste_id“ die an das serverseitige Skript übertragen
wird, gibt an welcher Eintrag gelöscht werden soll.
Sechstes Schlüsselbild
Im sechsten Schlüsselbild soll der Zurück – Button ins Bild
15 springen:
on (release) {
gotoAndPlay(15);
}
Siebtes Schlüsselbild
Im siebten und letzten Schlüsselbild soll die Schaltfläche
„neuer Eintrag“ auf das Bild 5 verweisen:
on(release){
gotoAndStop(5);
}
Damit ist die Arbeit am Flashfilm beendet und wir können uns
den PHP – Skripten zuwenden.
Die PHP – Skripte
Für alle vier PHP – Skripte benötigen Sie Zugriff auf eine
Datenbank. Damit man die Zugangsdaten komfortabel ändern
kann, sind diese in einer zusätzlichen PHP – Datei abgelegt,
welche dann in alle vier Skripte eingebunden wird.
Legen Sie also eine neue PHP – Datei an, nennen diese
„zugangsdaten.php“ und fügen folgende Zeilen ein:
<?php
// Datenbankserver:
$db_server = "localhost";
// Datenbankname:
$db_name = "gaestebuch_db";
// Datenbankuser:
$db_user = "root";
// Datenbankpasswort:
$db_passwort = "";
?>
Verwenden Sie dabei Ihre eigenen Zugangsdaten.
Eintrag anzeigen
Zum Auslesen der Gästebucheinträge dient das Skript
„gb.php“. In diesem Skript werden alle Einträge aus der
Datenbank selektiert und zeilenweise durchlaufen. Die
Variable „akt_zeile“ wird zu Beginn auf eins gesetzt und bei
jedem Zeilendurchlauf um eins erhöht. So wird quasi
mitgezählt, in welcher Zeile sich die while – Schleife
gerade befindet. Stimmt die Variable „akt_zeile“ mit der aus
dem Flash – Film empfangenen Variablen „anzeigen“ überein,
wir der aktuelle Datensatz formatiert und ausgegeben.
Außerdem wird in diesem Skript ermittelt, wie viele
Datensätze in der Tabelle enthalten sind, um die Anzahl der
Einträge auszugeben, bzw. die Variable „leer“ zurückzugeben,
falls keine Einträge vorhanden sind.
<?php
//PHP-Datei einbinden:
require("zugangsdaten.php");
//Verbindung zur Datenbank herstellen:
$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort);
$db_select = @MYSQL_SELECT_DB($db_name);
//Variable „anzeigen“ aus dem HTTP_POST_VARS – Array holen:
$anzeigen=$HTTP_POST_VARS["anzeigen"];
//aktuelle Zeile auf 1 setzen:
$akt_zeile = 1;
//Alle Spalten aus tbl_gaeste abfragen und absteigend nach
Datum ordnen:
$abfrage = "select date_format(datum,'%d.%m.%Y'),date_format
(datum,'%k:%i'),name,ort,nachricht,email,gaeste_id
from tbl_gaeste order by datum desc";
$result = mysql_query($abfrage);
// Anzahl der Datensätze ermitteln:
$elemente = mysql_num_rows($result);
// Variable "leer" zurückgeben, wenn keine Einträge
vorhanden sind:
if($elemente==0){
echo"&leer=ok&";
}
//Alle Datensätze der Tabelle durchlaufen:
while($zeile=mysql_fetch_array($result)){
//Wenn die aktuelle Zeile der Variable „anzeigen“
entspricht:
if($akt_zeile==$anzeigen) {
//Datensatz im MIME-Inhaltstyp
application/x-www-form-urlencoded //ausgeben:
echo "&datum=".$zeile[0]."&zeit=".$zeile[1].
"&anzeigen=".$anzeigen."&elemente=".$elemente.
"&name=".$zeile["name"]."&ort=".$zeile["ort"].
"&nachricht=".$zeile["nachricht"]."&email="
.$zeile["email"]."&gaeste_id="
.$zeile["gaeste_id"]."&";
}
$akt_zeile++;
}
?>
Eintrag hinzufügen
Um einen neuen Datensatz in die Datenbank einzufügen, wird
das Skript „gb_eintragen.php“ benötigt. Die einzufügenden
Daten werden aus dem Flash – Film empfangen und die neue
Gäste – ID wird aus der Datenbank ermittelt, indem die
höchste vorhandene ID um eins erhöht wird. Nun wir noch das
aktuelle Datum samt Uhrzeit ausgelesen und der neue
Datensatz in die Tabelle eingefügt. Zum Schluss wird die
Variable „geladen“ an Flash zurückgegeben.
<?php
//PHP-Datei einbinden:
require("zugangsdaten.php");
//Verbindung zur Datenbank herstellen:
$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort);
$db_select = @MYSQL_SELECT_DB($db_name);
//empfangene Variablen aus dem HTTP_POST_VARS – Array holen:
$name = $HTTP_POST_VARS["name"];
$ort = $HTTP_POST_VARS["ort"];
$email = $HTTP_POST_VARS["email"];
$nachricht = $HTTP_POST_VARS["kommentar"];
//aktuelles Datum ermitteln, datenbankgerecht formatieren
und in die Variable //„datum“ schreiben:
$datum = date("Y-m-d H:i:s");
//größte bisherige „gaeste_id“ ermitteln:
$abfrage = "select max(gaeste_id) from tbl_gaeste";
$result = mysql_query($abfrage);
while($zeile=mysql_fetch_array($result))
{
//größte bisherige „gaeste_id“ um eins erhöhen:
$gaeste_id=$zeile[0]+1;
}
//neuen Eintrag aus empfangenen Variablen, aktuellem Datum
und neuer „gaeste_id“ //in die Datenbank einfügen:
$eintrag_opp="INSERT INTO tbl_gaeste VALUES
(".$gaeste_id.",'".$name."','".$ort."','"
.$nachricht."','".$datum."','".$email."')";
$result=mysql_query($eintrag_opp);
//Variable geladen für Flash formatieren und zurückgeben:
echo "&geladen=ok&";
?>
login
Das Skript zur Nutzerauthentifizierung heißt „gb_admin.php“.
In diesem Skript wird zunächst geprüft, ob ein Nutzername
und ein Nutzerpasswort vom Flash – Film empfangen wurden.
Danach wird das Passwort aus der Datenbank abgefragt, bei
dem der Nutzername dem eingegebenen Nutzernamen entspricht.
Das eingegebene Passwort wird MD5 - verschlüsselt und mit
den MD5 – verschlüsselten Passwort aus der Datenbank
verglichen. Stimmen die Strings überein, wird die Variable
„berechtigt = ja“ ausgegeben, ist das nicht der Fall bekommt
man die Variable „berechtigt = nein“ zurück.
<?php
//PHP-Datei einbinden:
require("zugangsdaten.php");
//Verbindung zur Datenbank herstellen:
$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort);
$db_select = @MYSQL_SELECT_DB($db_name);
//empfangene Variablen aus dem HTTP_POST_VARS – Array holen:
$admin_name = $HTTP_POST_VARS['admin_name'];
$admin_pw = $HTTP_POST_VARS['admin_pw'];
//wenn Admin-Name und Admin-Passwort vorhanden sind:
if($admin_name && $admin_pw){
//Admin-Passwort aus tbl_admin abfragen, bei dem der
Admin_Name dem eingegebenen Admin-Namen entspricht
$abfrage = "select admin_pw from tbl_admin where
admin_name='".$admin_name."'";
$result = mysql_query($abfrage);
//Alle Datensätze der Tabelle durchlaufen:
while($zeile = mysql_fetch_array($result)){
//eingegebenes Passwort MD5 – verschlüsseln und mit dem aus
der //Datenbank selektierten, MD5 – verschlüsselten Passwort
vergleichen:
if(md5($admin_pw)== $zeile[0]){
//Ausgabe wenn Passwort übereinstimmt:
echo "&berechtigt=ja&";
}
else
{
//Ausgabe wenn Passwort nicht übereinstimmt:
echo "&berechtigt=nein&";
}
}
}
?>
Eintrag löschen
Zum Löschen eines Eintrages aus der Datenbank nutzen wir das
Skript „gb_loeschen.php“. Dabei wird die Gäste – ID des zu
entfernenden Eintrages vom Flash – Film an das PHP – Skript
übergeben. Da diese Gäste – ID einen Eintrag eindeutig
identifiziert, kann dann der Datensatz mit dieser ID
gelöscht werden. Danach wird die aktuelle Zeile auf eins
gesetzt, alle Datensätze aus der Datenbank selektiert, und
solange in einer while – Schleife durchlaufen, bis die
Variablen „akt_zeile“ und „anzeigen“ übereinstimmen. Dann
wird dieser Datensatz formatiert und ausgegeben. Sollte nach
dem Löschen kein Datensatz mehr in der Datenbank vorhanden
sein, wird die Variable „leer“ zurückgegeben.
<?php
//PHP-Datei einbinden:
require("zugangsdaten.php");
//Verbindung zur Datenbank herstellen:
$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort);
$db_select = @MYSQL_SELECT_DB($db_name);
//empfangene Variablen aus dem HTTP_POST_VARS – Array holen:
$gaeste_id = $HTTP_POST_VARS['gaeste_id'];
$anzeigen = $HTTP_POST_VARS["anzeigen"];
//Datensatz mit empfangener gaeste_id löschen:
$loesch_abfrage = "delete from tbl_gaeste where
gaeste_id=".$gaeste_id."";
$result = mysql_query($loesch_abfrage);
//aktuelle Zeile auf 1 setzen:
$akt_zeile = 1;
//Alle Spalten aus tbl_gaeste abfragen und absteigend nach
Datum ordnen
$abfrage = "select date_format(datum,'%d.%m.%y'),name,
ort,nachricht,email,gaeste_id from tbl_gaeste
order by datum desc";
$result = mysql_query($abfrage);
//gibt die Anzahl der Datensätze zurück
$elemente = mysql_num_rows($result);
//gibt die Variable "leer" zurück, wenn keine Einträge
vorhanden sind
if($elemente==0){
echo "&leer=ok&";
}
//Alle Datensätze der Tabelle durchlaufen:
while($zeile = mysql_fetch_array($result)){
//Wenn die aktuelle Zeile der Variablen anzeigen entspricht:
if($akt_zeile==$anzeigen){
//Datensatz im MIME-Inhaltstyp
application/x-www-form-urlencoded ausgeben:
echo "&datum=".$zeile[0]."&anzeigen=".$anzeigen.
"&elemente=".$elemente."&name=".$zeile["name"].
"&ort=".$zeile["ort"]."&nachricht=".$zeile
["nachricht"]."&email=".$zeile["email"].
"&gaeste_id=".$zeile["gaeste_id"]."&";
}
$akt_zeile++;
}
?>
Download gaestebuch.fla (29KB)
|