Forum programmieren mit MySQL

webstylez.net hat nen script das die "/" aus dem code löscht !!!
also nicht meine schuld :)


M0in erstmal ich habe mich jetzt mal dazu entschlossen ein forum tut für euch zu machen ... man findet so was ja nicht bei google ... ich zumindest nicht :)

So Also ihr könnt nicht viel von dem forum erwarten ... man wird nichts löschen und nichts editieren können ich mein die funktionen sind ja nicht lebenswichtig, und man muss sich ach nicht registrieren!
Es soll einfach nur zeigen wie ein ein forum functioniert ...
Ich habe das forum in 2 nächten für euch neu geschrieben, also seit dankbar!

Ich erkläre im code einiges aber am schluss erklär ich euch das ganze prinzip wenn ihr es noch nicht gerallt habt :D

1.Anlegen der tabbelen mit phpmyadmin
Führt einfach folgenden code in euerm phpmyadmin aus (es sollte ja jeder phpmyadmin haben) !

CREATE TABLE posts (
id INT (6) not null AUTO_INCREMENT,
topicid INT (6) not null,
name VARCHAR (30) not null,
mail VARCHAR (50) not null,
zeit VARCHAR (10) not null,
post TEXT not null,
PRIMARY KEY (ID)
);
CREATE TABLE topics (
id INT (6) not null AUTO_INCREMENT,
topicname VARCHAR (60) not null,
PRIMARY KEY (id)
);


Jetzt solltet ihr in eurer datenbank 2 tabbelen haben einmal posts und eine topics
Bei mir geht das also seht zu :P

2.Anlegen der config.php
Also ich hab es lieber wenn ich meine Verbindungs daten und meine Verbindung in einer extra datei habe da wir mit mehren dateien arbeiten! Dann muss man die Verbindung einfach nur includen!
Also schreibt volgendes in eure config.php (ihr msst eure daten noch einstellen!):


<?php
/* --------------------------------------------------------
Datei config.php
Hier must du noch deine daten einstellen :D !
--------------------------------------------------------*/

mysql_connect("localhost","deinName","deinPassword") or die // server, user, passwort
("Keine Verbindung moeglich");
mysql_select_db("deineDatenbank") or die ("Die datenbank existiert nicht"); // datenbank Name

?>


3.Die index.php datei
Jetzt brauchen wir noch eine datei die uns die topics ausgiebt damit wir wissen was überhaupt los ist ;) dazu ist die index.php ...
Es ist anzumerken das wenn du nur die index.php ausprobieren willst du dir nur die topics angucken kanst du mir noch nicht die datei zum angucken der posts haben!
Der code:


<?php
/* --------------------------------------------------------
Datei index.php
Dies ist die start seite wo alle topics aufgelisted!
--------------------------------------------------------*/

include("config.php"); // Einstellungen und Verbindung wird eingefügt
echo "<table width="100%" border="1" cellpadding="5" cellspacing="0" bordercolor="#000000" style="border-collapse: collapse">";
echo "<a href="add-topic.php">Neuen Topic erstellen</a>"; // Link zum topic erstellen (geht erst wenn die datei existiert)
echo "<TR VALIGN="TOP"><TD>
<strong>Topics:</strong></TD>
</TR></TD></TR>";
$topic_query = mysql_query("SELECT * FROM topics ORDER BY id"); // Sortiert allen Inhalt aus der tabbele "topics" nach "id"
while($topic = mysql_fetch_object($topic_query)) // Speichert die topics in einer while schleife
{
echo "<TR>
<TD VALIGN=TOP>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING="0" WIDTH=100% style="border-collapse: collapse" bordercolor="#000000">
<TR><TD>
<a href=view.php?topicid="; echo $topic->id; // Gibt die topic id aus
echo "><strong>"; echo $topic->topicname; // Giebt den Link namen aus also den topicnamen
echo "</strong></a>
</TD></TR>
</TABLE>
</TD></TR>";
}
if (mysql_num_rows($topic_query) < 1) // Wenn weniger als 1 (also 0) Einträge gefunden werden...
{
echo "<td><CENTER><BR><B>Keine Topics Vorhanden</B><BR><BR></CENTER></td>"; // ... sagt er mir das ;D
}
?>


4. Die view.php datei!
Mit der View.php kanst du dir die post durchlesen also sie giebt die post aus indem die action topicid gesetzt wird die abfragt welche topic id der post hat also wenn zb view.php?topicid=3 gegeben ist werden alle posts aufgelistst die topicid = 3 haben!
Der code :


<?php
/* --------------------------------------------------------
Datei view.php
mir dieser datei kanst du dir die beiträge also die post angucken !!!
--------------------------------------------------------*/

include("config.php"); // Einstellungen und Verbindung wird eingefügt

$topic_query = mysql_query("SELECT topicname FROM topics WHERE (id=$topicid)"); // Er wählt die Zeile wo id = topicid ist aus und ...
while($topic = mysql_fetch_object($topic_query)) // ... speichert sie in einer while schleife
{

echo "<a href="index.php">Zurück</a> || <a href="add-post.php?topicid=""; // link zum post erstellen ...
echo $topicid; // ... mit topicid = $topicid
echo "">Antworten</a><table width="100%" border="1" cellpadding="5" cellspacing="0" bordercolor="#000000" style="border-collapse: collapse"><tr>
<td><strong>Topic: ";
echo $topic->topicname; // Giebt den Topic namen aus
echo "</strong></td></tr>";

$post_query = mysql_query("SELECT * FROM posts WHERE (topicid='$topicid') ORDER BY zeit"); // Sortiert allen Inhalt aus der tabbele topics und ortnet es nach "topicidid"
while($post = mysql_fetch_object($post_query)) // Speichert die posts in einer while schleife
{
echo "<tr><td width="100%"><strong><a href="mailto:";
echo $post->mail; // gibt die email adresse aus
echo "">";
echo $post->name; // giebt den namen aus
echo "</a></strong> <font size="2">,schreib am ";
echo date("d.m.Y",$post->zeit); // wandelt die TimeStamp in ein reichtiges datum um
echo ", um ";
echo date("H:i",$post->zeit); //wandelt die TimeStamp in die richtige zeit um
echo "Uhr</font>
<hr color="#000000" size="1">";
echo $post->post; // giebt den text aus
echo "</td></tr>";
}
}
echo "</table>"; // ende der tabbele wenn es einer nicht weiß

if (mysql_num_rows($post_query) < 1) // wenn weniger als 1 also 0 post in der tabbele ...
{
echo "<center>

<b>In Deisem Topic sind keine Posts ...!</b>


</center>"; // ... gebe es mir aus !
}
?>


5. Die add-topic.php datei!
Wie der name der datei scho sagt handelt es sich um die datei zum topic erstellen, sie speichert einen neuen eintrag in topics und einen post mit der dazugehörigen topicid damit der post weiß wo er hin gehört :P !

datei:


<?php
/* --------------------------------------------------------
Datei add-topic.php
Hier werden die topics mit einem post geschrieben!
--------------------------------------------------------*/

include("config.php"); // Einstellungen und Verbindung wird eingefügt

if ($action=="add") // wenn die action "add" gegeben ist ...
{
if ($name=="" or $email=="" or $post=="") // ... überprüfe ob name, email oder post lehr sind wenn ja ....
{
echo "Du must ALLE Felder ausfüllen!!!"; // weise mich drauf hin ....

exit; // ... und beende die funtion !!!
}

function addtopic () // hier muste ich eine neue function machen da ich probleme mit der übergabe der topicid hatte!
{
global $topicname; // die variable $topicname aus einem formular
$new_topicname = addslashes($topicname); // $new_topicname bekommt splashes
$topic_query = mysql_query("INSERT INTO topics VALUES ('NULL','$new_topicname')"); // schreibt nix in die erste spalte also in id da ist ja auto_increamed an und in topicname schreibt er $new_topicname
if (mysql_error() != "") // wenn ein mysql fehler kommt ...
{
echo "
<p><center><b>Es ist ein fehler aufgetreten :"; // ... sage es mir ...
echo mysql_error(); // ... und gebe den fehler aus !!!
echo "</b></center></p>";
exit;
}
return mysql_insert_id();
}


$zeit = time(); // die variable $zeit bekommt den wert time() damit sie als timestamp geschrieben werden kann
$topicid = addtopic(); // topicid bekommt den werd addtopic() das war das problem weshalb ich eine neue function gemacht hab damit er den post auch richtig zuortnen kann!
$new_email = addslashes($email); // $new_email wird zu splashes hinzugefügt
$new_name = addslashes($name); // das gleiche wie eine zeile höher
$new_post = addslashes(nl2br(htmlspecialchars($post))); // giebt den string mir vor jeder neuen zeile ein <br/> aus damit kein html geschriben werden kann
$insert = mysql_query("INSERT INTO posts VALUES ('NULL','$topicid','$new_name','$new_email','$zeit','$new_post')"); // speichert alles in die tabbele "posts"
echo "Dein topic wurde gespeichert <P>Du kannst jetzt <a href="index.php">zurueck</a> gehen "; // sag mir beschreid wenn es geklappt hat !
if (mysql_error() != "") // wieder das fehler melde teil ..
{
echo "
<p><center><b>Es ist ein fehler aufgetreten :";
echo mysql_error();
echo "</b></center></p>";
exit;
}
}
else // wenn keine action = "add" gegeben ist gebe das untengenate formulaaaaaaa aus was ich nicht erkläre
{

echo "<FORM METHOD=POST ACTION="";
echo $PHP_SELF; // gleiches docoment
echo ""><INPUT TYPE="hidden" name="action" value="add">
<table border=0 cellpadding=0 cellspacing=0 width=95%>
<TR><td>
<table border=0 cellpadding=4 cellspacing=1 width=100%>
<tr>
<td >
<B>Topic Name:</B></td><td> <INPUT TYPE="TEXT" NAME="topicname" SIZE=25>
</td></tr>
<tr>
<td >
<B>Dein Name:</B></td><td> <INPUT TYPE="TEXT" NAME="name" SIZE=25>
</td></tr>
<tr>
<td>
<B>Deine Email adresse:</B></td>
<td> <INPUT TYPE="text" NAME="email" SIZE=25>
</td></tr>
<tr>
<td valign=top>
<B>Post:</B>




Es ist kein Html erlaubt!

<font size="2">Du kannst jetzt noch smiles oder BBcode einfügen
mit dem tut vom rockstar ;D </font>
</td>
<td>
<TEXTAREA NAME="post" ROWS=10 COLS=45 WRAP="VIRTUAL"></TEXTAREA>
</td></tr>
</table>
</td></tr>
</table>
<P>
<CENTER>
<INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Submit Post">
<INPUT TYPE="RESET" NAME="Reset" VALUE="Clear Fields">
</CENTER>
</FORM>";

}
?>


6. add-post.php brauchen wir auch noch!
Ja add-post ist wie der name schon sagt die datei zum speichern der posts... sie speichert den post mit der dazugehöriegen topicid!

da code ;):


<?php
/* --------------------------------------------------------
Datei add-post.php
In dieser datei werden die post geschrieben!
--------------------------------------------------------*/

include("config.php"); // Einstellungen und Verbindung wird eingefügt
if ($action=="add") // wenn action add gegenen ist ...
{
if ($name=="" or $email=="" or $post=="") // überprüfe ob name , email oder post lehr sind
{
echo "Du must ALLE Felder ausfüllen!!!"; // und sag es mir
exit;
}
$zeit = time(); // timestamp ...
$new_email = addslashes($email); // .... hab ich das nicht alles schon bei der add-post.php erklährt?
$new_name = addslashes($name); // das auch schon
$new_post = addslashes(nl2br(htmlspecialchars($post))); // und das erst recht
$insert = mysql_query("INSERT INTO posts VALUES ('NULL','$topicid','$new_name','$new_email','$zeit','$new_post')"); // in die tabbele posts schreiben ...
echo "Dein post wurde gespeichert <P>Du kannst jetzt <a href="view.php?topicid=""; // und mir sagen das es geklappt hat
echo $topicid;
echo "">zurueck</a> gehen ";
if (mysql_error() != "") // hier schon wieder das fehler teil ne ne ...
{
echo "
<p><center><b>Es ist ein fehler aufgetreten :";
echo mysql_error();
echo "</b></center></p>";
exit;
}
}
else // also wenn keine action namens add gegeben ist mache wieder volgendes
{
echo "<FORM METHOD=POST ACTION=""; // wider ein forumular ...
echo $PHP_SELF;
echo ""><INPUT TYPE="hidden" name="action" value="add">
<INPUT TYPE="hidden" name="topicid" value="";
echo $topicid; // er muss auch noch die topicid speichern damit der post weiß wo er hingehört!!!
echo ""><table border=0 cellpadding=0 cellspacing=0 width="95%">
<TR><td>
<table border=0 cellpadding=4 cellspacing=1 width=100%>
<tr>
<td>
<B>Dein Name:</B></td><td>
<INPUT TYPE="TEXT" NAME="name" SIZE=25>
</td></tr>
<tr>
<td>
<B>Deine Email adresse:</B></FONT></td>
<td><INPUT TYPE="text" NAME="email" SIZE=25>
</td></tr>
<tr>
<td valign=top>
<B>Post:</B>




Es ist kein Html erlaubt!

<font size="2">Du kannst jetzt noch smiles oder BBcode einfügen
mit dem tut vom rockstar ;D </font>
</td>
<td>
<TEXTAREA NAME="post" ROWS=10 COLS=45 WRAP="VIRTUAL"></TEXTAREA></td></tr>
</table>
</td></tr></table>
<P>
<CENTER>
<INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Submit Post">
<INPUT TYPE="RESET" NAME="Reset" VALUE="Clear Fields">


</CENTER>
</FORM>"; // sooo das war ja laaaaangweilig also das war eine formulaaaa !
}
?>



7. Die Erklärung 8o
So also ich hoffe mal ihr habr das prinziep verstanden ist ja gar nicht soo schwehr!
Wir haben also 5 dateien, die config.php muss ich wohl nicht erkleren,

aber die index.php :D Sie giebt eine tabbele aus mit einem link zur add-topic.php damit man direckt auf der startseite einen topic erstellen kann, dann fragt sie alle daten aus der topics tabbele ab und sortiert sie nach id und listed alle topics auf mit einem link zur view.php mit der action topicid damit die view datei weiß welche posts sie ausgeben soll!
Wenn weniger als 1 einträge in der tabbele topics gefunden werden sagt das keine topics vorhanden sind!

So jetzt sind wir bei der view.php angelangt, sie giebt die post aus die die action topicid haben bzw davon den wert also die post bekommen immer den wert topicid zugeortnet damit man halt weiß in welches topic der post gehört! Auch hier wird geprüft ob nicht weniger als ein eintrag mit dem wert topicid = bla gesetz ist wenn dann keine einträge da sind echoet er das auch wieder aus!

In view.php ist auch ein link zu add-post.php auch mit einer topicid = bla damit die add-post.php in die tabbele post einen beitrag schreiben kann mit der dazugehörigen topicid damit es hinterher auch in diesem topic steht!

Die add-topic.php schreibt einen eintrag in topics mit topicname (der name der dann auf der index.php steht) und lasst id freiß (auto_incremt) und er macht auch einen eintrag in die post (der erste post, die fragt oder was auch immer) dabei muste ich das in topic schreiben in eine neue fuction machen damit ich die topicid für den post habe ... ist etwas komplizierter aber wenn ihr einigermaßen logisch denken könnt sollte das kein problem sein :D


So wir haben 04:34 Uhr ich geh ins bett und speicher dieses tut und schreibe es morgen auf webstylz.net und hoffe es gefällt euch!

Wenn ihr fragen oder probleme habt meldet euch im icq: 177088755 oder per mail [email]pathos@gmx.net[/email] oder schreibt auf webstylz.net ins forum da schau ich auch heufiger mal vorbei ;)!

ach ja alle rechtschreibfehler sind beabsichtigt ^^ !!!

Kommentare

JayT
JayT am Freitag, 15. August 2003 um 20:43

Also irgendwie stimmt was nicht mit der add-post.php der speichert die posts nicht bei mir, sondern nur die Topics die ich schreibe oder ander

hufj
hufj am Sonntag, 7. September 2003 um 17:18

man sind die fehler beabsichtig *g*
<br>ich hoffe schon sonst war das keine gute leistung aber super wenn man alles ausgebessert hat

knabberhase
knabberhase am Mittwoch, 7. April 2004 um 11:26

ehm... gibt es auch einen beispiel wie es am ende aussieht ?

Fetzer
Fetzer am Donnerstag, 15. April 2004 um 14:29

naja das mit " hat er wohl noch nicht so raus! Man muss sich nur ma die add-post.php angucken! müsste man alles neu ausbessern!