Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] MySQL-db basiertes Gästebuch
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 15.02.2005, 12:32 Nach oben    #1
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.378
Standard [PHP] MySQL-db basiertes Gästebuch

In diesem Tutorial geht es um das Erstellen eines Gästebuches, welches eine MySQL-Datenbank benutzt.
Solltet ihr kein MySQL nutzen können, dann wäre ggf. folgendes Tutorial besser für euch:
[PHP] Gästebuch auf Textdatei basierend

Das wohl wichtigste ist der Aufbau der Datenbank. Dort werden alle Daten gespeichert und mit dem Inhalt baut sich auch das Gästebuch auf.

Gespeicherte Werte sollen hier sein:
- Zeitpunkt des Eintrags
- IP des users (man weiß nie, wozu das noch gut sein kann)
- der Name
- die eMail-Adresse
- der Eintrag selbst

weiterhin wären Dinge möglich, wie ICQ-Nummer, website usw. Hier geht es zunächst um das Prinzip. Ergänzen könnt ihr es selbst, wenn ihr das Tutorial durchgearbeitet habt.

Für das Verwalten von Datenbanken (erstellen von Tabellen und Spalten) hat sich die Benutzeroberfläche phpmyadmin als hilfreich erwiesen.

Die Spalten der Tabelle müßen nun noch Namen bekommen. Dabei dürfen die hier erwähnten nicht benutzt werden:
http://dev.mysql.com/doc/mysql/de/reserved-words.htm
Andernfalls wird MySQL euch Probleme bereiten.

Das Erzeugen der Tabelle könnte ihr mit folgendem MySQL-Querry machen:
PHP-Code:
CREATE TABLE `gaestebuch` (
  `
identint(11NOT NULL auto_increment,
  `
zeitpunktdatetime NOT NULL default '0000-00-00 00:00:00',
  `
IPtinytext NOT NULL,
  `
nametinytext NOT NULL,
  `
mailtinytext NOT NULL,
  `
nachrichttext NOT NULL,
  
PRIMARY KEY  (`ident`)
TYPE=MyISAM AUTO_INCREMENT=
Für das korrekte Auswählen der Spaltentypen ist folgende Seite hilfreich:
http://dev.mysql.com/doc/mysql/de/column-types.html

Die php-Datei mit der das Gästebuch angezeigt werden soll beinhaltet auch das Formular (man könnte das auch auf 2 Dateien aufteilen).

Dann fang ich mal mit der php-Datei an. Die Struktur dieses Gästebuches soll wie folgt werden:
PHP-Code:
<?php
  
if()
  {
   
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
  
}
  else
  {
    
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
  
}
?>
Es wird mit der if-Anweisung überprüft, ob das Gästebuch ausgefüllt wurde, oder nicht. Abhängig davon wird der neue Eintrag in die Datenbank eingetragen, oder die vorhandenen Einträge werden angezeigt.
Natürlich muss der if()-Teil noch sinnvoll gefüllt werden, aber das kommt später - diese Stelle müßen wir uns aber merken!

Als nächstes wollen wir den Formular-Abschnitt bearbeiten:
Damit deine Besucher auch die Möglichkeit haben Einträge zu hinterlassen benötigen wir ein Formular.

PHP-Code:
<?php
echo '<h2>neue Einträge:</h2>
<form method="post" action="'
.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>'
;
?>
Die superglobale Variable $_SERVER["PHP_SELF"] sorgt dafür, dass die Daten per POST an die gleiche Datei geschickt werden. Zusammen mit der if-else-Anweisung ist der Trick geschafft, warum wir nur eine php-Datei brauchen.

Nun, da wir das Formular kennen, können wir auch die if-Anweisung füllen. Sinnvoll ist das Überprüfen auf das Vorhandensein von den gedrücktem Button:
PHP-Code:
<?php
  
if(isset($_POST['button']))
  {
   
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
  
}
  else
  {
    
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:

    // Anzeige der Einträge aus dem Gästebuch:

    // Formular für weitere Einträge:
    
echo '<h2>neue Einträge:</h2>
<form method="post" action="'
.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>'
;
  }
?>
Nun besteht also die Möglichkeit, Daten abzuschicken. Als nächstes also müßen wir uns darum kümmern, dass diese Daten auch verarbeitet werden.
Als übertragene Daten haben wir dann zur Verfügung:
$_POST['name']
$_POST['email']
$_POST['eintrag']
$_POST['button']


Letztere Variable beinhaltet keinen brauchbaren Wert, außer für die Überprüfung in dem if-Konstrukt können wir diese vernachlässigen.
Wir wollten aber zusätzlich noch die IP und den Zeitpunkt abspeichern.
Den Zeitpunkt halten wir sekundengenau fest. Das geht mit der Funktion date(
date('Y-m-d H:i:s')

Die IP kann erfasst werden durch die superglobale Server-Variable:
$_SERVER['REMOTE_ADDR']

An dieser Stelle muß die Kommunikation mit der Datenbank erfolgen. Sonst können a) die Daten nicht eingetragen werden und b) diese später nicht angezeigt werden.

in kompakter Form:
PHP-Code:
<?php
  $dbhost   
'localhost';
  
$dblogin  'nutzername';
  
$dbpasswd 'passwort';
  
$dbname   'datenbankname';

  
mysql_connect($dbhost$dblogin$dbpasswd) or die(mysql_error());
  
mysql_select_db($dbname) or die(mysql_error());
?>
Zum Schluß sollte die Verbindung dann auch noch mal geschlossen werden:
PHP-Code:
<?php
mysql_close
();
?>
Damit sieht unser Quellcode so aus:
PHP-Code:
<?php
  $dbhost   
'localhost';
  
$dblogin  'nutzername';
  
$dbpasswd 'passwort';
  
$dbname   'datenbankname';

  
mysql_connect($dbhost$dblogin$dbpasswd) or die(mysql_error());
  
mysql_select_db($dbname) or die(mysql_error()); 

  if(isset(
$_POST['button']))
  {
   
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
  
}
  else
  {
    
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:

    // Anzeige der Einträge aus dem Gästebuch:

    // Formular für weitere Einträge:
    
echo '<h2>neue Einträge:</h2>
<form method="post" action="'
.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>'
;
  }
  
mysql_close()
?>
Nun werden wir die Daten in die Datenbank schreiben:
PHP-Code:
<?php
  $sql 
"INSERT INTO `gaestebuch` ( `ident` , `zeitpunkt` , `IP` , `name` , `mail` , `nachricht` ) VALUES ('', '".date('Y-m-d H:i:s')."', '".$_SERVER['REMOTE_ADDR']."', '".$_POST['name']."', '".$_POST['email']."', '".$_POST['eintrag']."')";
  
mysql_query($sql);
?>
Achtung: Noch sind die Daten absolut ungeprüft. So kann keine Sicherheit gewährleistet werden!

Damit der user auch weiß, dass er was eingetragen hat sollten wir im ein 'Danke' hinterlassen.
Somit ist der Code wie folgt:

PHP-Code:
<?php
  $dbhost   
'localhost';
  
$dblogin  'nutzername';
  
$dbpasswd 'passwort';
  
$dbname   'datenbankname';

  
mysql_connect($dbhost$dblogin$dbpasswd) or die(mysql_error());
  
mysql_select_db($dbname) or die(mysql_error());

  echo 
'<h2>mein Gästebuch</h2>';

  if(isset(
$_POST['button']))
  {
   
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
    
$sql "INSERT INTO `gaestebuch` ( `ident` , `zeitpunkt` , `IP` , `name` , `mail` , `nachricht` ) VALUES ('', '".date('Y-m-d H:i:s')."', '".$_SERVER['REMOTE_ADDR']."', '".$_POST['name']."', '".$_POST['email']."', '".$_POST['eintrag']."')";
    
mysql_query($sql);
    echo 
'Danke für deinen Eintrag';
  }
  else
  {
    
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:

    // Anzeige der Einträge aus dem Gästebuch:

    // Formular für weitere Einträge:
    
echo '<h2>neue Einträge:</h2>
<form method="post" action="'
.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>'
;
  }
  
mysql_close()
?>
Somit fehlt nur noch die Anzeige der Daten aus der Datenbank. Damit alle Daten angezeigt werden bedienen wir uns einer while-Schleife. Diese wird solange fortgeführt, bis alle Daten ausgelesen sind.
PHP-Code:
<?php
  $sql 
"SELECT ident, zeitpunkt, name, mail, nachricht from gaestebuch ORDER BY ident DESC";
  
$result mysql_query($sql) or die (mysql_error());
  while(
$zeile=mysql_fetch_assoc($result))
  {
    echo 
"Name: ".$zeile['name']."<br />Nachricht: ".$zeile['nachricht']."<br /><br />";
  }
?>
Eigentlich sind wir nun fertig:
PHP-Code:
<?php
  $dbhost   
'localhost';
  
$dblogin  'nutzername';
  
$dbpasswd 'passwort';
  
$dbname   'datenbankname';

  
mysql_connect($dbhost$dblogin$dbpasswd) or die(mysql_error());
  
mysql_select_db($dbname) or die(mysql_error());

  echo 
'<h2>mein Gästebuch</h2>';

  if(isset(
$_POST['button']))
  {
   
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
    
$sql "INSERT INTO `gaestebuch` ( `ident` , `zeitpunkt` , `IP` , `name` , `mail` , `nachricht` ) VALUES ('', '".date('Y-m-d H:i:s')."', '".$_SERVER['REMOTE_ADDR']."', '".$_POST['name']."', '".$_POST['email']."', '".$_POST['eintrag']."')";
    
mysql_query($sql);
    echo 
'Danke für deinen Eintrag';
  }
  else
  {
    
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:

    // Anzeige der Einträge aus dem Gästebuch:
  
$sql "SELECT ident, zeitpunkt, name, mail, nachricht from gaestebuch ORDER BY ident DESC";
  
$result mysql_query($sql) or die (mysql_error());
  while(
$zeile=mysql_fetch_assoc($result))
  {
    echo 
"Name: ".$zeile['name']."<br />Nachricht: ".$zeile['nachricht']."<br /><br />";
  } 

    
// Formular für weitere Einträge:
    
echo '<h2>neue Einträge:</h2>
<form method="post" action="'
.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>'
;
  }
  
mysql_close()
?>

Ich verzichte hier ganz bewusst darauf, dass die Ausgabe der Daten schön aussieht. Ihr sollte hier ja schließlich lernen Dinge selbst zu lösen.

Das Problem das nun auftaucht ist, dass jeder nun alles eintragen kann, auch Dinge, die dort die Sicherheit gefährden könnten! Also die Sicherheit der Datenbank. Daher müßt ihr die Daten prüfen, bevor ihr sie eintragt!
Dies gilt für den Namen, die eMail-Adresse und die Nachricht:
PHP-Code:
<?php 
strip_tags
(mysql_escape_string($variable))
?>
So wird mit verhindert, dass andere HTML-Code oder MySQL-Anweisungen einschleusen:
PHP-Code:
<?php
  $dbhost   
'localhost';
  
$dblogin  'nutzername';
  
$dbpasswd 'passwort';
  
$dbname   'datenbankname';

  
mysql_connect($dbhost$dblogin$dbpasswd) or die(mysql_error());
  
mysql_select_db($dbname) or die(mysql_error());

  echo 
'<h2>mein Gästebuch</h2>';

  if(isset(
$_POST['button']))
  {
   
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datenbank eintragen)
    
$sql "INSERT INTO `gaestebuch` ( `ident` , `zeitpunkt` , `IP` , `name` , `mail` , `nachricht` ) VALUES ('', '".date('Y-m-d H:i:s')."', '".$_SERVER['REMOTE_ADDR']."', '".strip_tags(mysql_escape_string($_POST['name']))."', '".strip_tags(mysql_escape_string($_POST['email']))."', '".strip_tags(mysql_escape_string($_POST['eintrag']))."')";
    
mysql_query($sql);
    echo 
'Danke für deinen Eintrag';
    
// wenn ihr eine eMail wollt, wenn sich jmd. eingetragen hat, dann könnt ihr diese hier platzieren.
  
}
  else
  {
    
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:

    // Anzeige der Einträge aus dem Gästebuch:
  
$sql "SELECT ident, zeitpunkt, name, mail, nachricht from gaestebuch ORDER BY ident DESC";
  
$result mysql_query($sql) or die (mysql_error());
  while(
$zeile=mysql_fetch_assoc($result))
  {
    echo 
"Name: ".$zeile['name']."<br />Nachricht: ".$zeile['nachricht']."<br /><br />";
  }

    
// Formular für weitere Einträge:
    
echo '<h2>neue Einträge:</h2>
<form method="post" action="'
.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>'
;
  }
  
mysql_close()
?>

Jetzt solltet Ihr eigentlich in der Lage sein, das Script ohne Vorlage nachzuprogrammieren. Die verwendeten Funktionen findet Ihr alle im PHP-Manual und MySQL-Manual .
Wenn ihr das Gästebuch um eine Blätterfunktion erweitern wollt, dann schaut hier: Blätterfunktion mit MySQL

Solltet Ihr Fragen zu dem Tutorial haben, so schreibt bitte einen Beitrag im PHP-Forum mit einem Verweis auf dieses Tutorial.
Danke.

Ich hoffe, dass ich Euch hier etwas weiterhelfen konnte.

Grüße Jann Hendrik

Geändert von Jann Hendrik (15.07.2007 um 15:11 Uhr)
Jann Hendrik ist gerade online  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] Counter mit mysql (kurz und knackig) Jann Hendrik Tutorials 6 13.11.2006 08:45
ssh tunnel zu einer mysql datenbank beny_mcde Datenbanken 4 07.06.2006 16:05
MySQL 5.1 kommt in die Beta-Phase Ben Nachrichten 1 02.03.2006 14:31
[PHP] Gästebuch auf Textdatei basierend Jann Hendrik Tutorials 4 11.01.2006 07:50
[PHP] Blätterfunktion mit MySQL Ben Tutorials 0 15.03.2005 04:22


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45