Loading...   Upload Image

Gaestebuch mit AdminfunktionTutorials » PHP/MySQL Tutorials » Gaestebuch mit Adminfunktion

Verfasst von jamdesigns am 16.12.2007 - wurde schon 89797 mal gelesen

Kategorie: PHP/MySQL
Bewertung:
63x bewertet
Schwierigkeit: mittel
Kommentare: [ 54 ]

Tag - Schlagwort Tutorial Tag - Schlagwort PHP Tag - Schlagwort Administartion Tag - Schlagwort Gaestebuch Tag - Schlagwort Script

Gaestebuch mit Adminfunktion - Tutorial

Vorab: Das ist mein erstes Tutorial, seid bitte nachsichtig mit mir =)

PHP / MYSQL Kenntnisse sind vorausgesetzt.
Ihr braucht einen Webspace der PHP untersttzt und eine MYSQL Datenbank hat.

Oftmals findet man Gstebcher die fr jede Funktion eine separate Seite haben. Grade wenn man ein CMS oder eine Internetseite mit vielen Seiten betreibt wird es schnell unbersichtig. Hier werde Ich euch ein Gstebuch vorstellen das mit lediglich einer Seite auskommt.

Das Gstebuch besitzt eine Adminfunktion die ber Sessions luft. Es ist also bequem mglich die Eintrge zu lschen oder zu kommentieren.

- Ansicht des Gaestebuches
- Administrator Ansicht des Gaestebuches

Ich hoffe Ich habe den Quelltext gengend auskommentiert. Darin sollte alles Intressante fr euch stehen.

Kommen wir nun zur Datenbank:

Nennt Sie z.B.: gaestebuch und fhrt in PHPMYADMIN diesen Befehl aus:
CREATE TABLE IF NOT EXISTS `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;

Und hier der Quelltext der Datei gb.php:
<?php
    session_start();
// ---------------------------- # Konfiguration # -----------------------------------------------------    
    $db_host = "localhost";           # Der Datenbank-Host
    $db_user = " ";                # Der Datenbank-Benutzer
    $db_password = " ";          # Das Passwort fr 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 fr 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 fr den Eintrag wird hier erstellt
$zeit = date("H:i");    # Die aktuelle Zeit fr den Eintrag wird hier erstellt
// ----------------------------------------------------------------------------------------------------    

$action = isset($_GET['action']) ? ($_GET['action']) : "";

// ------------------------------ Admin-Bereich ------------------------------------------ //

# Wenn auf den Logout Link gecklickt wird, wird hier die Session gelscht
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"); 
}
 
# --------- Lsch-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>Gstebuch</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 fr 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 Gstebuch 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 prfen 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 geprft ob die homepage mit oder ohne http:// eingegeben wurde.
    if (strtolower(substr($hp, 0, 7)) == "http://"){ 
        # Wenn ja, Feld so wie ist abspeichern    
        $hp = "$hp"; 
    }else {
        # Wenn nicht, soll er das "http://" manuell hinzufgen 
        $hp = "http://$hp";              
    } 
$ip = $_SERVER['REMOTE_ADDR']; # IP-Adresse ermitteln

$msg = trim($msg);
$msg = preg_replace('/(\s{4})\s+/', '', $msg);
$msg = preg_replace('~(.)(){4,}~', '', $msg); 
$name = preg_replace('/(\s{4})\s+/', '', $name);
$name = preg_replace('~(.)(){4,}~', '', $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 gewhlt wurde, wird nach dem speichern eine email geschickt!
    if ($mailinfo == "ja"){ 
        
        # Betreffzeile fr die EMail
        $betreff = "GB Eintrag"; 
        
        # Name und Nachricht des Eintrages fr 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 Eintrge 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 bse 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[0] ?> - <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[0]'>l&ouml;schen</a> |  <a href='gb.php?action=kommentieren&amp;id=$zeile[0]'>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 ---------------# 


#------- Beitrge zhlen 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 schlieen.
mysql_close(); 
?> 
<br /><br />
<a href="gb.php?action=gbadmin">Admin</a> 

</body>
</html>


Alice schrieb am 08.08.2009


Ich habe das Script leicht ueberarbeitet, so dass nun Smileys verwendet werden koennen.
Die Administration des Gaestebuchs wird ueber eine eigene/extra Datei abgewickelt, zudem wurde das Aussehen des Gaestebuchs leicht veraendert, die Blaetterfunktion/Seitennavigation wurde verbessert und einige Sicherheitsrisiken wurden aus der Welt geschafft.
Ausserdem wurden zusaetzlich eine header.php und footer.php Datei erstellt, damit das anpassen des Gaestebuches bzw. das Integrieren in die eigene Website leichter faellt. Die Datenbankstrucktur blieb unveraendert!

Wie sieht das Ganze nun aus?


- Gaestebuchansicht
- Admin Login
- Administrationsansicht
- Admin-Kommentaransicht

Geaenderte Tutorial-Dateien Downloaden

Kommentar schreibenHinterlasse einen Kommentar

Du musst angemeldet sein, um einen Kommentar zu hinterlassen...

Du bist noch kein Mitglied von Alice-Grafixx.de?
Dann kannst du dich hier kostenlos registrieren ...


       ALL-INKL.COM - Webhosting Server Hosting Domain Provider