• 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:
    http://www.developers-guide.net/foru...atei-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
  • Neue Blog-Einträge

    Adventure-PHP-Framework 1.12 erschienen

    Ich bin bisher nicht dazu gekommen - und wollte eigentlich die beiden links nennen: :arrow: http://www.golem.de/1008/77097.html :arrow:...

    20.08.2010 16:09

    Britische Regierung hält am IE6 fest

    Man könnte auch sagen "Tot erhoffte leben länger" :arrow: http://www.golem.de/1008/77035.html Leider sind halt in vielen Unternehmen speziell an den IE angepasste Programme im Einsatz, die es...

    20.08.2010 16:12

    Hosting-Dienst GitHub erreicht Millionen-Marke

    Während ich persönlich noch immer gerne SVN einsetze, ist git gerade voll im Trend. GitHub hatte die Tage zu vermelden, dass es mehr als eine Million Softwareprojekte "unter seinem Dach" hat....

    20.08.2010 16:15

    Screenshot unter Windows vom aktiven Fenster erstellen

    Der Trend, nicht nur einen Bildschirm bei der Arbeit am PC zu verwenden ist imho vorhanden. Wer - wie ich - gerne zwischendurch einen screenshot macht, der dürfte sich ggf. manches Mal geärgert...

    20.08.2010 16:20

    ListView-Spalten Automatisch ausrichten

    Listviews begegnen uns eigentlich jeden Tag aufs neue bei der täglichen Arbeit. Genauso oft nervt es, wenn man z.b. im Explorer Spalten verschieben muss, um einen Dateinamen einer Datei vollständig...

    24.08.2010 13:10
  • Neue Beiträge

    Sekundentakt

    Hi,

    ich weiß nicht genau, wie Deine Subselects aussehen. Aber falls die sich so ähnlich formulieren lassen:

    Code:
    SELECT something
    

    CONCAT_WS mit LEFT JOIN

    Sekundentakt 01.09.2010 15:30 Gehe zum letzten Beitrag
    DasMööp

    *ohje ... Antwort: Subselect *rolleye, damit fällt dann der JOIN weg.

    CONCAT_WS mit LEFT JOIN

    DasMööp 31.08.2010 13:29 Gehe zum letzten Beitrag
    DasMööp

    Hallo,

    bei einer Abfrage von zwei Tabellen ist in einer in zwei Spalten je die ID der einen hinterlegt und diese brauche ich in der CONCAT.

    CONCAT_WS mit LEFT JOIN

    DasMööp 31.08.2010 12:17 Gehe zum letzten Beitrag
    floppy

    Hallo DEVWinC, Hallo Spezialisten,

    ich stehe zur Zeit auf dem gleichen Problem, bei mir gibts beim BartPE (XP) nur einen BlueScreen nach

    [Booten] ISO-Images mit Bootloader starten & BartPE

    floppy 31.08.2010 10:48 Gehe zum letzten Beitrag

Impressum · Tutorials · Nutzungsbedingungen · thematisch sortierte Linklisten · Spendenaufruf · Team · Partnerprojekte

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 46 47 48