Warning: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php on line 58
Wie schreibt man ein Forum mit PHP und Mysql PHP Tutorials nicht nur für Anfänger php-resource.de
php-resource.de

PHP Tutorial: Wie schreibt man ein Forum mit PHP und Mysql

Wie erstellt man ein kleines Forum mit PHP und MYSQL? Dieses Tutorials zeigt wie es geht

|02.06.2003 | Moqui | 85207 | KAT : PHP | | Kommentare 1


1

1

Forum Tutorial

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 :)!

<?php
/* 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:

<?php
/* 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.

<?php
/* 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…

<?php
/* 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:

<?php
/* 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. 

Falls Sie einen Fehler finden, denken Sie dran, er war beabsichtigt!

sollten Sie noch ein wenig Hilfe benötigen, erreichen Sie mich im Forum unter Moqui

Kommentare zum Tutorial
Tutorial kommentieren
 
15.09.2009 10:56:17 wo ist die maske? ...

Alle Kommentare anzeigen ...
 
Über den Autor
Moqui

Moqui

Status
Premium Mitglied

Beruf
Unbekannt

Mitglied seit:
30.04.2009

letzte Aktivität
04.06.2009

 

Tutorial bewerten

Hat Ihnen dieses Tutorial gefallen? Dann bewerten Sie es jetzt! Fünf Sterne bedeutet "Sehr gut", ein Stern "Unzureichend".



 

aktuelle Artikel

Mit Web-Templates Geld verdienen

Mit Web-Templates Geld verdienenWeb-Templates gewinnen immer mehr an Bedeutung. Erfahre hier, wie du dir mit dem TemplateMonster-Marktplatz neue Verkaufswege erschließen kannst.

17.10.2017 | Neu | Berni

Kostenloser PHP Editor Codelobster

Kostenloser PHP Editor CodelobsterEin einfach zu verwendender PHP, HTML, CSS, JavaScript Editor mit vielen Funktionen

21.09.2017 | Neu | Berni