Geschrieben von managergames am 06.11.2004, 09:16

Hallo, dies ist heute der erste Teil des eigenen Boards, die anderen kommen bald:
1. Registrierung von Usern
2. Beiträge entstehen lassen
3. Beiträge anschauen
4. Auf Beiträge antworten
5. Beiträge löschen

Benötigt:
- PHP-Webspace
- PHP-Grundwissen (empfehlenswert)
- HTML-Kenntnisse
- Viel Zeit

Wenn ihr dieses Script benutzt, schreibt mir bitte :
m a n a g e r g a m e s @ w e b . d e

Der ganze Workshop ist von mir entwickelt.

Und jetzt gehts los, wie sie die User registrieren.

Es wird eine Frame-Konstruktion empfohlen, auf der einen Seite die Links rechts die jeweilige Datei.

Dann macht ihr ein Anmeldeformular. Es muss dort mit dem Formulartyp POST die Namen nick und PW verschickt werden.

<form action="Link zur nächsten Datei" method=post>

<input type="text" name="nick">
<input type="text" name="PW">

</form>

Der Link zur nächsten Datei muss dahin, wo ihr die folgende Datei nun speichert:

<?

Hier werden die Daten (gewünschter Nick und Passwort) aus dem Formular ausgelesen:

$nick=$HTTP_POST_VARS['nick'];
$PW=$HTTP_POST_VARS['PW'];

In einem Ordner User (der kann auch geändert werden) werden alle Passwörter gespeichert ...

$filename ="User/".$nick.".txt";

$laengenick = strlen($nick);
$laengePW = strlen($PW);

... wenn der Nickname und das Passwort mehr als 6 Zeichen hat. Für diesen Ordner empfehle ich .htacess-Schutz. Dafür gibts aber woanders eine Extra-Hilfe.

if (($laengenick<6) or ($laengePW<6))
{
if ($laengenick<6) { echo "Nickname kürzer als 6 Zeichen<br>";}
if ($laengePW<6) { echo "Passwort kürzer als 6 Zeichen<br>";}

Sonst wird hier ein Fehler angezeigt.

}

else{

Jetzt wird geprüft, ob die Datei des Benutzers sonst existiert, dann ist der Name schon belegt...

if (file_exists($filename))
{
echo "Der Name ist bereits vergeben";
}

else
{
... und wenn das nicht so ist, dann wird das Passwort in der Datei gespeichert und fertig ist die Anmeldung fürs Board.

$datei=fopen($filename,"w");
fwrite($datei, $PW);
echo "Registration erfolgreich abgeschlossen!";

}

Das war der erste Teil, die anderen kommen bald.

}

echo "<center><a href="http://www.djcrackman.net/usr/deinboard/index.htm">Code programmiert von Thomas S.</a> <a href="mailto:deinboard@web.de">E-Mail</a></center>";
?>

Und jetzt gehts los, wie man Beiträge schreibt.

Bisher haben wir eine Frame-Konstruktion, auf der einen Seite davon ist schon ein Link zur Registration.

Heute kommt der Zweite hinzu:

Erstell eine Datei schreiben.php und bau darin ein Formular mit den Feldern (und Feldnamen)
Name (name)
Passwort (passwort)
Thema (thema)
Text (text)

Für das Thema könnt ihr den Feldtyp Select verwenden.

Leite das Formular an die send.php weiter...

send.php
---------

<?
$name=$_POST['name'];

Der Name wird geladen aus dem Formular, der Link zu der dazugehörige Userdatei wird erstellt ($file).

$file="User/".$name.".txt";

Wenn es diesen Ordner gibt, dann....

if(is_file($file))
{

$passwort=$_POST['passwort'];

holt man das Passwort aus dem Formular...

$namen="User/".$name.".txt";
$testen=fopen($namen,"r");
$richtig=fgets($testen,1000);

und lädt aus der Userdatei das Passwort.

Stimmen sie überein...

if ($richtig=$passwort)
{

was hier drin steht siehe unten

}

else {echo "Falsches Passwort";}

Ist das Passwort falsch, dann steht diese Fehlermeldung da, ...
}
else {echo "Falscher Name";}

Gibt es den Namen nicht taucht diese Fehlermeldung auf.

echo "<center><a href="http://www.djcrackman.net/usr/deinboard/index.htm">Code programmiert von Thomas S.</a> <a href="mailto:deinboard@web.de">E-Mail</a></center>";

?>

Und das passiert, wenn das Passwort richtig ist:

$text=$_POST['text'];
$kategorie=$_POST['kategorie'];
$themaa=$_POST['thema'];

Der Text die Kategorie und das Thema werden geholt.

$thema=$kategorie.": ".$themaa;

Das Thema ist "Kategorie: eingegebenes Thema"

$timestamp=time();
$datum=date("YmdHis",$timestamp);
$zeit1=date("d.m.y",$timestamp);
$zeit2=date("H.i",$timestamp);

Hier werden Zeiten geholt.

$datum: unter diesem Namen wird die Datei nachher gespeichert (mit Hilfe dessen wird nachher die richtige Reihenfolge angezeigt)
$zeit1 und $zeit2: Wann wurde die Nachricht geschrieben.

$text=ereg_replace("<","&lt;",$text);
$text=ereg_replace(">","&gt;",$text);
$thema=ereg_replace("<","&lt;",$thema);
$thema=ereg_replace(">","&gt;",$thema);

Im Text und im Thema werden < und > verboten, damit keine HTML-Codes möglich sind.

$inhalt="<br><br><b>".$thema."</b><br><br>".$name ." schrieb am ".$zeit1." um ".$zeit2.":<br>".$text."<br><br>";

Der gesamte Text ist dann $inhalt: Das Thema fett geschrienen, dann die Uhrzeit und dann der Text.

$datei = fopen("Themen/".$datum.".php","w");
fwrite($datei, $inhalt);

Das ganze wird unter dem Datum im Ordner Themen gespeichert.

$datei = fopen("Namen/".$datum.".php","w");
fwrite($datei, $thema);

Das Thema wird unter dem gleichen Namen im Ordner Namen gespeichert.

echo "<a href="index.php">Zur Übersicht</a><br>";

Und jetzt gehts los, wie man Beiträge anzeigt.

Bisher haben wir eine Frame-Konstruktion, auf der einen Seite davon ist schon ein Link zur Registration.

Heute kommt der Zweite hinzu:

Das war der andere Teil des Frames hinzu, die Übersicht:

thema.php
---------

<?

$von=$HTTP_GET_VARS['von'];
$bis=$von+19;

Es werden immer 20 Beiträge angezeigt, hier wird ausgerechnet, welche.

$b=0;
$verzeichnis=dir("Themen/");
$i=0;

while($eintrag=$verzeichnis->read())
{

$nummer[$i]=$eintrag;
$i++;

}

Alle Dateien im Ordner Themen werden in einen Array gerufen und sortiert.

sort($nummer);

$verzeichnis->close();

echo "<table BORDER=1>";

while ($i>1)
{

$eintrag=$nummer[$i];

$name="Namen/".$eintrag;
$datei = fopen($name,r);

Jetzt wurd die Überschrift herausgeholt für jede Datei.

$text = fgets($datei,999);

$eintrag=ereg_replace(".php","",$eintrag);
$link="text.php?ID=".$eintrag;

Dann löschen wir das .php aus dem Eintrag
und machen einen Link zu text.php mit dem Get des Eintrages.
Damit kann man nachher in die text.php-Datei weitere Links einfügen.

$kategorie=$_GET["kategorie"];
$pos=strpos($text,$kategorie);

Dann wird die KAtegorie rausgeholt und es wird überprüft, in welchen Einträgen die Kategorie vorhanden ist.

if ($pos !== FALSE)
{
$text="<tr><td width=300><a href="$link">$text</a></td></tr>";

Für alle wird dann ein Tabellenfeld gemacht...

$all[$b]=$text;

... und die werden wieder in einen Array gebracht!

$b=$b+1;

}

$i=$i-1;
}

$c=0;
$zahl=$b;

$zahl=$zahl/20;

Jetzt teilt man die Zahl der Einträge durch 20 (Einträge pro Seite)...

$aufgerundet=ceil($zahl);

... und rundet auf.
$seite=0;
while ($seite!=$aufgerundet)
{
$seite=$seite+1;
$vonrech=$seite*20-20;

für jede Seite wird ausgerechnet, welche Beiträge betroffen sind...

if ($von!=$vonrech)
{
echo "<a href="thema.php?kategorie=".$kategorie."&von=".$vonrech."">Seite ".$seite."</a> ";

... und dann wird ein Link dazu gemacht, es sei denn...

}
else
{
echo "Seite ".$seite." ";

... die Seite ist schon geöffnet, denn dann wird kein Link dazu erzeugt.

}

}

while ($c!=$b)
{
$text=$all[$c];

if (($c >= $von) and ($c<=$bis))
{
echo $text;
}

$c=$c+1;

}

Nun wird der Text (das Tabellenstück von weiter oben) ausgegeben
und die Tabelle geschlossen.

echo "</table>";

?>

Und jetzt gehts los, wie man Beiträge anzeigt.

Bisher haben wir eine Frame-Konstruktion, auf der einen Seite davon ist schon ein Link zur Registration.

Heute kommt schreiben wir die Datei text.php:

text.php
-------
<?

include("test.php");

$ID=$HTTP_GET_VARS['ID'];
include("Themen/".$ID.".php");

include("test.php");

?>

Man fügt jeweils oben und unten die Datei test.php ein, dass ist die Datei in der nachher der Antworten-Link erscheint.

Dann holt man die ID raus und fügt noch die Datei ein.

test.php
-------
$ID=$HTTP_GET_VARS['ID'];
$an="antworten.php?ID=".$ID;
<a href="$an" >Antworten</a>

In die Datei, die oben und unten überall drin ist, kommt der Link zum Antworten hinzu, mit dabei per GET die ID.

Jetzt kommt die Antwortfunktion:

antworten.php
------------

Erstell eine Datei schreiben.php und bau darin ein Formular mit den Feldern (und Feldnamen)
Name (name)
Passwort (passwort)
Text (text)
ID (ID) als verstecktes Feld (hidden) mit value="<? echo $ID; ?>" !!

und leite es an add.php weiter.

add.php
-------

<?

$name=$_POST['name'];
$file="User/".$name.".txt";
if(is_file($file))

Das übliche: Der Name wird geholt und überprüft, ob er richtig ist!

{

$passwort=$_POST['passwort'];
$namen="User/".$name.".txt";

$testen=fopen($namen,"r");
$richtig=fgets($testen,1000);

if ($richtig==$passwort)
{

Das Passwort wird auch überprüft, indem man das Richtige aus der Datei holt und mit dem Eingegebenem
vergleicht.

$text=$_POST['text'];
$ID=$_POST['ID'];

Der Text und die ID werden geholt, das alte Thema und der alte Titel werden in Variablen gespeichert!

$datei=fopen("Themen/".$ID.".php","r");
$alt=fgets($datei,10000);
$datei=fopen("Namen/".$ID.".php","r");
$thema=fgets($datei,10000);
unlink("Themen/".$ID.".php");
unlink("Namen/".$ID.".php");

Dann werden die alten Dateien gelöscht, ...

$timestamp=time();
$datum=date("YmdHis",$timestamp);
$zeit1=date("d.m.y",$timestamp);
$zeit2=date("H.i",$timestamp);

$text=ereg_replace("<","<",$text);
$text=ereg_replace(">",">",$text);

... wir holen das aktuelle Datum ...

... und erfinden die Variable $inhalt, die den gesamten Text enthält.

$inhalt=$alt."<br><br>".$name ." schrieb am ".$zeit1." um ".$zeit2.":<br>".$text."<br><br>";

$datei = fopen("Themen/".$datum.".php","w");
fwrite($datei, $inhalt);

$datei = fopen("Namen/".$datum.".php","w");
fwrite($datei, $thema);

Der Text und der Titel werden dann unter dem aktuellen Datum gespeichert!

echo "<a href="index.php">Zur Übersicht</a><br>";

Und dann gehts zur Übersicht!

}

else {echo "Falsches Passwort";}
}
else {echo "Falscher Name";}

Dann kommt noch die Fehlermeldung für falsches Passwort und für einen falschen Namen.

?>

Das wars soweit, wie ihr Beiträge löscht und noch einige Infos zu Erweiterungen gibts nächstes mal!

Bisher haben wir eine Frame-Konstruktion, auf der einen Seite davon ist schon ein Link zur Registration.

Heute kommt schreiben wir die Datei test.php:

test.php
-------
$ID=$HTTP_GET_VARS['ID'];
$an="antworten.php?ID=".$ID;
<a href="$an" >Antworten</a>
$loeschen="Admin/loeschen.php?ID=".$ID;

In die Datei, die oben und unten überall drin ist, kommt noch der Link zum Löschen hinzu hinzu, mit dabei per GET die ID.

Jetzt kommt die Löschfunktion:

Admin/loeschen.php
-----------------
<?
$ID= $HTTP_GET_VARS['ID'];
?>
<form action="delete.php" method=get>
ID: <input type="text" name="ID" value="<? echo $ID; ?>">
PW: <input type="text" name="PW">
<input type="submit" value="Löschen">
</form>

Der ID wird ausgelesen und ein Formular erstellt, mit 2 Feldern, ID und PW (Passwort).

Admin/delete.php
-----------------

<?

$PW= $HTTP_GET_VARS['PW'];
$ID= $HTTP_GET_VARS['ID'];

if ($PW=="Ihr Passwort bitte hier eintragen")
{

Es wird überprüft, ob das Passwort übereinstimmt ...

$dat="../Themen/".$ID.".php";
$date="../Namen/".$ID.".php";
unlink($dat);
unlink($date);

... und dann werden die beiden Dateien gelöscht!

echo "Gelöscht!";
echo "<br> <a href="../index.php">Zurück zur Startseite</a>";
}
else
{echo "Fehler!!";
echo "<br> <a href="../index.php">Zurück zur Startseite</a>";}

Bei einem Fehler erscheint diese Fehlermeldung!

?>

Für das Verzeichnis User/ mit den Userdateien, empfiehlt sich noch ein htaccess-Schutz.

ICh hoffe der Workshop hat euch gefallen!!

Thomas

Bewertung Anzahl
6
54,5 %
6 Bewertungen
5
27,3 %
3 Bewertungen
4
9,1 %
1 Bewertungen
2
9,1 %
1 Bewertungen