Ideale Partner

PHP und Flash sind ideale Partner, wenn es darum geht, dynamische Websites zu erstellen. Ein einmal entwickelter Flash-Film lässt sich über PHP leicht aktualisieren. Am Beispiel eines Diskussionsforums soll in diesem Workshop gezeigt werden, wie man Flash mit PHP und einer MySQL-Datenbank verbindet. Sie finden alle Dateien am Ende des Artikels zum Download.
(Dieser Artikel erschien im Sonderheft “PHP Special” der Zeitschrift Internet Professionell. Hier lesen Sie die ungekürzte und unredigierte Fassung.)

Das Setup

Voraussetzung für das Projekt in diesem Kapitel ist ein installierter Webserver mit PHP und MySQL. Die Plattform spielt keine Rolle; es ist also egal, ob Sie Unix, Linux, MacOS-X oder lieber Windows verwenden. Sie sollten ein grundlegendes Verständnis von PHP haben, aber keine Sorge: Alle wichtigen Befehle werden hier noch einmal ausführlich erklärt.
Die Syntax in diesem Kapitel ist jene von Flash 5. Das Prinzip und die Methoden gab es aber schon zu Zeiten von Flash 4, also sollten Sie dieses Projekt auch leicht mit der älteren Version von Flash umsetzen können.
Die Flash-Dateien heißen “forum.fla” und “forum.swf”. Die PHP-Datei für den Server heißt “forum_backend.php”, die Tabelle für die Datenbank steht in “forum.sql”.

Die Datenbank

Wir brauchen eine Tabelle für die Forums-Beiträge. Zu jedem Beitrag speichern wir den Namen, die E-Mail-Adresse, die Überschrift und die Nachricht des Teilnehmers. Dazu kommt das Datum und die Uhrzeit des Eintrags. Zur Organisation der Tabelle brauchen wir noch ein ID-Feld als Primärschlüssel.
Für die hierarchische Anordnung der Einträge verwenden wir folgenden Trick: Wir speichern zu jedem Eintrag die ID des Eintrages, unter dem der neue Eintrag stehen soll. Dieses Feld ist die Parent-ID, wir nennen sie PID. Angenommen, jemand eröffnet ein neues Thema und der erste Eintrag besitzt die ID 2. Wenn ein anderer Nutzer auf den Beitrag antwortet, bekommt dieser neue Eintrag selbst eine ID und als Parent-ID die 2, weil er unter dem ersten Eintrag erscheinen soll. So können wir ganz einfach eine hierarchische Struktur aufbauen. Wenn ein Eintrag der erste in einem neuen Thema ist, bekommt er als PID die 0.
Öffnen Sie PhpMyAdmin. Wenn Sie noch keine Datenbank haben, legen Sie eine an und erzeugen Sie dann eine neue Tabelle mit 7 Feldern. Die Tabelle nennen Sie “Forum”. Das erste Feld heißt “ID”, ist ein Integer (Int) ohne Vorzeichen (unsigned), wird automatisch mitgezählt (auto_increment) und bekommt den Primärschlüssel (Primary). Das zweite Feld heißt “PID” und ist ebenfalls ein Integer ohne Vorzeichen.
Die restlichen Felder sind leichter: “NAME”, “EMAIL” und “TITEL” sind jeweils ein String (Varchar) von 255 Zeichen Länge, “NACHRICHT” ist ein Text (Text) und “DATUM” ist ein Timestamp; das heißt, MySQL speichert das Datum und die Uhrzeit in diesem Feld.
Klicken Sie auf Speichern, um die Tabelle anzulegen. Wenn alles geklappt hat, können Sie ein paar Einträge in die Tabelle schreiben und PhpMyAdmin wieder schließen.

Die Server-Seite

Öffnen Sie einen Texteditor und legen Sie eine neue Datei mit dem Namen “forum_backend.php” an. Das ist keine HTML-Datei, also brauchen wir auch keine HTML-Tags. In dieser Datei stehen nur die PHP-Klammern “<?php ?>” und dazwischen PHP-Code.
Als erstes überprüfen wir alle eingehenden Variablen. Das Thema Sicherheit ist bei Server-Programmierung ein noch viel wichtigeres Thema, als es das im Netz ohnehin schon ist. Für unsere Zwecke reicht es aber, alle Variablen auf HTML-Tags zu überprüfen, bevor wir sie weiterverarbeiten. Dazu gibt es in PHP den Befehl “strip_tags”, er filtert aus einem String alles in spitzen Klammern heraus, also HTML, Javascript und anderen PHP-Code.

<?php

  // Variablen pruefen
  if (!isset ($action)) { $action = ""; }
  if (!isset ($pid)) { $pid = ""; }
  if (!isset ($name)) { $name = ""; }
  if (!isset ($email)) { $email = ""; }
  if (!isset ($titel)) { $titel = ""; }
  if (!isset ($nachricht)) { $nachricht = ""; }

  // Variablen bereinigen
  $action = strip_tags ($action);
  $pid = strip_tags ($pid);
  $name = strip_tags ($name);
  $email = strip_tags ($email);
  $titel = strip_tags ($titel);
  $nachricht = strip_tags ($nachricht);

?>

Wundern Sie sich nicht über die Variablen $action und $pid, die erkläre ich weiter unten.

Die Variablenübergabe

Variablen von Flash an PHP zu übergeben ist einfach; dazu später mehr. Variablen von PHP nach Flash zu verschicken, ist ein wenig komplizierter.
Wir verschicken die Variablen im URL-Format. Das ist ein Standard, der bereits vor Flash existierte und der beispielsweise bei HTML-Formularen mit der GET-Methode eingesetzt wird. In einem String kommen nacheinander der Variablenname und der Variableninhalt, getrennt durch ein Gleichheitszeichen. Zwischen zwei Variablen steht ein “&”-Zeichen.

name=Holger&email=he@thescreencollective.com&nachricht=Hallo

Diese Zeile führt dazu, dass in Flash eine Variable “name” angelegt wird, die den Inhalt “Holger” hat. Das gleiche gilt für die anderen beiden Variablen. Wichtig ist nur, dass in diesem String keine Leerzeichen, Zeilenumbrüche oder Sonderzeichen stehen. Für diese Fälle gibt es im URL-Format eine Codierung, die Sonderzeichen durch ein Prozent-Zeichen und einen zweistelligen Hexadezimalwert darstellt. Um die Konvertierung müssen Sie sich aber nicht kümmern, das erledigt der PHP-Befehl “urlencode”:

echo (urlencode ("Hallö Welt!"));

Hall%9A+Welt%21

Aus dem “ö” wurde “%9A”, aus dem Leerzeichen ein “+” und aus dem Ausrufezeichen ein “%21”. Analog dazu gibt es auch den Befehl “urldecode”, um das URL-Format wieder in einen lesbaren String zu konvertieren.
Die Variablen müssen wir in PHP in diesem Format ausgeben. Flash konvertiert sie aber automatisch wieder zurück in Strings mit Sonderzeichen.

Die Variable “status”

Ein weiteres Problem, um das wir uns kümmern müssen, liegt in der Natur von Flash. Flash spielt die Filme in der gewählten Geschwindigkeit ab (standardmäßig zwölf Bilder pro Sekunde). Wenn wir aus Flash heraus einen Aufruf an PHP senden (also an den Server), wird der Befehl zwar losgeschickt, aber Flash spielt den Film weiter ab; es wartet nicht auf das Ergebnis vom Server.
Die Rückmeldung kann aber je nach Verbindung und Serverbelastung einige Zeit dauern. Damit Flash in dieser Zeit nicht weiterspielt und vielleicht sogar Fehler produziert, weil wichtige Daten fehlen, müssen wir in einer Schleife warten, bis die Daten vom Server vollständig in Flash geladen sind.
Die einfachste Methode, das sicherzustellen, ist eine Hilfsvariable. Ich nenne sie “status”. Nachdem PHP die Daten ausgegeben hat, schicken wir “status=fertig” als letzte Variable hinterher. In Flash machen wir dann eine Schleife, die solange wartet, bis die Variable “status” den Inhalt “fertig” hat.
Auf diese Weise können wir auch Fehlermeldungen ausgeben. Wir schreiben einfach “status=fehler” und fangen auch diesen Fall in Flash ab. Wir können so also gezielt melden, wie die Aktion auf dem Server verlaufen ist.
Seit Flash 5 gibt es den Befehl “onClipEvent (data)”, der ausgelöst wird, sobald eine Datenoperation mit dem Server beendet ist. Aber es gibt keine Möglichkeit, den Verlauf zu protokollieren. Ich bevorzuge daher die Variante mit der Variable.

Die Datenbankverbindung

Als nächstes bauen wir eine Verbindung zur Datenbank auf. Wenn das nicht klappt, also wenn die Datenbank nicht gefunden wird, melden wir das an Flash. PHP generiert standardmäßig Fehlermeldungen, aber die werden in Flash nicht angezeigt; wir müssen uns also selbst darum kümmern.
Dazu nehmen wir die erwähnte “status”-Variable und eine Variable namens “fehlermeldung”. In ihr schreiben wir den Grund des Fehlers.

// Verbindung zur Datenbank
@$db = mysql_connect ("localhost", "root", "") or die ("status=fehler&fehlermeldung=" . urlencode ("Datenbankserver nicht gefunden!"));
@mysql_select_db ("holger") or die ("status=fehler&fehlermeldung=" . urlencode ("Datenbank nicht gefunden!")); 

Die Parameter bei “mysql_connect” und “mysql_select_db” müssen Sie auf Ihren Server abstimmen. Der erste Befehl hat als Parameter die Datenbank-Adresse, Benutzername und Passwort. Der zweite Befehl den Namen der Datenbank (hier: “holger”).
Der Befehl “die” bricht ein PHP-Script sofort ab und gibt als letztes den String in den Klammern aus. So können wir eine Fehlermeldung in einem Format schreiben, das Flash versteht. Wichtig ist dabei nur, dass keine anderen Ausgaben erfolgen. Deshalb steht am Anfang dieser Zeilen das “@”-Zeichen, welches die PHP-eigenen Fehlermeldungen unterdrückt.
Die Fehlermeldung selber lassen wir von “urlencode” in das URL-Format umwandeln. Achten Sie darauf, daß in dem Teil davor kein Leerzeichen steht.
Am Ende des Scripts müssen wir die Datenbankverbindung wieder schließen:

// Verbindung beenden
mysql_close ($db);

Die Variable “action”

Es gibt drei Aktionen, die unser Script ausführen muss: Einen Eintrag in die Datenbank schreiben, alle Überschriften lesen und alle Einträge zu einem Thema lesen. Es ist einfacher, das Ganze in eine einzige Datei zu schreiben, also müssen wir PHP beim Aufruf mitteilen, welche der Aktionen wir ausführen wollen.
Wir verwenden dazu eine Variable “action”. Diese hat entweder “write”, “threads” oder “posts” zum Inhalt. In PHP können wir diese drei Fälle mit dem “switch”-Befehl abfragen:

// Aktion ausfuehren
switch ($action)
{
  // Eintrag schreiben
  case "write":
   break;
   
  // Threads lesen
  case "threads":
   break;
   
  // Posts lesen
  case "posts":
   break;
}

Dieser Block steht vor dem Schließen der Datenbankverbindung (siehe auch das komplette Script am Ende des Artikels). Die einzelnen Befehle fehlen noch, folgen aber weiter unten. Der Befehl “break” beendet einen Fall und bricht den “switch”-Befehl ab. Sie dürfen ihn nicht vergessen!

Eintrag schreiben

Das Schreiben ist am einfachsten. Wir bekommen aus Flash die Variablen “name”, “email”, “titel” und “nachricht”. Außerdem bekommen wir die Variable “pid”, sie kennzeichnet, zu welchem Thema (Thread) dieser Eintrag gehört. Wir fügen diese Variablen in einen SQL-Befehl ein und schicken diesen an die Datenbank. Wenn das geklappt hat, teilen wir Flash mit: “status=fertig”. Wenn nicht, gibt es wieder eine Fehlermeldung.

// Eintrag schreiben
case "write":
  $query = "insert into Forum (PID, NAME, EMAIL, TITEL, NACHRICHT, DATUM) values ('$pid', '$name', '$email', '$titel', '$nachricht', null)"; 
  if (@mysql_query ($query, $db))
  {
    echo ("status=fertig");
  }
  else
  {
    echo ("status=fehler&fehlermeldung=" . urlencode ("Fehler beim schreiben!"));
  }
  break;

Das Datum-Feld ist ein Timestamp. Wenn wir als Wert “null” schreiben, fügt MySQL automatisch das aktuelle Datum und die aktuelle Uhrzeit ein.
Das wichtige ist der “if”-Befehl. In PHP können wir bei jedem Befehl durch eine “if”-Konstruktion abfragen, ob der Befehl erfolgreich war. Beachten Sie auch hier wieder das “@”-Zeichen, mit dem wir die Standard-Fehlermeldung unterdrücken. Und vergessen Sie nicht: In PHP steht vor einem Variablenname ein Dollar-Zeichen, in Flash nicht.

Threads lesen

Für die Übersicht brauchen wir alle Einträge, die als Parent-ID “0” haben; die also eine neue Diskussion (Thema/Thread) beginnen. Davon geben wir die ID-Nummer und die Überschrift zurück an Flash. Das perfekte Format dafür wären Arrays oder XML. Arrays können wir nicht übertragen, wir können nur einfache Variablen senden. XML scheidet ebenfalls aus, denn das wäre ein Kapitel für sich.
Es gibt aber einen Trick, wie man mit einfachen Variablen einen Array simulieren kann: Wir schreiben weiterhin einzelne Variablen, numerieren aber deren Namen. Also gibt es eine Variable “titel1”, eine Variable “titel2”, “titel3” und so weiter. Das zählen wir in PHP mit einer Hilfs-Variable “i”. Am Ende sagen wir Flash noch, wie viele Einträge es insgesamt sind und wir können diese Variablen in Flash ansprechen, als wäre es ein Array.

// Threads lesen
case "threads":
  $query = "select ID, TITEL from Forum where PID=0 order by DATUM desc";
  $result = mysql_query ($query, $db);
  $i = 0;
  while ($data = mysql_fetch_array ($result))
  {
    $i++;
    echo ("id$i=" . $data ["ID"] . "&");
    echo ("titel$i=" . urlencode ($data ["TITEL"]) . "&");
  }
  echo ("anzahl=$i&status=fertig");   
  break;

Der Befehl “mysql_fetch_array” zieht eine Zeile aus der Variable “result” und speichert diese als assoziativen Array in der Variable “data”. Auch hier fragen wir wieder mit der “while”-Schleife ab, ob der Befehl geklappt hat; also ob es noch Einträge gibt.

Beiträge (Postings) lesen

Auch hier bekommen wir wieder aus Flash eine Parent-ID; also suchen wir erst den Eintrag mit dieser ID. Dann liefern wir alle Einträge, die unter dieser Parent-ID stehen. Diese Einträge basteln wir zu einer langen Variable zusammen, die wir dann komplett an Flash schicken. In dieser Variable verwenden wir HTML für einfache Formatierungen.

// Posts lesen
case "posts":
  $query = "select * from Forum where ID=$pid";
  $result = mysql_query ($query, $db);
  $posts = "";
  while ($data = mysql_fetch_array ($result))
  {
    $posts .= $data ["TITEL"] . "<br>";
    $posts .= "Von: " . $data ["NAME"];
    if ($data ["EMAIL"])
    {
      $posts .= " (" . $data ["EMAIL"] . ")";
    }
    $posts .= ", " . substr ($data ["DATUM"], 6, 2) . ". " . substr ($data ["DATUM"], 4, 2) . ". " . substr ($data ["DATUM"], 0, 4) . ", " . substr ($data ["DATUM"], 8, 2) . ":" . substr ($data ["DATUM"], 10, 2) . " Uhr<br>";
    $posts .= $data ["NACHRICHT"] . "<br><br>";
  }
  $query = "select * from Forum where PID=$pid order by DATUM";
  $result = mysql_query ($query, $db);
  while ($data = mysql_fetch_array ($result))
  {
    $posts .= $data ["TITEL"] . "<br>";
    $posts .= "Von: " . $data ["NAME"];
    if ($data ["EMAIL"])
    {
      $posts .= " (" . $data ["EMAIL"] . ")";
    }
    $posts .= ", " . substr ($data ["DATUM"], 6, 2) . ". " . substr ($data ["DATUM"], 4, 2) . ". " . substr ($data ["DATUM"], 0, 4) . ", " . substr ($data ["DATUM"], 8, 2) . ":" . substr ($data ["DATUM"], 10, 2) . " Uhr<br>";
    $posts .= $data ["NACHRICHT"] . "<br><br>";
  }
  echo ("posts=" . urlencode ($posts) . "&status=fertig");
  break;

Das Datum steht in der Datenbank als ein SQL-Timestamp. Das ist eine lange Zahl, in der nacheinander Jahr, Monat, Tag, Stunde, Minute und Sekunde stehen. Für den 3. Oktober 2001, 12:56 Uhr und 42 Sekunden wäre das “20011003125642”. Mit dem Befehl “substr” können wir Teile der Zahl heraustrennen und so das Datum in ein lesbares Format umschreiben.

Script testen

Sie können das Script testen, indem Sie es mit einer Variable aufrufen. Kopieren Sie die Datei auf den Server und rufen Sie diese wie folgt auf:

forum_backend.php?action=threads

Das Ergebnis sollte ein langer String von Buchstaben und Variablen sein (vorausgesetzt, es steht bereits etwas in der Tabelle). Am Ende dieses Strings steht “status=fertig”.

Das komplette Script steht am Ende dieses Artikels.

Die Client-Seite

Die gute Nachricht: Wir sind mit dem PHP-Teil fertig. Die schlechte: Das war nur die eine Hälfte. Die zweite Hälfte ist das, was der Anwender am Ende in seinem Browser sieht, nämlich Flash.
Ich werde im Folgenden nicht alle Einzelheiten von Flash erklären. Sie finden am Ende die offene Flash-Datei “forum.fla” und können dort alles nachvollziehen. Ich zeige hier, wie die Kommunikation mit dem Server abläuft.
Öffnen Sie Flash und erstellen Sie einen leeren Film. Er heißt “forum.fla”. In diesem Film brauchen wir 3 Ebenen: “Marker”, “Scripts” und “Felder”. In der ersten Ebene “Marker” haben wir mehrere Keyframes: “threads_load”, “threads_show”, “posts_load”, “posts_show”, “write”, “write_send” und “error”.

Threads zeigen

In den ersten Frame von “threads_load” schreiben Sie folgendes Script:

action = "threads";
status = "";
loadVariables ("forum_backend.php", "", "post");

Wir leeren die Variable “status”, für den Fall, daß sie zufällig noch etwas von einer früheren Operation enthielt. Dann schicken wir diese Daten an den Server und zwar mit der Methode “Post”. Der mittlere Parameter im Befehl “loadVariables” beschreibt die Ebene, in welche die Variablen am Ende gespeichert werden sollen. Lassen Sie den Parameter leer und die Variablen landen in der aktuellen Ebene.
Dann müssen wir warten, bis PHP mit den Daten fertig ist. Dazu kommt ein paar Frames später ein weiterer Keyframe:

if (status == "fertig")
{
  gotoAndPlay ("threads_show");
}
else if (status == "fehler")
{
  gotoAndPlay ("error");
}
else
{
  gotoAndPlay (_currentframe - 1);
}

Wenn die Variable “status” das Wort “fertig” enthält, wissen wir, daß der Server fertig ist und wir in Flash die Daten verarbeiten können. Wenn es einen Fehler gab, springen wir zu unserer Fehlerroutine. Und wenn es keines von beiden ist, springen wir einen Frame zurück und warten noch ein wenig.
Sind die Daten geladen, zeigen wir sie an. Wir verwenden dazu Buttons, die wir mit den Überschriften aus der Datenbank beschriften. Wenn man sie anklickt, wird die Variable “pid” mit der ID des Buttons gesetzt und Flash springt zu “posts_load”.

for (i=1; i<=anzahl; i++) 
{
  duplicateMovieClip ("threadbutton", "button" + i, i);
  _root["button" + i].buttontext = _root["titel" + i];
  _root["button" + i].id = _root["id" + i];
  _root["button" + i]._y = 20 + i * 20;
}

Die Buttons kopieren wir mit “duplicateMovieClip”. “buttontext” ist ein Textfeld im Movieclip “threadbutton”. Darüber (in diesem Movieclip) liegt der eigentliche Button, der die Aktion ausführt.
Am Ende von “threads_show” brauchen wir noch einen “stop”-Befehl, damit Flash den Film nicht einfach weiter spielt.

Postings zeigen

Auch die Postings müssen wir erst einmal laden. Das Script ist das gleiche, wie bei den Threads. Wenn die Einträge geladen sind, springen wir zu “posts_show”, um sie anzuzeigen.
Hier haben wir ein großes Textfeld mit dem Variablennamen “posts”. So heißt auch die Variable, die wir aus PHP ausgeben, also werden die Postings automatisch in diesem Feld angezeigt.
Es fehlt noch ein “stop”-Befehl wie bei den Threads.

Eintrag schreiben

Von den Threads und von den Postings gibt es jeweils einen Button, mit dem man zum Marker “write” gelangt. Hier kann man entweder ein neues Thema schreiben oder auf ein Thema antworten.
Im Marker “write” haben wir ein Formular aus mehreren Textfeldern. Als Variablennamen schreiben wir “name”, “email”, “titel” und “nachricht”, die Namen, welche die Variablen auch im PHP-Script haben. Darunter kommt ein Button “Abschicken”. Wenn er gedrückt wird, springen wir zum Marker “write_send”. Hier schicken wir die Variablen an PHP und warten wieder, bis der Server fertig ist.

Die Fehlermeldung

Als letztes haben wir noch unseren Marker “error”. Hierher springen wir immer, wenn es ein Problem gab. Wir brauchen an dieser Stelle nur ein großes Textfeld mit dem Variablennamen “fehlermeldung” und einen “stop”-Befehl.

Und jetzt alles zusammen

Veröffentlichen Sie den Flash-Film und kopieren Sie ihn zusammen mit dem PHP-Script auf den Server. Die SWF- und die PHP-Datei müssen im gleichen Verzeichnis sein (oder zumindest auf dem gleichen Server), sonst führt Flash die “loadVariables”-Befehle nicht aus. Nicht Bug sondern Feature: so kann niemand Daten an einen fremden Server schicken.
Sie haben in diesem Kapitel das Prinzip von Serverkommunikation mit Flash gelernt. Sie können damit alle möglichen Anwendungen umsetzen, das Prinzip ist immer das selbe: Flash schickt einen Aufruf an PHP mit dem Befehl “loadVariables” und wartet dann, bis PHP alle Daten und eine Statusmeldung zurück geschickt hat. Was Flash oder PHP mit den Daten anfangen, ist dabei nicht relevant und unterliegt keinerlei Beschränkungen.
Wenn Sie also wieder ein Flash-Projekt haben, denken Sie daran: Sie können Ihren Film jetzt dynamisch aktualisieren.

Das komplette PHP-Script

<?php

  // Variablen pruefen
  if (!isset ($action)) { $action = ""; }
  if (!isset ($pid)) { $pid = ""; }
  if (!isset ($name)) { $name = ""; }
  if (!isset ($email)) { $email = ""; }
  if (!isset ($titel)) { $titel = ""; }
  if (!isset ($nachricht)) { $nachricht = ""; }

  // Variablen bereinigen
  $action = strip_tags ($action);
  $pid = strip_tags ($pid);
  $name = strip_tags ($name);
  $email = strip_tags ($email);
  $titel = strip_tags ($titel);
  $nachricht = strip_tags ($nachricht);
 
  // Verbindung zur Datenbank
  @$db = mysql_connect ("localhost", "root", "") or die ("status=fehler&fehlermeldung=" . urlencode  ("Datenbankserver nicht gefunden!"));
  @mysql_select_db ("holger") or die ("status=fehler&fehlermeldung=" . urlencode ("Datenbank nicht gefunden!"));

  // Aktion ausfuehren
  switch ($action)
  {
    // Eintrag schreiben
    case "write":
      $query = "insert into Forum (PID, NAME, EMAIL, TITEL, NACHRICHT, DATUM) values ('$pid', '$name', '$email', '$titel', '$nachricht', null)";
      if (@mysql_query ($query, $db))
      {
        echo ("status=fertig");
      }
      else
      {
        echo ("status=fehler&fehlermeldung=" . urlencode ("Fehler beim schreiben!"));
      }
      break;
   
    // Threads lesen
    case "threads":
      $query = "select ID, TITEL from Forum where PID=0 order by DATUM desc";
      $result = mysql_query ($query, $db);
      $i = 0;
      while ($data = mysql_fetch_array ($result))
      {
        $i++;
        echo ("id$i=" . $data ["ID"] . "&");
        echo ("titel$i=" . urlencode ($data ["TITEL"]) . "&");
      }
      echo ("anzahl=$i&status=fertig");   
      break;
   
    // Posts lesen
    case "posts":
      $query = "select * from Forum where ID=$pid";
      $result = mysql_query ($query, $db);
      $posts = "";
      while ($data = mysql_fetch_array ($result))
      {
        $posts .= $data ["TITEL"] . "<br>";
        $posts .= "Von: " . $data ["NAME"];
        if ($data ["EMAIL"])
        {
          $posts .= " (" . $data ["EMAIL"] . ")";
        }
        $posts .= ", " . substr ($data ["DATUM"], 6, 2) . ". " . substr ($data ["DATUM"], 4, 2) . ". " . substr ($data ["DATUM"], 0, 4) . ", " . substr ($data ["DATUM"], 8, 2) . ":" . substr ($data ["DATUM"], 10, 2) . " Uhr<br>";
        $posts .= $data ["NACHRICHT"] . "<br><br>";
      }
      $query = "select * from Forum where PID=$pid order by DATUM";
      $result = mysql_query ($query, $db);
      while ($data = mysql_fetch_array ($result))
      {
        $posts .= $data ["TITEL"] . "<br>";
        $posts .= "Von: " . $data ["NAME"];
        if ($data ["EMAIL"])
        {
          $posts .= " (" . $data ["EMAIL"] . ")";
        }
        $posts .= ", " . substr ($data ["DATUM"], 6, 2) . ". " . substr ($data ["DATUM"], 4, 2) . ". " . substr ($data ["DATUM"], 0, 4) . ", " . substr ($data ["DATUM"], 8, 2) . ":" . substr ($data ["DATUM"], 10, 2) . " Uhr<br>";
        $posts .= $data ["NACHRICHT"] . "<br><br>";
      }
      echo ("posts=" . urlencode ($posts) . "&status=fertig");
      break;
  }

  // Verbindung beenden
  mysql_close ($db);
 
?>

Glossar

Generator: Ein Programm von Macromedia, mit dem sich Serverseitig Flash-Dateien erzeugen lassen.
Get: Eine Methode, um Variablen zu übermitteln. Die Variablen werden dabei an die URL angehängt.
Post: Eine Methode, um Variablen zu übermitteln. Post ist ebenfalls ein anderes Wort für Diskussionsbeitrag.
Posting: Mehrzahl von Post. Ein anderes Wort für Diskussionsbeitrag.
Thread: Ein “Diskussionsfaden”. Sämtliche Beiträge zu einem Thema gehören zu einem Thread.

Download

Hier die Dateien zum Artikel: flashforum.sit oder flashforum.zip (500 KB)