Hey!
In diesem Tutorial zeige ich Euch, wie man ein komplettes Gästebuch inklusive kleiner Adminfunktion und Captcha erstellt.
VorarbeitDieses Gästebuch benötigt eine Mysql-Datenbank und durch die Adminfunktion wird auch die Loginreihe von Delite benötigt.
Da der Code größtenteils kommentiert ist, gehe ich nur den logischen Ablauf des Codes durch.
Erstellt zuerst eine Mysql-Tabelle:
 | My-SQL Code: |
CREATE TABLE gbook (
id INT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
name VARCHAR( 255 ) NOT NULL ,
email VARCHAR( 255 ) NOT NULL ,
homepage VARCHAR( 255 ) NOT NULL ,
message TEXT NOT NULL ,
comment TEXT NOT NULL ,
timestamp VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM ;
GästebuchAnschließend beginnen wir mit dem Code des Gästebuches, die PHP-File solltet ihr gbook.php nennen:
<?
//Daten einbinden
include("header.php");
include("db.php");
//NEUEN EINTRAG ERSTELLEN
if(isset($_REQUEST["save"])) //wenn speichern gedrückt wurde
{
if(!empty($_REQUEST["name"]) && !empty($_REQUEST["message"]))//wenn
name und message nicht leer
{
if($_SESSION["captcha"] == $_REQUEST["captcha"]) // wenn captcha
richtig
{
//datensatz einfügen
mysql_query("INSERT INTO gbook (name, email, homepage, message,
timestamp) VALUES ('".mysql_real_escape_string($_REQUEST["name"])."',
'".mysql_real_escape_string($_REQUEST["email"])."',
'".mysql_real_escape_string($_REQUEST["homepage"])."',
'".mysql_real_escape_string($_REQUEST["message"])."', '".time()."')
");
if(mysql_errno() == 0) // wenn keine mysqlfehler..
{
$meldung = "Gästebucheintrag wurde erfolgreich gespeichert!";//meldung
}
else //.. wenn doch
{
$meldung = mysql_errno()." : ".mysql_error();
}
}
else //wenn captcha nicht richtig
{
$meldung = "Der Sicherheitscode ist nicht richtig!";//meldung
}
}
else //wenn pflichtfelder nicht ausgefüllt..
{
$meldung = "Bitte fülle alle Pflichtfelder aus!";//meldung
}
}
echo "<h2>Gästebuch</h2>";
echo $meldung;
echo "<form action='gbook.php' method='post'>
<table>
<tr>
<td>Name*</td>
<td><input type='text' name='name'/></td>
</tr>
<tr>
<td>Email</td>
<td><input type='text' name='email'/></td>
</tr>
<tr>
<td>Homepage</td>
<td><input type='text' name='homepage'/></td>
</tr>
<tr>
<td>Nachricht*</td>
<td><textarea rows='3' cols='40' name='message'></textarea></td>
</tr>
<tr>
<td><img src='captcha.php' style='float:left;
margin-right:5px;'/></td>
<td>Sicherheitscode: <input type='text' name='captcha' /></td>
</tr>
<tr>
<td colspan='2'><input type='submit' name='save' value='Eintrag
speichern'/></td>
</tr>
</table>
</form>
(*Plichtfelder)<br /><br />";
$proseite = 10; //Einträge pro Seite
//Seitenfunktion
if(isset($_REQUEST["seite"]))
{
$seite = $_REQUEST["seite"];
}
else
{
$seite = 0;
}
$i = 0;
$hohlid = mysql_query("SELECT id FROM gbook");
while($id = mysql_fetch_object($hohlid))
{
if($i%$proseite == 0)
{
$act = $i/$proseite+1;
if($i == $seite)
{
echo $act;
}
else
{
echo "<a href='?seite=".$i."'>".$act."</a> ";
}
}
$i++;
}
//Einträge hohlen
$hohleintraege = mysql_query("SELECT * FROM gbook ORDER BY id DESC
LIMIT ".$seite.",".$proseite); //Eintrag hohlen und sortieren
while($eintrag = mysql_fetch_object($hohleintraege))
{
if(!empty($eintrag->email)) //wenn email vorhanden
{
$email = "| ".$eintrag->email." ";//in $email speichern
}
if(!empty($eintrag->homepage))//wenn homepage vorhanden
{
$homepage = "| ".$eintrag->homepage;// in $homepage speichern
}
//Datensatz ausgeben
echo "<table>
<tr>
<td>".$eintrag->name."</td>
</tr>
<tr>
<td>".$eintrag->message." am ".date("d.m.y", $eintrag->timestamp)." um
".date("H:i", $eintrag->timestamp)." Uhr ".$email.$homepage."</td>
</tr>
<tr>
<td><i>".$eintrag->comment."</td>
</tr>
</table>
<br />";
}
include("footer.php");
?>
Zuerst kommt der Scriptteil, der den Eintrag speichern soll. Hier wird zuerst überprüft, ob die Pflichtfelder (name, message) ausgefüllt sind, anschließend wird geprüft ob der Captcha richtig eingegeben wurde. Der Eintrag sollte dann in die Datenbank eingetragen werden, wenn dies ohne Fehler passiert ist, dann gibt es dem User eine erfolgreiche Meldung aus, wenn nicht, den jeweiligen Mysql Fehler.
Nach diesem Teil kommt das Formular, welches ihr selbst gestalten könnt. Das Formular enthält auch den Captcha (Sicherheitscode), den ich nachher näher erläutern werde.
Anschließend kommt die Seitenfunktion, sodass die Gästebucheinträge auf verschiedene Seiten verteilt werden, diese werde ich aber nicht näher erklären.
Zuletzt werden die Einträge ausgegeben, auch diesen Teil könnt ihr selbst gestalten, ich habe pro Eintrag einfach eine unsichtbare Tabelle verwendet.
AdministrationWeiter machen wir mit der Administrationsfunktion, die ermöglicht, Einträge zu löschen, zu bearbeiten und zu kommentieren. Die PHP-File sollte gb_admin.php heißen.
Hier der Code:
<?
//daten einbinden
include("header.php");
include("db.php");
if(isset($_SESSION["login"]) && exist("mitglieder WHERE gruppe =
'admin' AND id = '".$_SESSION["login"]."'")) //wenn eingeloggt und
admin
{
echo "<h2>Gästebuchadministration</h2>";//headline
if(exist("gbook"))// wenn einträge vorhanden
{
//EINTRAG LÖSCHEN
if(isset($_REQUEST["del"]) && exist("gbook WHERE id =
'".mysql_real_escape_string($_REQUEST["id"])."'"))//wenn del gedrückt
und id existiert
{
$delete = mysql_query("DELETE FROM gbook WHERE id =
'".mysql_real_escape_string($_REQUEST["id"])."'"); //eintrag löschen
if(mysql_errno() == 0) //wenn keine Fehler..
{
$meldung = "Eintrag wurde erfolgreich gelöscht!";//meldung
}
else //wenn doch..
{
$meldung = mysql_errno().": ".mysql_error();//meldung (fehler
ausgeben)
}
}
//EINTRAG BEARBEITEN/KOMMENTIEREN
if(isset($_REQUEST["edit"]) && exist("gbook WHERE id =
'".mysql_real_escape_string($_REQUEST["id"])."'")) //wenn edit
gedrückt und id existiert
{
if(!empty($_REQUEST["message"])) //wenn message nicht leer
{
$update = mysql_query("UPDATE gbook SET message =
'".mysql_real_escape_string($_REQUEST["message"])."', comment =
'".mysql_real_escape_string($_REQUEST["comment"])."' WHERE id =
'".mysql_real_escape_string($_REQUEST["id"])."'");
if(mysql_errno() == 0) //wenn keine Fehler..
{
$meldung = "Eintrag wurde erfolgreich bearbeitet!";//meldung
}
else
{
$meldung = mysql_errno().": ".mysql_error();//meldung (fehler
ausgeben)
}
}
else
{
$meldung = "Das Nachrichtfeld darf nicht leer sein!";
}
}
echo $meldung;//meldung ausgeben
//SEITENFUNKTION
$proseite = 10;
if(isset($_REQUEST["seite"]))
{
$seite = $_REQUEST["seite"];
}
else
{
$seite = 0;
}
$hohlcount = mysql_query("SELECT id FROM gbook");
$i = 0;
while($count = mysql_fetch_object($hohlcount))
{
if($i%$proseite == 0)
{
$act = $i/$proseite+1;
if($i == $seite)
{
echo $act;
}
else
{
echo "<a href='?seite=".$i."'>".$act."</a>";
}
}
$i++;
}
//EINTRÄGE AUSGEBEN
$hohleintraege = mysql_query("SELECT * FROM gbook ORDER BY id LIMIT
".$seite.",".$proseite."");
while($eintrag = mysql_fetch_object($hohleintraege))
{
if(!empty($eintrag->email)) //wenn email nicht leer
{
$email = "| ".$eintrag->email." ";
}
if(!empty($eintrag->homepage))
{
$homepage = "| ".$eintrag->homepage;
}
echo "<form
action='gb_admin.php?id=".$eintrag->id."&seite=".$_REQUEST["seite"]."'
method='post'>
<table>
<tr>
<td colspan='2'>".$eintrag->name." ".$email.$homepage."</td>
</tr>
<tr>
<td colspan='2'><textarea rows='4' cols='40'
name='message'>".$eintrag->message."</textarea>
<br />
Kommentar:
<br />
<textarea rows='2' cols='40'
name='comment'>".$eintrag->comment."</textarea>
</td>
</tr>
<tr>
<td><input type='submit' name='edit' value='Eintrag
speichern'/></form>
<td>
<form actin='gb_admin.php?id=".$eintrag->id."' method='post'>
<input type='submit' name='del' value='Eintrag löschen'/>
</form></td>
</tr>
</table>
</form>";
}
}
}
Hier erkläre ich auch wieder nur den logischen Ablauf. Zuerst wird überprüft, ob ihr eingeloggt und Admin seit. Hier müsst ihr es an Euer Rechtesystem ein bisschen anpassen. Anschließend beginnen die zwei Codeblöcke, welche für das löschen und bearbeiten/kommentieren verantwortlich sind. Es wird zuerst immer überprüft, ob die Einträge existieren, danach werden die Einträge verarbeitet (gelöscht/bearbeitet) und schließlich wird noch überprüft, ob dabei Fehler aufgetreten sind, wenn nein, dann wird eine Erfolgsmeldung ausgegeben, wenn ja dann wird der jeweilige Mysql-Fehler ausgegeben. Als nächstes kommt wieder die Seitenfunktion, wobei man bei $proseite die Zahl der Einträge, die pro Seite erscheinen sollen, angeben kann. Zuletzt werden die Einträge ausgegeben. Auch die Ausgabe könnt ihr wieder beliebig stylen.
CaptchaHeutzutage werden so gut wie überall Sicherheiten gegen Spam eingebaut, so auch in diesem Tutorial. Ich möchte in diesem Teil des Tutorials noch kurz erläutern, wie der Captcha in dem oben bereits erwähnten Formular verwendet wird. Für einen Captcha (Sicherheitscode der aus einer Grafik besteht) benötigt Ihr in diesem Fall eine 140 x 40 px große png-Grafik, eine Schriftart bzw. die ttf-File und natürlich den PHP-Code. Ich habe den Code aus einem bestehenden Tutorial hergenommen und leicht abgeändert. Ihr benötigt dafür nur noch den folgenden Code:
<?
session_start();
unset($_SESSION['captcha']);
function randomString($len) {
srand(date("s"));
//Der String $possible enthält alle Zeichen, die verwendet werden
sollen
$possible="abcdefghikmnpqrstuvwyz";
$str="";
while(strlen($str)<$len) {
$str.=substr($possible,(rand()%(strlen($possible))),1);
}
return($str);
}
$text = randomString(6); //Die Zahl bestimmt die Anzahl stellen
$_SESSION['captcha'] = $text;
header('Content-type: image/png');
$img = ImageCreateFromPNG('captcha.png'); //Backgroundimage
$color = ImageColorAllocate($img, 0, 0, 0); //Farbe
$ttf = $_SERVER['DOCUMENT_ROOT']."/SCHRIFTART.ttf"; //Schriftart
$ttfsize = 25; //Schriftgrösse
$angle = rand(0,3);
$t_x = rand(5,30);
$t_y = 32;
imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
imagepng($img);
imagedestroy($img);
?>
Dieser Code generiert aus dem Hintergrundbild (in diesem Fall captcha.png) und der Schriftart ein Bild mit einem String, welcher dann in der Session captcha gespeichert und dann anschließend in dem Formular von gbook.php mit der Eingabe des Formularfeldes verglichen wird. Einbinden tut man das Bild mit <img src=′captcha.php′/> wichtig ist, dass das auch captcha.php heißt und nicht versehentlich captcha.png.
Schlusswort Ich hoffe, dass Euch das Tutorial gefallen hat und das ihr es gebrauchen könnt.
EDIT: Hier noch ein Screen von dem Gästebuch wie es gestylt aussehen könnte:
Leider sind die Überschriften sehr groß geworden, konnte auch nach nachträglichem bearbeiten nichts mehr ändernHave fun!
MfG SmaX
SmaX
Interessiert niemanden dieses Tutorial?! Ihr habt es euch doch (vor längerer Zeit) gewünscht?!