Gaestebuch mit Adminfunktion
19.03.2008
08:12:29 Uhr15770 Aufrufe
5 Antworten
08:12:29 Uhr
5 Antworten
Noch nicht bewertet
Quelle: http://alice-grafixx.de/PHP-MYSQL-Tutoria ...
PHP / MYSQL Kenntnisse sind vorausgesetzt.
Ihr braucht einen Webspace der PHP unterstützt und eine MYSQL Datenbank hat.
Oftmals findet man Gaestebücher die für jede Funktion eine separate Seite haben. Grade wenn man ein CMS oder eine Internetseite mit vielen Seiten betreibt wird es schnell unuebersichtig. Hier werde Ich euch ein Gaestebuch vorstellen das mit lediglich einer Seite auskommt.
Das Gaestebuch besitzt auch eine Adminfunktion die ueber Sessions laeuft. Es ist also bequem moeglich die Eintaeäge zu loeschen oder zu kommentieren.
Ich hoffe Ich habe den Quelltext genuegend auskommentiert. Darin sollte alles Intressante für euch stehen.
PHP / MYSQL Kenntnisse sind vorausgesetzt.
Ihr braucht einen Webspace der PHP unterstützt und eine MYSQL Datenbank hat.
Oftmals findet man Gaestebücher die für jede Funktion eine separate Seite haben. Grade wenn man ein CMS oder eine Internetseite mit vielen Seiten betreibt wird es schnell unuebersichtig. Hier werde Ich euch ein Gaestebuch vorstellen das mit lediglich einer Seite auskommt.
Das Gaestebuch besitzt auch eine Adminfunktion die ueber Sessions laeuft. Es ist also bequem moeglich die Eintaeäge zu loeschen oder zu kommentieren.
Ich hoffe Ich habe den Quelltext genuegend auskommentiert. Darin sollte alles Intressante für euch stehen.
Kommen wir nun zur Datenbank:
Nennt Sie z.B.: gaestebuch und führt in MYADMIN diesen befehl aus:
Und hier der Quelltext der Datei guestbook.php
Dieses Tutorial war unter anderem eine Antwort auf diesen Thread
Rabbit
Nennt Sie z.B.: gaestebuch und führt in MYADMIN diesen befehl aus:
01.
CREATE TABLE `gb` ( 02.
`id` int(11) unsigned NOT NULL auto_increment, 03.
`name` varchar(60) '', 04.
`ip` varchar(100) '', 05.
`email` varchar(255) '', 06.
`hp` varchar(255) '', 07.
`msg` text, 08.
`date` varchar(30) '', 09.
`time` varchar(30) '', 10.
`kommentar` text NOT NULL, 11.
PRIMARY KEY (`id`) 12.
) ENGINE=MyISAM AUTO_INCREMENT=2 ;Und hier der Quelltext der Datei guestbook.php
01.
<?php 02.
session_start(); 03.
// ---------------------------- # Konfiguration # ----------------------------------------------------- 04.
$db_host = "localhost"; # Der Datenbank-Host 05.
$db_user = " "; # Der Datenbank-Benutzer 06.
$db_password = " "; # Das Passwort fuer die Datenbank 07.
$db_name = " "; # Der Datenbank-Name 08.
09.
$conn = mysql_connect($db_host,$db_user,$db_password) or die (mysql_error()); 10.
mysql_select_db($db_name, $conn) or die (mysql_error()); 11.
12.
$passwort = "123"; # Das Passwort für den Admin 13.
$mailinfo = "ja"; # email bei Eintrag ? ja oder nein 14.
$webmaster = "email@adresse.de"; # wenn bei mailinfo ja steht, dann hier eure email Adresse eintragen 15.
$datum = date("d.m.Y"); # Das aktuelle Datum fuer den Eintrag wird hier erstellt 16.
$zeit = date("H:i"); # Die aktuelle Zeit für den Eintrag wird hier erstellt 17.
// ---------------------------------------------------------------------------------------------------- 18.
19.
$action = isset($_GET['action']) ? ($_GET['action']) : ""; 20.
21.
// ------------------------------ Admin-Bereich ------------------------------------------ // 22.
23.
# Wenn auf den Logout Link gecklickt wird, wird hier die Session geloescht 24.
if ($action == "logout"){ 25.
session_destroy(); 26.
header("refresh:0;url=gb.php"); 27.
} 28.
29.
$rang = $_SESSION['rang']; 30.
$pass = strip_tags($_POST['password']); 31.
32.
# Wenn das Admin-Passwort falsch eingegeben wurde erscheint eine Fehlermeldung 33.
if (isset($_POST['submit']) && $pass != $passwort){ 34.
echo "Falsches Passwort!"; 35.
} 36.
37.
# Wenn das Passwort richtig war, wird der Admin-Rang auf 1 gesetzt und die Session gestartet 38.
else if (isset($_POST['submit']) && $pass == $passwort){ 39.
$_SESSION['rang'] = "1"; 40.
header("refresh:0;url=gb.php"); 41.
} 42.
43.
# --------- Loesch-Funktion ----------- # 44.
if ($action == "delete" && $rang == 1) { 45.
$id = $_GET['id']; 46.
47.
$loeschen = "DELETE FROM gb WHERE id=$id"; 48.
mysql_query ($loeschen) or die ("Konnte nicht geloescht werden!!!"); 49.
header ("Location: gb.php"); 50.
} 51.
?> 52.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 53.
<html xmlns="http://www.w3.org/1999/xhtml"> 54.
<head> 55.
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 56.
<title>Gästebuch</title> 57.
<meta name="robots" content="index,follow" /> 58.
<meta name="language" content="de" /> 59.
60.
<style type="text/css"> 61.
body { 62.
font: normal 0.8em verdana, tahoma, 'sans-serif'; 63.
color: #000; 64.
background-color: #EFEFEF; 65.
} 66.
67.
.post{ 68.
border: 1px solid #808080; 69.
background-color: #FFF; 70.
padding: 5px; 71.
width: 75%; 72.
} 73.
74.
.titel{ border-bottom: 1px solid #EFEFEF; } 75.
76.
.error{ font-weight: bold; color: #A61212; } 77.
78.
span{ font-style:italic; color: #395B7D; } 79.
80.
a { 81.
color: #49565E; 82.
font-weight: bold; 83.
text-decoration: none; 84.
} 85.
86.
a:visited { 87.
color: #63909C; 88.
text-decoration: none; 89.
} 90.
91.
a:hover, a:active { 92.
color: #7EB1C0; 93.
text-decoration: none; 94.
} 95.
</style> 96.
</head> 97.
<body> 98.
99.
<?php 100.
# Wenn auf den Admin-Link gecklickt wird, wird hier das Login-Feld erzeugt 101.
if ($action == "gbadmin"){?> 102.
<strong>Passwort:</strong> 103.
<form action="" method="post"> 104.
<input name="password" type="password" /> <input type="submit" name="submit" value="login" /> 105.
</form> 106.
<?php 107.
} 108.
109.
# Hier wird abgefragt, ob rang=1 ist. Wenn ja, wird hier die Kommentierfunktion für den Eintrag aufgerufen 110.
if($rang==1) { 111.
112.
$id = strip_tags($_GET['id']); 113.
114.
if($action == "kommentieren") { 115.
echo "<h3>Eintrag Nr. $id kommentieren</h3>"; 116.
echo "<form name='kommentar' method='post' action='gb.php?action=speichern&id=$id'> 117.
<textarea cols='55' rows='10' name='kommentar'></textarea><br /> 118.
<input type='submit' value='speichern' title='Kommentar speichern' name='komment' /> 119.
</form>"; } 120.
121.
if($action == "speichern") { 122.
$kommentar = mysql_real_escape_string($_POST['kommentar']); 123.
124.
# Und hier wird dann der Kommentar zu dem GB Eintrag in der DB gespeichert. 125.
$sql= "UPDATE gb SET kommentar = '$kommentar' WHERE id = '$id'"; 126.
mysql_query ($sql) or die ("Das Schreiben ist gescheitert!"); 127.
} 128.
} 129.
?> 130.
131.
<div align="left"> 132.
<a href="gb.php?action=reintragen">Ins Gaestebuch eintragen</a> 133.
<?php if($rang==1) { echo '<a href="gb.php?action=logout">Logout</a>'; } ?> 134.
</div> 135.
<br /> 136.
137.
<? 138.
139.
# Wenn der Link zum Eintragen ins GB geklickt wird, wird das Formular zum eintragen angezeigt 140.
if($action == "reintragen") { 141.
142.
if (isset($_POST['los'])){ # wenn auf Abschicken geklickt wurde 143.
144.
#--- Eingaben pruefen und ersetzen ---# 145.
$name = mysql_real_escape_string($_POST['name']); 146.
$email = mysql_real_escape_string($_POST['email']); 147.
$hp = mysql_real_escape_string($_POST['hp']); 148.
$msg = mysql_real_escape_string($_POST['msg']); 149.
$spam = mysql_real_escape_string($_POST['spam']); 150.
151.
# Wenn Feld Name und Nachricht nicht leer sind, und Spamfrage eichtig beantwortet wurde, dann speichern... 152.
if ($name != "" && $msg != "" && $spam == "blau") { 153.
154.
# Wenn Feld Homepage leer, dann schreiben: www.keine-angegeben.de 155.
if ($hp == "") { 156.
$hp = "http://www.keine-angegeben.de"; 157.
} 158.
159.
# Hier wird geprueft ob die homepage mit oder ohne http:// eingegeben wurde. 160.
if (strtolower(substr($hp, 0, 7)) == "http://"){ 161.
# Wenn ja, Feld so wie ist abspeichern 162.
$hp = "$hp"; 163.
}else { 164.
# Wenn nicht, soll er das "http://" manuell hinzufügen 165.
$hp = "http://$hp"; 166.
} 167.
$ip = $_SERVER['REMOTE_ADDR']; # IP-Adresse ermitteln 168.
169.
$msg = trim($msg); 170.
$msg = preg_replace('/(\s{4})\s+/', '\1', $msg); 171.
$msg = preg_replace('~(.)(\1){4,}~', '\1\1\1\1', $msg); 172.
$name = preg_replace('/(\s{4})\s+/', '\1', $name); 173.
$name = preg_replace('~(.)(\1){4,}~', '\1\1\1\1', $name); 174.
175.
# --- Und hier speichern wir in die Datenbank --- # 176.
177.
$schreiben = "INSERT INTO gb (id, name, email, hp, msg, ip, date, time) 178.
VALUES ('', '$name', '$email', '$hp', '$msg', '$ip', '$datum', '$zeit')"; 179.
$results= mysql_query ($schreiben) or die ("Das Schreiben ist gescheitert!"); 180.
181.
if ($results){ 182.
# Wenn oben bei mailinfo ja gewählt wurde, wird nach dem speichern eine email geschickt! 183.
if ($mailinfo == "ja"){ 184.
185.
# Betreffzeile für die EMail 186.
$betreff = "GB Eintrag"; 187.
188.
# Name und Nachricht des Eintrages für die Mail 189.
$body = "Es gibt einen neuen Eintrag im GB:\nName: $name Nachricht: $msg"; 190.
191.
# Hier wird die Mail versendet und zusammengesetzt 192.
mail("$webmaster","$betreff","$body\n"); 193.
} 194.
$go= 1; 195.
echo 'Vielen Dank fuer Ihren Eintrag ...'; 196.
197.
}else{ echo 'Fehler beim Eintragen...';} 198.
199.
}else{ # wenn nicht alle Pflichtfelder ausgefuellt wurden 200.
echo '<p class="error">Bitte alle mit * gekennzeichneten Felder ausfüllen!</p>'; 201.
} 202.
} // close submit 203.
204.
if ($go!= 1){ 205.
?> 206.
<form action="" method="post" id="eingabe"> 207.
208.
<input type="text" name="name" size="20" /> <label for="name">Name</label>* <br /> 209.
<input type="text" name="email" size="20" /> <label for="email">E-Mail</label> *<br /> 210.
<input type="text" name="hp" size="20" /> <label for="website">Homepage</label><br /> 211.
212.
<textarea cols="55" rows="10" value="msg" name="msg"></textarea> 213.
214.
<p>Spamschutzfrage *<br /> 215.
<b>Welche Farbe haben Schlümpfe?</b> Antwort: 216.
<input size="4" name="spam" type="text" /> 217.
218.
</p> 219.
220.
<input type="submit" value="Abschicken" title="Eintrag machen" name="los" /> 221.
<input type="reset" title="Felder leeren" value="Zuruecksetzen" name="stop" /></td> 222.
<br /> 223.
<p> mit * gekennzeichnete Felder müssen ausgefüllt werden</p> 224.
<br /> 225.
<br /></form> 226.
<?php 227.
} 228.
} // close reintragen 229.
230.
#--- Datenbank auslesen und anzuzeigende Seiten festlegen ---# 231.
232.
$proseite = 3; // Wieviele Eintraege pro Seite anzeigen? 233.
234.
if(!isset($_REQUEST["seite"])) { 235.
$seite = 0; 236.
} else { 237.
$seite = $_REQUEST["seite"]; 238.
} 239.
$count = 0; 240.
$abfrage = "SELECT id FROM gb"; 241.
$ergebnis = mysql_query($abfrage); 242.
while($row = mysql_fetch_object($ergebnis)) { 243.
244.
if($count%$proseite == 0) { 245.
$aktuelleseite = $count/$proseite+1; 246.
if($count == $seite) { 247.
echo $aktuelleseite." "; 248.
} else { 249.
echo "<a href='gb.php?seite=$count'>".$aktuelleseite."</a> "; 250.
} 251.
} 252.
253.
$count++; 254.
} 255.
256.
echo '<br /><br />'; 257.
258.
$result = mysql_query("SELECT * FROM gb ORDER by id DESC LIMIT $seite,$proseite"); 259.
while ($zeile = mysql_fetch_array($result)) { 260.
261.
#----------Ausgabe des GB darstellen-------------------------# 262.
# Hier wird schadhafter Code und böse Zeichen ausgemustert 263.
$zeile[1] = htmlspecialchars($zeile[1], ENT_QUOTES); 264.
$zeile[5] = htmlspecialchars($zeile[5], ENT_QUOTES); 265.
$zeile[3] = htmlspecialchars($zeile[3], ENT_QUOTES); 266.
$zeile[5] = wordwrap($zeile[5], 40, ' ', 1); 267.
$zeile[5] = nl2br($zeile[5]); 268.
?> 269.
<div class="post"> 270.
271.
<div class="titel"> 272.
<?php echo $zeile[0] ?> - <a target="blank" href="<?php echo $zeile[4] ?>"><?php echo $zeile[1] ?></a> 273.
schrieb am <?php echo $zeile[6] ?> um <?php echo $zeile[7] ?> Uhr 274.
<?php if($rang==1) { // Nur anzeigen fuer Admin 275.
echo "IP: $zeile[2] | <a href='gb.php?action=delete&id=$zeile[0]'>löschen</a> | <a href='gb.php?action=kommentieren&id=$zeile[0]'>kommentieren</a>" ; 276.
} ?> 277.
</div> 278.
279.
<p><?php echo $zeile[5] ?></p> 280.
281.
<?php if($zeile[8] != "") { 282.
echo"<div class='kommentar'>Kommentar:<br /> \n 283.
<span>$zeile[8]</span>\n </div>\n"; }?> 284.
285.
</div> 286.
<br /> 287.
<?php 288.
} 289.
#--------------- ENDE AUSGABE ---------------# 290.
291.
292.
#------- Beitraege zaehlen die in der Datenbank gespeichert wurden -------# 293.
$count_msgs = 0; 294.
$l = "SELECT id FROM gb ORDER BY id DESC"; 295.
$dbr = mysql_query ($l); 296.
while ($t = mysql_fetch_array ($dbr)) 297.
{ $count_msgs++; } 298.
echo "<br />Es sind <strong>$count_msgs</strong> Beiträge im Gästebuch vorhanden"; 299.
300.
# Datenbankverbindung schließen. 301.
mysql_close(); 302.
?> 303.
<br /><br /> 304.
<a href="gb.php?action=gbadmin">Admin</a> 305.
306.
</body> 307.
</html>Dieses Tutorial war unter anderem eine Antwort auf diesen Thread
Rabbit
Hi.
Das Gästebuch sieht toll aus, allerdings gibts ein paar Fehler:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\gb\gb.php:2) in C:\xampp\htdocs\gb\gb.php on line 3
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\gb\gb.php:2) in C:\xampp\htdocs\gb\gb.php on line 3
und
Ich kann mich nicht einloggen,weil:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\gb\gb.php:2) in C:\xampp\htdocs\gb\gb.php on line 41
mfg,
iSorgenfrei
Das Gästebuch sieht toll aus, allerdings gibts ein paar Fehler:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\gb\gb.php:2) in C:\xampp\htdocs\gb\gb.php on line 3
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\gb\gb.php:2) in C:\xampp\htdocs\gb\gb.php on line 3
und
Ich kann mich nicht einloggen,weil:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\gb\gb.php:2) in C:\xampp\htdocs\gb\gb.php on line 41
mfg,
iSorgenfrei
kugelschreiber schreibt am 31.03.2008 um 08:37:15 Uhr
Hallo.
Der Fehler mit der Session basiert auf ein vorhanden sein von Quellcode vor dem session_start()-Tag!
Die Session Tags sollten immer als erstes in einem Script stehen. Zumindest das session_start() Tag.
Aber nun Schluss mit der Meckerei. Alles in allen ein gutes Script.
Gruß Kuli
Der Fehler mit der Session basiert auf ein vorhanden sein von Quellcode vor dem session_start()-Tag!
Die Session Tags sollten immer als erstes in einem Script stehen. Zumindest das session_start() Tag.
- Leider nicht mit der Codeform durchgehalten
. Einmal hast du HTML vom PHP-Code getrennt und einmal gibst du HTML Code mit echo in PHP aus. - Des Weiteren kann man sich das "php" bei "<?php" sparen. Spart zumindest 3 Buchstaben Zeit.

- Ich vermisse die Kommentare bei den regulären Ausdrücken. Nicht jeder kann damit umgehen.
Aber nun Schluss mit der Meckerei. Alles in allen ein gutes Script.
Gruß Kuli
jamdesigns schreibt am 25.07.2008 um 22:02:42 Uhr
ja moin,
hmm... irgendwie kommt mir das tutorial bekannt vor. achja... ich hab es ja geschrieben! *kratz am kopf* kann hier nirgendwo einen link auf das ursprungstutorial finden... auch kein copyright oder so. klaut man jetzt einfach so tutorials von anderen seiten ohne die leute zu fragen? und dann auch noch als sein eigenes ausgeben? hmm.... ich würd mich mal an deiner stelle bei mir melden!
gruß jan
hmm... irgendwie kommt mir das tutorial bekannt vor. achja... ich hab es ja geschrieben! *kratz am kopf* kann hier nirgendwo einen link auf das ursprungstutorial finden... auch kein copyright oder so. klaut man jetzt einfach so tutorials von anderen seiten ohne die leute zu fragen? und dann auch noch als sein eigenes ausgeben? hmm.... ich würd mich mal an deiner stelle bei mir melden!
gruß jan







29457schreibt am 19.03.2008 um 08:53:49 Uhr48067schreibt am 24.03.2008 um 11:59:50 Uhr