Also ich dachte viele Leute hätten gern ein eigenes Forum auf ihrer Seite.
Doch wenn man ein fertiges Form nimmt, hat man öfters mal ein Design Problem,
weil das Forum einfach nicht zu der Seite passt. Oftmals will man aber einfach
auch eine kleine Plauderecke für seine Gäste machen. Ich versuche jetzt mal
das Scripten eines kleinen Forums zu erläutern.
Als Grundvoraussetzung verlange ich, dass Sie wissen, wie man MySQL-Tabellen
erstellt und aus ihnen per PHP ausliest, bzw. ändert. HTML Kenntnisse wären
auch nicht ohne, denn Sie müssen Formulare erstellen.
Also:
Das Herzstück des Forums sind die MySQL Tabellen.
Hier die erste:
Machen Sie eine Tabelle namens "foren". In ihr sollen die einzelnen
verfügbaren Foren aufgelistet sein.
Die Tabelle muss folgendermaßen aussehen:
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default |
Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | | PRI |
NULL | auto_increment |
| name | tinytext |
| |
|
|
+-------+----------+------+-----+---------+----------------+
Die id wird bei jedem Datensatz automatisch gesetzt und das Feld "name"
beschreibt einfach den Namen des Forums. Die id benötigen wir später um auf
die Einzelnen Beiträge und Threads zuzugreifen.
Die 2. Tabelle nennen Sie "threads" und erstellen sie nach
folgendem Aufbau:
+---------+---------------+------+-----+---------+----------------+
| Field | Type
| Null | Key | Default |
Extra |
+---------+---------------+------+-----+---------+----------------+
| id | int(11)
| | PRI | NULL | auto_increment
|
| fid | int(11)
| | |
0
|
|
| topic | tinytext
| |
|
|
|
| created | timestamp(14) |
| |
|
|
+---------+---------------+------+-----+---------+----------------+
Das Feld id wird wieder automatisch gesetzt und wird benötigt, um auf die
Beiträge zuzugreifen, die in diesem Thread geschrieben sind. Das Feld "topic"
beinhaltet den Namen des ersten Beitrags, der erstellt wurde und somit auch das
Topic oder den Betreff des Threads.
Das Feld "created" beinhaltet nichts anderes als den Timestamp des
Threads, anders gesagt, wann er erstellt wurde.
Nun zu der 3. und letzten Tabelle:
Nennen Sie die Tabelle "answers" und bauen Sie sie nach folgendem
Schema auf:
+---------+---------------+------+-----+---------+----------------+
| Field | Type
| Null | Key | Default |
Extra |
+---------+---------------+------+-----+---------+----------------+
| id | int(11)
| | PRI | NULL | auto_increment
|
| tid | int(11)
| | |
0
|
|
| fid | int(11)
| | |
0
|
|
| user | tinytext
| |
|
|
|
| topic | tinytext
| |
|
|
|
| text |
text
| |
|
|
|
| created | timestamp(14) |
| |
|
|
+---------+---------------+------+-----+---------+----------------+
Das id Feld wird wie immer zur eindeutigen Identifizierung genutzt. "tid"
beinhaltet die ID des Threads, indem der Beitrag verfasst wurde und "fid"
analog dazu das Forum.
Das "user"-Feld beinhaltet später den Namen des Autors. Die
Autoren sollen ja auch in der Lage sein, ihren Beiträgen eine Überschrift zu
geben, daher benötigen wir noch ein Feld "topic". "text"
beinhaltet, wie es der Name eigentlich schon sagt, den eigentlichen Text des
Beitrags. "created" benutzen wir wie vorher wieder um das
Erstellungsdatum festzuhalten.
Soviel zum groben Aufbau des Forums.
Nun wollen wir eine Übersichtsseite erstellen, auf der der Besucher alle
Foren sehen und selektieren kann.Ich bringe jetzt nur mal ein sehr einfaches
Beispiel, wie es aussehen könnte. Natürlich können Sie ihre Beiträge schön
in einer Tabelle anordnen und sie somit an das Design ihrer Seite anpassen.Also
geben Sie die Forumnamen mit einem Hyperlink aus. Im Hyperlink müssen Sie auf
die Seite verweisen, in der dann später die einzelnen Threads angezeigt werden,
gefolgt von der ID des Forums, das angezeigt werden soll.Um Ihnen das Getümmel
der Dateien ein wenig zu erleichtern, benennen wir sie einfach.Die Datei zum
Anzeigen der Foren nennen wir showforen.php, die Datei zum Anzeigen der Threads
nennen wir showthreads.php. Weitere werden folgen :)!
<?
/* showforen.php */
//Herstellen der MySQL verbindung
$con = mysql_connect($host,
$user, $pass);
$db = mysql_select_db($database);
//Herauslesen der Foren
$res = mysql_query("select
* from foren");
//Ausgeben der Foren mit Hyperlink
while($row =
mysql_fetch_array($res))
{
echo "<a
href=\"showthreads.php?fid=".$row["id"]."\">";
echo $row["name"]."</a><br>";
}
?> |
So schon geschafft...die Foren werden angezeigt…
Nun folgt fast immer das selbe Spiel bis zu den Beiträgen.
Wir nehmen jetzt noch eine weitere Datei in unser Vokabular auf, nämlich die
showanswers.php.
Als nächster Schritt müssen wir die Threads auflisten. Das geschieht fast
genau so, wie in der showforen.php, außer dass wir ja eine Variable "fid"
mitgeliefert bekommen, die es noch zu verwerten gilt. Wir möchten also nun alle
Threads anzeigen, die in dem Feld fid unserer Datenbank den Wert enthält, der
uns der Besucher mitgeteilt hat. Das geschieht auf folgende Weise:
<?/*
showthreads.php */
//Herstellen der MySQL verbindung
$con = mysql_connect($host,
$user, $pass);
$db = mysql_select_db($database);
//Herauslesen der Threads, die in dem Forum
stehen
$res = mysql_query("select
* from threads where fid=".$_GET["fid"]);
//Ausgeben der Threads mit Hyperlink auf
showanswers.php
//Die jetzige Ausgabe der Tabelle "threads" liefert jetzt
//eine neue Variable mit, die wir auch in den Link
//setzen müssen
while($row =
mysql_fetch_array($res))
{
echo "<a
href=\"showanswers.php?fid=".$row["fid"]."&tid=".$row["id"]."\">";
echo $row["topic"]."</a><br>";
}
?> |
Nun verweisen wir auf die Datei showanswers.php und liefern ihr die ID des
Forums und die ID des ausgewählten Threads mit.Anhand dieser Variablen können
wir nun zum letzten Schritt der Anzeige übergehen, das Anzeigen der Beiträge.
<?/*
showanswers.php */
//Herstellen der MySQL verbindung
$con = mysql_connect($host,
$user, $pass);
$db = mysql_select_db($database);
//Lesen aus DB
$res = mysql_query("select
* from answers where fid=".$_GET["fid"]."
AND tid=".$_GET["tid"]);
//ausgeben
while($row =
mysql_fetch_array($res))
{
$text = nl2br($row["text"];
//Zeilenumbrüche nicht vergessen ;)
echo "<p>";
echo "Titel des Beitrags: ".$row["topic"]."<br>";
echo "Name des Autors: ".$row["user"]."<br>";
echo "Nachricht: ".$text."<br>";
echo "</p>";
?> |
Wenn Sie wollen, können Sie auch noch das Erstellungsdatum anzeigen, das wir
später im Format JJJJMMTTSSmmss speichern werden. Sie können aus dem
kompletten Datumsstring noch einen Formatierten String im deutschen Format
machen TT.MM.JJJJ SS:mm:ss
Dies erreichen Sie mit der Funktion substr().
Da dies nicht der eigentliche Bestandteil des Tutorials ist, setzte ich nur
mal kurz die Erklärung der Funktion von PHP hier rein:
string substr ( string string, int start [, int length])
substr() gibt den Teil von string zurück, der durch die Parameter start und
length definiert wurde. Wenn start positiv ist, beginnt der zurück gegebene
String an der start-Position von string, angefangen bei NULL. So ist z.B. im
String 'abcdef' das Zeichen an der Position 0 gleich 'a', das Zeichen an der
Position 2 ist 'c' usw.
So die Ausgabe haben Sie hinter sich…Doch eins fehlt noch…ihre Besucher
wollen ja auch selber posten.
Setzen Sie dazu in der showthreads.php einen Link auf die Datei newthread.php
und übergeben Sie ihr wie vorher die ID des Forums, indem ein neuer Thread
erstellt werden soll. Die Datei newthread.php braucht ein Formular, dass ein
Feld für den Namen, für die Überschrift (Topic) und ein großes Textfeld für
die Nachricht.
Die Felder benennen wir ganz simpel mit "name", "topic"
und "nachricht". Das Formular muss mit der Methode "POST" an
die Datei newthread_script.php verschickt werden. Was Sie beachten müssen ist,
dass Sie in dem Formular ein hidden-Field integrieren, das die ID des Forums
zwischenspeichert. Nennen Sie es einfach wieder "fid".
So nun wollen wir und mal an den Code für das Eintragen machen…
<?/*
newthread_script.php */
//Herstellen der MySQL verbindung
$con = mysql_connect($host,
$user, $pass);
$db = mysql_select_db($database);
//Variablen auf andere Deklarieren (ist
einfacher zu schreiben)
$nachricht = $_POST["nachricht"];
$topic = $_POST["topic"];
$name = $_POST["name"];
$fid = $_POST["fid"];
//schreiben in DB (nur Thread an sich)
mysql_query("insert
into threads set fid='$fid', topic='$topic', created=now()");
//nun brauchen wir noch die neue ID des
Threads, um sie in answers
// einzutragen
$res = mysql_query("select
max(id) AS max from threads");
$row = mysql_fetch_array($res);
$thread_id = $row["max"];
//so nun schreiben wir den eigentlichen
Beitrag in die DB
mysql_query("insert
into answers set text='$text', topic='$topic', user='$name', fid='$fid',
tid='$thread_id', created=now()");
//Weiterleitung zu der Auflistung der
Threads im
//bereits ausgewählten Forum
header("Location:
showthreads.php?fid=".$fid);
?> |
So das wars…wir haben einen Thread inkl. einem neuen Eintrag erstellt…
Wir nähern uns dem Ende des Tutorials
Jetzt werde ich noch erläutern, wie man eine Antwort auf einen Beitrag
erstellt. Setzen Sie einen Link auf die Seite, wo die Beiträge angezeigt
werden, also showanswers.php. Der Link muss dieses Mal nicht nur die fid,
sondern auch die tid enthalten, da Sie ja gezielt in einem bestimmten Thread
eine Antwort erstellen wollen Die Seite zum antworten nennen wir newanswer.php
Der Link muss dann ungefähr so aussehen:
<a href="newanswer.php?fid=123&tid=456">neuer
Beitrag</a>
Nun kommt wieder die selbe Prozedur wie vorher…es wird wohl am einfachsten
sein, sie nehmen sich die newthread.php zur Hand und speichern sie unter dem
Namen newanswer.php. Ändern sie die Empfängerdatei des Formulars von
newthread_script.php zu newanswer_script.php und erstellen Sie noch ein zusätzliches
hidden-Field mit dem Namen "tid". In diesem Feld müssen Sie als Value
die ID des Threads eintragen, die Sie von der vorherigen Seite mitgeteilt
bekommen haben.
Sie haben also statt einem Hidden-Field nun zwei, die so aussehen:
<input type="hidden" name="fid" value="<?php
echo $_GET["fid"]; ?>">
<input type="hidden" name="tid" value="<?php echo
$_GET["tid"]; ?>">
Nun nehmen Sie die newthread_script.php Datei zur Hand und speichern sie
erneut unter dem Namen newanswer_script.php und ändern sie folgendermaßen ab:
<?/*
newanswer_script.php */
//Herstellen der MySQL verbindung
$con = mysql_connect($host,
$user, $pass);
$db = mysql_select_db($database);
//Variablen auf andere Deklarieren (ist
einfacher zu schreiben)
$nachricht = $_POST["nachricht"];
$topic = $_POST["topic"];
$name = $_POST["name"];
$fid = $_POST["fid"];
$tid = $_POST["tid"];
//einen neuen Thread schreiben müssen wir
nicht mehr, denn
//er besteht ja schon ;)
//Die ID des Threads müssen wir auch nicht mehr provisorisch
//holen, da sie uns komfortabel vom Formular geliefert wird
//so nun schreiben wir den eigentlichen Beitrag in die DB
mysql_query("insert
into answers set text='$text', topic='$topic', user='$name', fid='$fid',
tid='$tid', created=now()");
//Weiterleitung zu der Auflistung der
Antworten im
//bereits ausgewählten Forum und Thread
header("Location:
showanswers.php?fid=".$fid."&tid=".$tid);
?> |
So Sie haben es geschafft…Sie haben ihr eigenes Forum programmiert,
vorausgesetzt, Sie haben es auch gemacht. Also somit sind wir am Ende…ich
hoffe es hat ihnen weitergeholfen und mir sind nicht zu viele Fehler
unterlaufen.