29457
19.03.2008, aktualisiert am 25.07.2008
32066
5
0
Gaestebuch mit Adminfunktion
Quelle: http://alice-grafixx.de/PHP-MYSQL-Tutorial/Gaestebuch-mit-Adminfunktion ...
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
Rabbit
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:
CREATE TABLE `gb` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(60) '',
`ip` varchar(100) '',
`email` varchar(255) '',
`hp` varchar(255) '',
`msg` text,
`date` varchar(30) '',
`time` varchar(30) '',
`kommentar` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 ;
Und hier der Quelltext der Datei guestbook.php
<?php
session_start();
// ---------------------------- # Konfiguration # -----------------------------------------------------
$db_host = "localhost"; # Der Datenbank-Host
$db_user = " "; # Der Datenbank-Benutzer
$db_password = " "; # Das Passwort fuer die Datenbank
$db_name = " "; # Der Datenbank-Name
$conn = mysql_connect($db_host,$db_user,$db_password) or die (mysql_error());
mysql_select_db($db_name, $conn) or die (mysql_error());
$passwort = "123"; # Das Passwort für den Admin
$mailinfo = "ja"; # email bei Eintrag ? ja oder nein
$webmaster = "email@adresse.de"; # wenn bei mailinfo ja steht, dann hier eure email Adresse eintragen
$datum = date("d.m.Y"); # Das aktuelle Datum fuer den Eintrag wird hier erstellt
$zeit = date("H:i"); # Die aktuelle Zeit für den Eintrag wird hier erstellt
// ----------------------------------------------------------------------------------------------------
$action = isset($_GET['action']) ? ($_GET['action']) : "";
// ------------------------------ Admin-Bereich ------------------------------------------ //
# Wenn auf den Logout Link gecklickt wird, wird hier die Session geloescht
if ($action == "logout"){
session_destroy();
header("refresh:0;url=gb.php");
}
$rang = $_SESSION['rang'];
$pass = strip_tags($_POST['password']);
# Wenn das Admin-Passwort falsch eingegeben wurde erscheint eine Fehlermeldung
if (isset($_POST['submit']) && $pass != $passwort){
echo "Falsches Passwort!";
}
# Wenn das Passwort richtig war, wird der Admin-Rang auf 1 gesetzt und die Session gestartet
else if (isset($_POST['submit']) && $pass == $passwort){
$_SESSION['rang'] = "1";
header("refresh:0;url=gb.php");
}
# --------- Loesch-Funktion ----------- #
if ($action == "delete" && $rang == 1) {
$id = $_GET['id'];
$loeschen = "DELETE FROM gb WHERE id=$id";
mysql_query ($loeschen) or die ("Konnte nicht geloescht werden!!!");
header ("Location: gb.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Gästebuch</title>
<meta name="robots" content="index,follow" />
<meta name="language" content="de" />
<style type="text/css">
body {
font: normal 0.8em verdana, tahoma, 'sans-serif';
color: #000;
background-color: #EFEFEF;
}
.post{
border: 1px solid #808080;
background-color: #FFF;
padding: 5px;
width: 75%;
}
.titel{ border-bottom: 1px solid #EFEFEF; }
.error{ font-weight: bold; color: #A61212; }
span{ font-style:italic; color: #395B7D; }
a {
color: #49565E;
font-weight: bold;
text-decoration: none;
}
a:visited {
color: #63909C;
text-decoration: none;
}
a:hover, a:active {
color: #7EB1C0;
text-decoration: none;
}
</style>
</head>
<body>
<?php
# Wenn auf den Admin-Link gecklickt wird, wird hier das Login-Feld erzeugt
if ($action == "gbadmin"){?>
<strong>Passwort:</strong>
<form action="" method="post">
<input name="password" type="password" /> <input type="submit" name="submit" value="login" />
</form>
<?php
}
# Hier wird abgefragt, ob rang=1 ist. Wenn ja, wird hier die Kommentierfunktion für den Eintrag aufgerufen
if($rang==1) {
$id = strip_tags($_GET['id']);
if($action == "kommentieren") {
echo "<h3>Eintrag Nr. $id kommentieren</h3>";
echo "<form name='kommentar' method='post' action='gb.php?action=speichern&id=$id'>
<textarea cols='55' rows='10' name='kommentar'></textarea><br />
<input type='submit' value='speichern' title='Kommentar speichern' name='komment' />
</form>"; }
if($action == "speichern") {
$kommentar = mysql_real_escape_string($_POST['kommentar']);
# Und hier wird dann der Kommentar zu dem GB Eintrag in der DB gespeichert.
$sql= "UPDATE gb SET kommentar = '$kommentar' WHERE id = '$id'";
mysql_query ($sql) or die ("Das Schreiben ist gescheitert!");
}
}
?>
<div align="left">
<a href="gb.php?action=reintragen">Ins Gaestebuch eintragen</a>
<?php if($rang==1) { echo '<a href="gb.php?action=logout">Logout</a>'; } ?>
</div>
<br />
<?
# Wenn der Link zum Eintragen ins GB geklickt wird, wird das Formular zum eintragen angezeigt
if($action == "reintragen") {
if (isset($_POST['los'])){ # wenn auf Abschicken geklickt wurde
#--- Eingaben pruefen und ersetzen ---#
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$hp = mysql_real_escape_string($_POST['hp']);
$msg = mysql_real_escape_string($_POST['msg']);
$spam = mysql_real_escape_string($_POST['spam']);
# Wenn Feld Name und Nachricht nicht leer sind, und Spamfrage eichtig beantwortet wurde, dann speichern...
if ($name != "" && $msg != "" && $spam == "blau") {
# Wenn Feld Homepage leer, dann schreiben: www.keine-angegeben.de
if ($hp == "") {
$hp = "http://www.keine-angegeben.de";
}
# Hier wird geprueft ob die homepage mit oder ohne http:{{comment_single_line_double_slash:3}}
if (strtolower(substr($hp, 0, 7)) == "http://"){
# Wenn ja, Feld so wie ist abspeichern
$hp = "$hp";
}else {
# Wenn nicht, soll er das "http://" manuell hinzufügen
$hp = "http://$hp";
}
$ip = $_SERVER['REMOTE_ADDR']; # IP-Adresse ermitteln
$msg = trim($msg);
$msg = preg_replace('/(\s{4})\s+/', '\1', $msg);
$msg = preg_replace('~(.)(\1){4,}~', '\1\1\1\1', $msg);
$name = preg_replace('/(\s{4})\s+/', '\1', $name);
$name = preg_replace('~(.)(\1){4,}~', '\1\1\1\1', $name);
# --- Und hier speichern wir in die Datenbank --- #
$schreiben = "INSERT INTO gb (id, name, email, hp, msg, ip, date, time)
VALUES ('', '$name', '$email', '$hp', '$msg', '$ip', '$datum', '$zeit')";
$results= mysql_query ($schreiben) or die ("Das Schreiben ist gescheitert!");
if ($results){
# Wenn oben bei mailinfo ja gewählt wurde, wird nach dem speichern eine email geschickt!
if ($mailinfo == "ja"){
# Betreffzeile für die EMail
$betreff = "GB Eintrag";
# Name und Nachricht des Eintrages für die Mail
$body = "Es gibt einen neuen Eintrag im GB:\nName: $name Nachricht: $msg";
# Hier wird die Mail versendet und zusammengesetzt
mail("$webmaster","$betreff","$body\n");
}
$go= 1;
echo 'Vielen Dank fuer Ihren Eintrag ...';
}else{ echo 'Fehler beim Eintragen...';}
}else{ # wenn nicht alle Pflichtfelder ausgefuellt wurden
echo '<p class="error">Bitte alle mit * gekennzeichneten Felder ausfüllen!</p>';
}
} // close submit
if ($go!= 1){
?>
<form action="" method="post" id="eingabe">
<input type="text" name="name" size="20" /> <label for="name">Name</label>* <br />
<input type="text" name="email" size="20" /> <label for="email">E-Mail</label> *<br />
<input type="text" name="hp" size="20" /> <label for="website">Homepage</label><br />
<textarea cols="55" rows="10" value="msg" name="msg"></textarea>
<p>Spamschutzfrage *<br />
<b>Welche Farbe haben Schlümpfe?</b> Antwort:
<input size="4" name="spam" type="text" />
</p>
<input type="submit" value="Abschicken" title="Eintrag machen" name="los" />
<input type="reset" title="Felder leeren" value="Zuruecksetzen" name="stop" /></td>
<br />
<p> mit * gekennzeichnete Felder müssen ausgefüllt werden</p>
<br />
<br /></form>
<?php
}
} // close reintragen
#--- Datenbank auslesen und anzuzeigende Seiten festlegen ---#
$proseite = 3; // Wieviele Eintraege pro Seite anzeigen?
if(!isset($_REQUEST["seite"])) {
$seite = 0;
} else {
$seite = $_REQUEST["seite"];
}
$count = 0;
$abfrage = "SELECT id FROM gb";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)) {
if($count%$proseite == 0) {
$aktuelleseite = $count/$proseite+1;
if($count == $seite) {
echo $aktuelleseite." ";
} else {
echo "<a href='gb.php?seite=$count'>".$aktuelleseite."</a> ";
}
}
$count++;
}
echo '<br /><br />';
$result = mysql_query("SELECT * FROM gb ORDER by id DESC LIMIT $seite,$proseite");
while ($zeile = mysql_fetch_array($result)) {
#----------Ausgabe des GB darstellen-------------------------#
# Hier wird schadhafter Code und böse Zeichen ausgemustert
$zeile[1] = htmlspecialchars($zeile[1], ENT_QUOTES);
$zeile[5] = htmlspecialchars($zeile[5], ENT_QUOTES);
$zeile[3] = htmlspecialchars($zeile[3], ENT_QUOTES);
$zeile[5] = wordwrap($zeile[5], 40, ' ', 1);
$zeile[5] = nl2br($zeile[5]);
?>
<div class="post">
<div class="titel">
<?php echo $zeile ?> - <a target="blank" href="<?php echo $zeile[4] ?>"><?php echo $zeile[1] ?></a>
schrieb am <?php echo $zeile[6] ?> um <?php echo $zeile[7] ?> Uhr
<?php if($rang==1) { // Nur anzeigen fuer Admin
echo "IP: $zeile[2] | <a href='gb.php?action=delete&id=$zeile'>löschen</a> | <a href='gb.php?action=kommentieren&id=$zeile'>kommentieren</a>" ;
} ?>
</div>
<p><?php echo $zeile[5] ?></p>
<?php if($zeile[8] != "") {
echo"<div class='kommentar'>Kommentar:<br /> \n
<span>$zeile[8]</span>\n </div>\n"; }?>
</div>
<br />
<?php
}
#--------------- ENDE AUSGABE ---------------#
#------- Beitraege zaehlen die in der Datenbank gespeichert wurden -------#
$count_msgs = 0;
$l = "SELECT id FROM gb ORDER BY id DESC";
$dbr = mysql_query ($l);
while ($t = mysql_fetch_array ($dbr))
{ $count_msgs++; }
echo "<br />Es sind <strong>$count_msgs</strong> Beiträge im Gästebuch vorhanden";
# Datenbankverbindung schließen.
mysql_close();
?>
<br /><br />
<a href="gb.php?action=gbadmin">Admin</a>
</body>
</html>
Dieses Tutorial war unter anderem eine Antwort auf
Rabbit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 83459
Url: https://administrator.de/contentid/83459
Ausgedruckt am: 27.11.2024 um 20:11 Uhr
5 Kommentare
Neuester Kommentar
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
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
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