Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Gaestebuch mit Adminfunktion

Mitglied: 29457

29457 (Level 2)

19.03.2008, aktualisiert 25.07.2008, 30218 Aufrufe, 5 Kommentare

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:

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&amp;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&uuml;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&uuml;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" />&nbsp; 
221.
<input type="reset" title="Felder leeren" value="Zuruecksetzen" name="stop" /></td> 
222.
<br />
223.
<p>    mit * gekennzeichnete Felder m&uuml;ssen ausgef&uuml;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&amp;id=$zeile[0]'>l&ouml;schen</a> |  <a href='gb.php?action=kommentieren&amp;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&auml;ge im G&auml;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
Mitglied: 29457
19.03.2008 um 08:53 Uhr
achja genau:

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

Rabbit
Bitte warten ..
Mitglied: 48067
24.03.2008 um 11:59 Uhr
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
Bitte warten ..
Mitglied: kugelschreiber
31.03.2008 um 08:37 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.

  1. 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.
  2. Des Weiteren kann man sich das "php" bei "<?php" sparen. Spart zumindest 3 Buchstaben Zeit.
  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
Bitte warten ..
Mitglied: RogerG781
14.04.2008 um 09:08 Uhr
Hey, bin gerade hier auf das Skript gestossen und werde es gleich heut Abend mal ausprobieren. Schonmal danke für die Veröffentlichung.
Bitte warten ..
Mitglied: jamdesigns
25.07.2008 um 22:02 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
Bitte warten ..
Neue Wissensbeiträge
Humor (lol)
Und wie seid Ihr gegen Cyberattacken gewappnet?
Information von DerWoWusste vor 10 StundenHumor (lol)4 Kommentare

aber wo ist der Hammer? :-)

Sicherheit
Ein weiterer Microsoft-Stirnklatscher
Information von DerWoWusste vor 1 TagSicherheit7 Kommentare

Habe gerade einen Artikel zu einem Sicherheitsproblem gefunden, welches mir zu seiner Zeit (gepatcht 2015) wohl durchgerutscht ist. Es ...

Windows 10
Upgradepfade Windows 10 LTSC
Erfahrungsbericht von Datenreise vor 1 TagWindows 10

Nur eine kurze Info, für diejenigen, die es interessiert, da es hierzu im Netz aus nachvollziehbaren Gründen nicht allzu ...

Administrator.de Feedback
Wartungsarbeiten heute Nacht (Update)
Information von Frank vor 1 TagAdministrator.de Feedback10 Kommentare

Hallo User, durch Umbauarbeiten in unserem Rechenzentrum (am Backbone) kann es heute Nacht (14-15.01.2019) zu kurzen Ausfällen unserer Seite ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 - kein Boot mehr nach Domänenaustritt
gelöst Frage von Ghost108Windows 1025 Kommentare

Hallo zusammen, habe hier eine Windows 10 Maschine, die ich gerne aus der Domäne austreten lassen möchte. Nach Austritt ...

Windows 10
Windows 10 1803 - nicht identifiziertes Netzwerk - kein Login an Domäne möglich
Frage von Tomy389Windows 1021 Kommentare

Hallo Zusammen, ich hoffe zu dem Thema gibt es nicht schon einen Thread aber ich sollte eigentlich schon alles ...

Exchange Server
Microsoft Exchange Ser ver 2016 CU 8 auf den neuesten Stand bringen
gelöst Frage von Hendrik2586Exchange Server20 Kommentare

Hallo an euch alle. :) Kurze Frage. Ich habe hier einen Exchange Server wie o.g. Problem ist das wir ...

Microsoft
SFirm 4.0 auf Terminalserver startet für jeden angemeldeten Benutzer diverse Dienste
Frage von Frank84Microsoft17 Kommentare

Hallo zusammen, wir verwenden Sfirm 4.0 auf einem Terminalserver (der SQL Server ist auf einem separaten Server), das Problem ...