Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Anleitung Entwicklung PHP

Mitglied: 29457

29457 (Level 2)

19.03.2008, aktualisiert 25.07.2008, 29297 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


Mit freundlichen Grüßen,

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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...