29457
Goto Top

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:

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&amp;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&uuml;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&uuml;mpfe?</b> Antwort: 
<input size="4" name="spam" type="text" />  

</p>

<input type="submit" value="Abschicken" title="Eintrag machen" name="los" />&nbsp;   
<input type="reset" title="Felder leeren" value="Zuruecksetzen" name="stop" /></td>   
<br />
<p>    mit * gekennzeichnete Felder m&uuml;ssen ausgef&uuml;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&amp;id=$zeile'>l&ouml;schen</a> |  <a href='gb.php?action=kommentieren&amp;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&auml;ge im G&auml;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

Content-ID: 83459

Url: https://administrator.de/contentid/83459

Ausgedruckt am: 27.11.2024 um 20:11 Uhr

29457
29457 19.03.2008 um 08:53:49 Uhr
Goto Top
achja genau:

EDIT:// Bei Fragen schreibt hier einfach rein oder mir ne Nachricht!

Rabbit
48067
48067 24.03.2008 um 11:59:50 Uhr
Goto Top
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
kugelschreiber
kugelschreiber 31.03.2008 um 08:37:15 Uhr
Goto Top
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.

  1. Leider nicht mit der Codeform durchgehalten face-smile. Einmal hast du HTML vom PHP-Code getrennt und einmal gibst du HTML Code mit echo in PHP aus.
  2. Des Weiteren kann man sich das "php" bei "<?php" sparen. Spart zumindest 3 Buchstaben Zeit. face-smile
  3. 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
RogerG781
RogerG781 14.04.2008 um 09:08:16 Uhr
Goto Top
Hey, bin gerade hier auf das Skript gestossen und werde es gleich heut Abend mal ausprobieren. Schonmal danke für die Veröffentlichung.
jamdesigns
jamdesigns 25.07.2008 um 22:02:42 Uhr
Goto Top
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