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


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

Ratings

Average rating:

5 Sterne
1
4 Sterne
1
3 Sterne
0
2 Sterne
0
1 Stern
0
Insgesamt 2 Bewertungen


Wolfgang Müller
Leider funzt das bei mir nicht. Ich habe es zum testen Mal in xampp gemacht.
Written by Wolfgang Müller At 21.01.2024 22:19:31

Goldtable
Echt guter Artikel!
Danke auch für den Artikel mit dem ich HTML gelernt hab.
Einstieg in die Entwicklung mit HTML
https://meg-chat.de/tutorials/tutorial/html_grundlagen
Written by Goldtable At 02.08.2023 00:53:12

wo ist die maske?
Written by niroj93 At 15.09.2009 10:56:17

Here you can write a comment


Please enter at least 10 characters.
Loading... Please wait.
* Pflichtangabe

Related topics

Anzeige des letzten Besuchers auf der Website

PHP und MySQL ermöglichen es, mit wenig Aufwand Datum und Uhrzeit des letzten Besuchers auf der Homepage anzeigen zu lassen. ...

Lukas Beck

Autor : Lukas Beck
Category: PHP-Tutorials

plotting masters - a professional guide - Teil II

Grafische Interpolation und Bestapproximation von numerischen Wertepaaren: Wir wollen Punkte auf einer Zeichenebene über verschiedene Verfahren miteinander verbinden. ...

EVAMasters

Autor : EVAMasters
Category: PHP-Tutorials

How to effectively perform complex queries with SQL queries in MySQLi?

This MySQL tutorial explains how to efficiently perform complex SQL queries in MySQLi. We will look at various aspects of database querying and learn specific methods to fully utilise the power of MySQLi. ...

TheMax

Autor : TheMax
Category: mySQL-Tutorials

Dateien per Userinterface hochladen

Um Dateien per Userinterface hochladen zu können, benötigt man vergleichbar wenige Kenntnisse in der Programmiersprache PHP ...

Lukas Beck

Autor : Lukas Beck
Category: PHP-Tutorials

Templates mit PHP

Dieses Tutorial beschreibt in mehreren Teilen wie man Templates in PHP verwendet. Ferner erhält man eine Einführung in die Entwicklung eines eigenen Templatesystems. ...

mortalan@

Autor : mortalan@
Category: PHP-Tutorials

Eigene Web Services mit PHP5 bereitstellen? Kein Problem!

PHP5 bietet das nötige Rüstzeug, um bequem und schnell den eigenen Web Service auf die Beine zu stellen. ...

beebob

Autor : beebob
Category: PHP-Tutorials

Spielereien mit Zeit und Datum

Das Rechnen mit Datum und Zeit ist nur selten unproblematisch, PHP stellt uns dafür zahlreiche Funktionen zur Verfügung. Wir wollen uns im folgenden ein paar davon ansehen und an Beispielen erproben. ...

Stephane

Autor : Stephane
Category: PHP-Tutorials

Counter auf MySQL Basis

Neben der Möglichkeitet, einen Counter per Textfiles zu programmieren, besteht auch die Möglichkeit, MySQL zu verwenden. ...

Lukas Beck

Autor : Lukas Beck
Category: PHP-Tutorials

Publish a tutorial

Share your knowledge with other developers worldwide

Share your knowledge with other developers worldwide

You are a professional in your field and want to share your knowledge, then sign up now and share it with our PHP community

learn more

Publish a tutorial