> Start
> Grundlagen
> Einbinden von
   Medienformaten
> ActionScript, PHP
   und MySQL
> Spiele-
   programmierung
> ActionScript
   und XML
> Quellen
  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)

 

   
 
© Saskia Bretschneider - CT01w1