5x bewertet

Gästebuch mit Adminfunktion I

von SmaX  |  13.02.2010 um 22:42 h
Skripte
Typ: Skripte
Stufe:Mittel
Hey!

In diesem Tutorial zeige ich Euch, wie man ein komplettes Gästebuch inklusive kleiner Adminfunktion und Captcha erstellt.


Vorarbeit

Dieses 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ästebuch

Anschließ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.


Administration

Weiter 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.


Captcha

Heutzutage 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($img000); //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:

Bild

Leider sind die Überschriften sehr groß geworden, konnte auch nach nachträglichem bearbeiten nichts mehr ändern

Have fun!

MfG SmaX



7 Kommentare




SmaX

Interessiert niemanden dieses Tutorial?! Ihr habt es euch doch (vor längerer Zeit) gewünscht?!

am 15.02.2010 um 23:42 Uhr


Nekoji

Habe das mal in den Bereich "Skripte" verschoben.
am 16.02.2010 um 11:05 Uhr


Nobi

finde es klasse, ein paar screens oder eine live vorschau wären noch klasse gewesen so kann der user sehen was er bekommt :) aber das tut ansich ist echt klasse geworden :)
am 16.02.2010 um 11:55 Uhr


Sasuke

cool xD
am 16.02.2010 um 12:23 Uhr


SmaX

Hey Danke,

Hab jetzt noch einen Screen eingefügt, wie dieses Gästebuch aussehen könnte..

MfG SmaX
am 16.02.2010 um 22:15 Uhr


Yuyeon

ich hab mir zwar eher ein einfaches forum gewünscht statt ein gb aber vielen dank für diese erweiterung des loginscripts, kann ich gut gebrauchen!! hoffe, es funktioniert auch einwandfrei (werde es gleich testen xD)
am 22.03.2010 um 19:46 Uhr


werock2040

Werde es auch gleich mal für meine Fotoseite Testen. Endlich mal ein halbwegs aktuelles Gätsebuchscript :)
am 12.11.2010 um 17:50 Uhr