Einführung in MySQL

18.05.2008
Author: N43

Inhalt:

  • 1. Tabelle erstellen
  • 2. Daten eintragen
  • 3. Daten abfragen
  • 4. Verbesserungen
  • 5. Funktionen


1. Tabelle erstellen

Dieses Tutorial soll anhand eines Gästebuchs zeigen, wie man mithilfe von PHP auf MySQL Datenbanken zugreifen kann. Du benötigst dafür einen PHP fähigen Webspace mit einer MySQL Datenbank. Die Tabelle wird 6 Spalten der folgenden Typen haben.

\text{<br />\begin{tabular}{r|l|l}<br />id & SMALLINT (5) & eindeutige Nummer \\<br />name & VARCHAR (128 ) & Der Name des Besuchers \\<br />email & VARCHAR (128 ) & Die e-Mail Adresse des Besuchers \\<br />homepage & VARCHAR (128 ) & Die Homepage Adresse des Besuchers \\<br />date & INT (11) & Das Datum zur Zeit des Eintrags \\<br />comment & TEXT & Und der Eintrag des Besuchers<br />\end{tabular}<br />}

Die Zahl in den Klammern gibt die Größe an, also wie viele Zeichen die Spalte enthalten darf, bzw. wie viele Ziffern eine Zahl haben kann.

Jetzt musst du dir noch ein Script schreiben, welches dir die Datenbank erstellt. Falls du Zugriff auf phpMyAdmin hast, kannst du die Tabelle auch von Hand erstellen. Ich werde hier jedoch nur die automatische Erstellung per Script erläutern. Um überhaupt Zugriff auf die Datenbank zu erhalten musst du zu dieser eine Verbindung herstellen. Hierfür steht die Funktionen mysql_connect und mysql_select_db zur Verfügung.

PHP - Code:
 
<?php
    $db_host = "localhost"//Der Host ist meistens localhost.
    $db_user  = "";  //Der Benutzername zur Datenbank
    $db_pass = "";    //Das Passwort der Datenbank
    $db_name = "";    //Der Name der Datenbank
 
    //Verbindung zur Datenbank herstellen
    mysql_connect($db_host, $db_user, $db_pass) OR die("Fehler beim Zugriff auf die Datenbank.");
    //Datenbank auswählen
    mysql_select_db($db_name);
?>
 


Die genauen Daten für die Verbindung zur Datenbank ermittle bitte aus den Informationen deines Webspace Anbieters. Nachdem du eine Verbindung zur Datenbank hergerstellt hast, kannst du nun die Tabelle erstellen. Diesmal benötigen wir die Funktion mysql_query, die wir später auch noch beim Auslesen und Eintragen in die Datenbank verwenden werden. Der Funktion müssen wir den MySQL Befehl übergeben, der in diesem Fall die Tabelle einrichtet.

PHP - Code:
 
<?php
    //MySQL Dump
    $sql = "CREATE TABLE guestbook (
                id smallint(5) unsigned NOT NULL auto_increment,
                name varchar(128 ) default NULL,
                email varchar(128 ) default NULL,
                homepage varchar(128 ) default NULL,
                date int(11) default NULL,
                comment text,
                PRIMARY KEY  (id)
        ) TYPE=MyISAM"
;
        //Damit id automatisch erhöht werden kann, muss id Primary Key sein
        //Type=MyISAM ist der Typ der Tabelle, MyISAM ist der Standard Typ
 
    //Tabelle erstellen
    mysql_query($sql);
?>
 



2. Daten eintragen

Jetzt sollten wir eine Funktionsfähige Tabelle mit dem Namen "guestbook" haben. Machen wir uns also daran, einige Daten in die Tabelle einzutragen.Als erstes benötigen wir eine Benutzerschnittstelle, damit der Besucher sich auch eintragen kann. Ich gehe hier davon aus, dass die HTML Tags bekannt sind. Andernfalls können sie auf SelfHTML eingesehen werden.

PHP - Code:
 
<?php
    if (isset($_POST['submit']))
    {
        //Überprüfen, ob der Name eingetragen wurde
        if ($_POST['name'] == '')
            $error_msg .= 'Der Name fehlt.<br />';
        //Überprüfen, ob der Kommentar eingetragen wurde
        if ($_POST['comment'] == '')
            $error_msg .= 'Der Kommentar fehlt.<br />';
 
        if ($error_msg == '')
        {
            //Benutzereingaben sichern, damit der MySQL-Befehl nicht manipuliert werden kann
            $name = mysql_real_escape_string($_POST["name"]);
            $email = mysql_real_escape_string($_POST["email"]);
            $homepage = mysql_real_escape_string($_POST["homepage"]);
            $comment = mysql_real_escape_string($_POST["comment"]);
           
            //der MySQL Query zum Eintragen
            $sql = "INSERT INTO guestbook (name, email, homepage, date, comment)
                    VALUES ('"
.$name."', '".$email."', '".$homepage."', '".time()."', '".$comment."')";
 
            //Hier muss vorher noch eine Verbindung zur Datenbank aufgebaut werden
            mysql_query($sql);
        } else
            echo 'Es sind Fehler aufgetreten:<br />'.$error_msg.'<br />';
    } else
    {
        //Ab hier sollte alles klar sein, die Variable $PHP_SELF enthält den Scriptnamen des Scripts,
        //es ruft sich also selbst auf.
        echo '<table>
            <form method="post" action="'
.$PHP_SELF.'">
            <tr>
                <td>Name:</td><td><input type="text" name="name"></td>
            </tr>
            <tr>
                <td>e-Mail:</td><td><input type="text" name="email"><td>
            </tr>
            <tr>
                <td>Homepage:</td><td><input type="text" name="homepage"></td>
            </tr>
            <tr>
                <table>
                    <tr>
                        <td>Komentar:</td>
                    </tr>
                    <tr>
                        <td><textarea name="comment"></textarea></td>
                    </tr>
                </table>
            </tr>
            <tr>
                <td><input type="submit" name="submit" value="Eintragen"></td>
            </tr>
        </table>'
;
    }
?>
 



3. Daten abfragen

Jetzt fehlt nur noch eins, das Anzeigen der Daten. Wir möchten schließlich dem Besucher auch die Einträge der ihm vorangehenden Besucher anzeigen. Hier kommt wieder eine neue Funktion ins Spiel. mysql_fetch_array und mysql_fetch_object, wobei ich in dem Code die letztere Funktion verwenden werde. Was für andere alternativen es noch gibt findest du auf php.net. Auch hier muss vor dem ersten MySQL Befehl die Verbindung zur Datenbank hergestellt werden.

PHP - Code:
 
<?php
    //ORDER BY date DESC steht für Sortiere nach date und den ältesten Eintrag zuerst
    $sql = "SELECT name, email, homepage, date, comment FROM guestbook ORDER BY date DESC";
    //Hier benötigen wir das Ergebnis von mysql_query
    $res = mysql_query($sql);
    while ($line = mysql_fetch_object($res))
    {
        echo '<table>
            <tr>
                <td>Datum:</td><td>'
.date("d.m.Y", $line->date).'</td>
            <tr>
                <td>Name:</td><td>'
.$line->name.'</td>
            </tr>
            <tr>
                <td>e-Mail:</td><td>'
.$line->email.'</td>
            </tr>
            <tr>
                <td>Homepage:</td><td>'
.$line->homepage.'</td>
            </tr>
            <tr>
                <td>Kommentar:</td><td>'
.$line->comment.'</td>
            </tr>
        </table'
;
    }
?>
 



4. Funktionen

Hier nochmals alle verwendeten und noch ein paar weitere Funktionen im Überblick mit einer kurzen Beschreibung. Eine Referenz zu den MySQL Befehlen ist auf http://www.mysql.de zu finden, eine zu den PHP Funktionen für MySQL auf http://www.php.net .

MySQL Befehle:
  • CREATE TABLE -- Erstellen einer neuen Tabelle
  • INSERT INTO -- Werte in eine Tabelle eintragen,
    Bsp.: INSERT INTO guestbook (name, date) VALUES ('N43', '1078017138')
  • SELECT FROM -- Werte aus einer Tabelle auslesen,
    Bsp.: SELECT name, date FROM guestbook
  • DELETE FROM -- Zeile aus der Tabelle löschen,
    Bsp.: DELETE FROM guestbook WHERE user='N43'
  • UPDATE -- UPDATE guestbook SET user='N43' WHERE user != 'N43'


PHP/MySQL Funktionen:
  • mysql_connect() -- Verbindung zur Datenbank herstellen
  • mysql_select_db() -- Datenbank auswählen
  • mysql_query() -- MySQL Befehl ausführen
  • mysql_fetch_array() -- Nächste Zeile, die vom Query zurückgeliefert wurde abfragen
    (steht dann in der Form $line["spaltenname"] zur Verfügung)
  • mysql_fetch_object() -- Nächste Zeile, die vom Query zurückgeliefert wurde abfragen
    (steht dann in der Form $line->spaltenname zur Verfügung)


5. Verbesserungen

Es gibt noch allerlei, was man an dem Gästebuch verbessern, bzw. erweitern könnte. Das wäre natürlich ein anspruchsvolleres Design. Vom Programmiertechnischen her könntest du noch Funktionen zum kommentieren oder löschen schreiben mit einer Passwort Abfrage, dass nur der Administrator Zugriff auf diese Features hat.


Das war's auch schon. Ich hoffe, dass das Tutorial dich weiter gebracht hat.

Daniel

15.03.2004
Author: Daniel

Wäre nicht schlecht,
wenn in diesem Tutorial einmal erklärt würde wie man die Einträge wieder löschen kann,
oder wie der SQL Befehl lauten müsste damit
der Admin Einträge löschen kann.
Wenn das einer mir mal eben erklären könnte, wäre das super.
Mail bitte
an
daniel@pinetree-online.de
oder per ICQ
193576214

N43

16.03.2004
Author: N43

Der MySQL Code, um Einträge wieder zu löschen ist:

Code:
DELETE FROM guestbook WHERE id='zahl'

Einen neuen Kommentar erstellen...