Anfang

Bei MySQL handelt es sich um eine Datenbank die wie z. B. Access auf SQL aufgebaut ist. Doch was ist eine Datenbank eigentlich? Datenbanken helfen uns dabei große Datenmengen zu verwalten. Normalerweise gibt es die eigentliche Datenbank in der alle Daten - in einer bestimmten Form - gespeichert werden und eine Möglichkeit, diese Daten zu verwalten. Die Datenverwaltung übernehmen wir in unserem Fall (großteils) selbst - mit dem, was wir in PHP programmieren. Du wirst nachher sehen, dass wir außerdem eine Benutzeroberfläche namens phpMyAdmin benutzen, damit wir nicht für jede Kleinigkeit ein PHP-Script schreiben müssen.

Bei den meisten Webspaceangeboten mit Datenbankuntestützung handelt es sich um MySQL Datenbanken, da die dazu benötigte Software Freeware ist.

Man kann sich sowohl MySQL, als auch eine sehr angenehme Benutzeroberfläche auf seinem eigenen Rechner installieren. Da dies jedoch sehr häufig zu Problemen führt, bevorzuge ich es, Datenbankanbindungen direkt bei meinem Hoster zu testen und nicht extra offline zu arbeiten.

Da die meisten Hoster mittlerweile sogar die Administrationsoberfläche phpMyAdmin für die Datenbanken bereits vorinstalliert anbieten und sich sowohl MySQL, als auch phpMyAdmin derart schnell weiterentwickeln, dass man selbst manchmal mit dem Updaten nicht nachkommt, gibt es hier keine Erklärung (mehr) für die Installation, sondern nur noch eine für die Anwendung.

Je nach Hoster hat man normalerweise entweder im Kundenmenü die Möglichkeit, sich eine Datenbank anzulegen und dabei Benutzername und Kennwort zu wählen, oder man bekommt die Datenbank fix vorinstalliert vom Hoster, der einem auch das Passwort und den Benutzernamen mitteilt.

Ebenso erfährt man vom Hoster oder direkt im Kundenmenü die URL für die phpMyAdmin, die normalerweise in einem passwortgeschützten Verzeichnis liegen sollte, wodurch man sich beim Aufrufen mit einem Benutzernamen und einem Passwort identifizieren muss. Das kann dasselbe sein wie für die Datenbank oder für den FTP-Zugang, muss es aber nicht. Im Notfall hilft der Hoster da aber sicher gerne weiter.

Über die phpMyAdmin kann man dann mittels einer bequemen Oberfläche seine Datenbank(en) und Tabellen verwalten, anlegen, löschen, exportieren etc. All diese Operationen kann man selbstverständlich auch ohne phpMyAdmin ausführen, indem man den entsprechenden Code einfach von Hand programmiert, aber ehrlich gesagt ist es für viele Dinge einfach angenehmer, etwas Fertiges zu verwenden.

Aber genug der Einführung, wir rufen jetzt einmal die phpMyAdmin auf und legen unsere erste Tabelle an.


Datenbanken und Tabellen

Eigentlich arbeiten wir nicht direkt mit Datenbanken, sondern mit den Tabellen, die sich darin befinden. So kann eine Datenbank aus vielen Tabellen bestehen und die Datenbank ist eigentlich nicht mehr als ein Ordner, in dem sich alle diese Tabellen befinden.

In diesen Tabellen finden wir die Daten, auf die das jeweilige Programm zugreifen kann, um sie für den Anwender übersichtlich darzustellen. Du kennst das vielleicht auch aus anderen Programmen. So arbeitet zum Beispiel MS Project mit den Daten einer Datenbank - daneben gibt es natürlich auch die eine oder andere MS Project Alternative. Gemeinsam ist ihnen die Datenbankanbindung; häufig, so wie bei uns, in Form von MySQL. Auch in anderen Unternehmensbereichen werden gerne (und sinnvoller Weise) Datenbanken eingesetzt.

Wir fangen aber erst mal ganz klein an und lernen, wie man eine Datenbank und Tabellen anlegt. Die Datenbank wird üblicherweise direkt vom Hoster angelegt oder wir können sie über das Kundenmenü erstellen. Im Zweifel schaue dir bitte die Doku deines Hosters an. Dort findest du auch, wie du Zugriff auf phpMyAdmin erhältst.

In phpMyAdmin sehen wir auf der linken Seite alle unsere Datenbanken. Wenn wir nur eine haben, sehen wir auch gleich die dazugehörigen Tabellen, sonst müssen wir zuerst die Datenbank aussuchen, mit der wir arbeiten wollen. Da in unserer Datenbank noch keinerlei Tabellen sind, legen wir jetzt eine an.

Dabei können wir entweder mit SQL-Anweisungen arbeiten oder eine bequeme Benutzeroberfläche nutzen. Der Weg über die SQL-Anweisung ist der schnellere - jedoch muss man dafür auch Ahnung von SQL haben :-) Wir machen es also über die Benutzeroberfläche.

Wir wählen dafür zuerst unsere Datenbank aus indem wir links darauf klicken oder sie je nach Version aus einem Dropdown-Feld auswählen. Ganz unten auf der Seite finden wir jetzt Neue Tabelle in Datenbank DB-NAME erstellen: und vergeben einen Tabellennamen. Außerdem müssen wir festlegen, wieviele Spalten wir brauchen.

Aus dem Grund ist es sinnvoll, sich zunächst zu überlegen, was man in der Tabelle braucht.

Es ist vernünftig in jeder Tabelle eine so genannte ID zu verwenden, die jeden Datensatz eindeutig identifiziert. Alle anderen Felder richten sich nach der Verwendung der Datenbank.

Ich werde jetzt eine Tabelle verwenden, die den Sinn einer Linkverwaltung hat. Das heißt, wir speichern darin die Internetadressen, den Namen des Links, den Namen des Besitzers der HP, die Adresse zu einem Banner (falls wir unterschiedlich große Banner haben können wir auch noch Breite und Höhe darin abspeichern - das machen wir jetzt aber nicht) und eine Seitenbeschreibung. Später können wir diese Daten über unterschiedliche Abfragetypen wieder auslesen. Wir legen also zunächst insgesamt 6 Felder in unserer Tabelle an.

Dafür schreiben wir in das erste Feld, das den Namen der Tabelle bestimmt links und in das zweite Feld, das die Anzahl der Spalten angibt 6 hinein und klicken danach auf OK.

Jetzt landen wir bei einer weiteren Benutzeroberfläche mit zahlreichen Reihen und Spalten. Jede Reihe entspricht einem Feld und die Spalten bieten uns unterschiedliche Möglichkeiten.

In die erste Spalte gehört der Feldname eingetragen, danach folgt der Typ (hier wird z. B. festgelegt ob es sich um ein Feld mit Zahlen oder mit Text handelt). In die dritte Spalte wird die maximale Länge des Feldinhaltes geschrieben (ist jedoch nicht bei allen Felddatentypen möglich). Die nächste Spalte kannst du erstmal ignorieren, phpMyAdmin verwendet dort Standardwerte, wenn du nichts angibst und mit denen fährst du meistens richtig. Danach folgen noch Attribute, die Bestimmung ob das Feld leer sein darf, Standardwerte, Extras und zum Schluss die Festlegung ob es sich um einen Schlüssel, ein Indexfeld und/oder ein einmaliges Feld handelt. Außerdem ist es möglich, einen Haken bei Volltext zu setzen oder einen Kommentar dazu zu schreiben.

Puh, was heißen denn jetzt diese ganzen Fachbegriffe?

Nun, ein Schlüsselfeld dient dazu, einen Datensatz eindeutig zu identifzieren. Daher ist es automatisch auch ein "einmaliges Feld", das heißt, der Feldinhalt darf kein zweites Mal in der selben Spalte vorkommen (das sind meistens IDs - also jede ID nur einmal und nicht doppelt vergeben).

Wir verwenden jetzt also für unsere ID folgende Werte:

id, int, 5, leer lassen, unsigned, not null, leer lassen, auto_increment, Haken bei Primärschlüssel setzen

Durch int wird das Feld als Zahlenfeld festgelegt (int steht für Integer - einen speziellen Zahlentyp) und auto_increment legt fest, dass das Feld automatisch um eines erhöht wird bei jedem neuen Datensatz. Der Haken bei Primärschlüssel sorgt dafür, dass unsere id als Schlüssel verwendet wird.

Für die anderen verwenden wir:

url, varchar, 100, leer lassen, not null, alles andere leer lassen
urlname, varchar, 250, leer lassen, not null, alles andere leer lassen
name, varchar, 100, leer lassen, not null, alles andere leer lassen
banner, varchar, 250, leer lassen, not null, alles andere leer lassen
beschreibung, text, leer lassen, leer lassen, not null, alles andere leer lassen

varchar Felder sind Textfelder mit einer bestimmten Größe und text sind Textfelder ohne bestimmte Größe (falls besonders viel Inhalt erforderlich ist, ist auch longtext möglich.

So sieht das dann aus: Popup

Unsere Eingaben bestätigen wir anschließend mit Speichern und bekommen dann die Meldung, dass die Tabelle angelegt wurde (inklusive des dazugehörigen SQL-Statements).

Damit haben wir jetzt die Tabelle angelegt und können sie als nächstes füllen.


Tabellen füllen

Um die benötigten Daten in die Tabelle zu bringen gibt es jetzt verschieden Möglichkeiten.

Die erste eignet sich vor allem dann, wenn sämtliche Daten bereits als Datei (besonders angenehm - fertige CSV-Dateien) vorliegen.

In dem Fall wählen wir in phpMyAdmin ganz oben Importieren und geben den Pfadnamen und die Zeichencodierung (das voreingestellte utf8 funktioniert meistens, ansonsten probiere es am besten mal mit binary) an. Bei Dateiformat wählen wir CSV und können jetzt noch ein paar Punkte auswählen:

Tabelleninhalte ersetzen sorgt dafür, dass die Daten, die schon in der Tabelle stehen von den Daten unserer CSV-Datei ersetzt werden.
Ignoriere doppelte Zeilen soll genau das machen.
Felder getrennt mit gibt die Trennzeichen der einzelnen Spalten an. Ich verwende dafür gerne |, weil die normalerweise nicht als tatsächlicher Inhalt vorkommen. Das musst du aber an deine CSV-Datei anpassen. Ebenso die Punkte Felder eingeschlossen mit, Felder escaped von und Zeilen getrennt mit. Außerdem kannst du noch die Spaltennamen, die importiert werden sollen angeben. Nicht immer klappt alles, wenn du merkwürdige oder keine Daten in die Datenbank bekommst, probiere es einfach mit geänderten Einstellungen noch einmal.

Aber was ist denn eigentlich eine CSV-Datei? Nun ja, es ist einfach eine Textdatei in der alle Inhalte gespeichert sind und in der die einzelnen Spalten mit einem Trennzeichen voneinander getrennt werden. Das schaut dann ungefährt so aus (immer ein Datensatz in einer Zeile - hier ist nur aus Platzgründen ein Zeilenumbruch):
  1|http://www.schattenbaum.net|Schattenbaum|Claudia
    Unkelbach|schattenbanner.gif|Viiiiieles!
  2|http://www.htmling.net|HTMLing|Cloud & Unki|
    htmling.gif|Tutorials zu HTML, CSS, Flash und PHP
  3|http://www.gedichte-traumland.de|Dreamer's 
    Traumwelten|Dreamer|dreamerbanner.jpg|Gedichte,
    Gedichte, Gedichte ...
Hat man die Daten bereits in einer Excel-Tabelle kann diese ganze einfach als CSV-Datei exportiert werden. Sonst kann man sie aber auch problemlos mit einem Texteditor anlegen.

Hat man keine CSV-Datei kann man die Daten auch einzeln per Hand eintragen.

Dazu wählen wir den Link Einfügen und füllen alle Felder in der Spalte Wert aus (die anderen Felder bitte so lassen, wie sie sind!), außer id. Dabei müssen wir jeden Datensatz einzeln eintragen, bzw. jeweils zwei auf einmal, wenn man den Haken bei "Ignorieren" weg macht. Wenn man mit dieser Methode mehrer Datensätze auf einmal eintragen muss ist es daher sinnvoll "Als neuen Datensatz speichern" und "anschließend einen weiteren Datensatz einfügen" auszuwählen, ansonsten kannst du das zweite Feld auch auf "zurück" lassen.

Da wir für das ID-Feld den Wert auto_increment verwenden müssen wir das id-Feld nicht ausfüllen (wenn wir eine CSV-Datei verwenden muss es aber angegeben sein!).

Wenn du jetzt eine der beiden Methoden nutzt und ein paar Daten einfüllst, haben wir schon die ersten Datensätze in unserer Tabelle und können damit weiter arbeiten.


Verbindung herstellen

Um jetzt mit PHP auf die Daten in unserer Datenbank zugreifen zu können, müssen wir zunächst eine Verbindung herstellen. Dies erfolgt über den Befehl mysqli_connect und noch vor allen anderen Inhalten des Dokumentes.

Der Befehl benötigt den Servernamen, den Benutzernamen, Kennwort und die gewünschte Datenbank. Zusätzlich ist es möglich Port und Socket anzugeben, das wird aber in den meisten Fällen für dich nicht notwendig sein.

Benutzername und Kennwort sind jeweils die, die bei der Datenbank angegeben werden. Du findest sie entweder in der Konfigurationsoberfläche deines Hosters oder hast sie evtl. per eMail bekommen. Der Servername ist häufig "localhost". Immer mehr Hoster haben aber ihre Datenbanken auf einen eigenen Server ausgelagert. In dem Fall muss dann der Pfad zu dem Server angegeben werden. Der Name der Datenbank ist üblicherweise ebenfalls vom Hoster vorgegeben und findet sich in den meisten Fällen dort, wo du auch deine Datenbank anlegst.

Um die Datenbankverbindung (und damit die Datenbank selbst) später ansprechen zu können schreiben wir den Verbindungsaufbau in eine Variable. So schaut das dann z. B. aus:
<?php
$db = mysqli_connect("localhost", "Benutzername", "Passwort", "Datenbankname");
?>
Sollte irgendetwas bei der Verbindung zur Datenbank nicht funktionieren, ist es sinnvoll, sich Fehlermeldungen anzeigen zu lassen, damit man weiß, wo der Fehler auftrat. Das sieht dann so aus:
<?php
$db = mysqli_connect("localhost", "Benutzername", "Passwort", "Datenbankname");
if(!$db)
{
  exit("Verbindungsfehler: ".mysqli_connect_error());
}
?>
Nach der Verbindung zur Datenbank wird überprüft, ob tatsächlich etwas in unserer Variable $db enthalten ist. Falls nicht ist irgendetwas schiefgegangen und wir rufen die Funktion exit auf. Sie sorgt dafür, dass der nachfolgende Code nicht ausgeführt wird und zeigt zusätzlich das an, was wir in der Klammer dahinter angegeben haben. In unserem Fall also den Text "Verbindungsfehler:" gefolgt vom Befehl mysqli_connect_error(). Dieser enthält die Fehlermeldung, die mySQL geliefert hat und hilft uns hoffentlich dabei, das Problem zu lösen.

Manchmal wirst du über den Befehl die anstatt exit stoßen. Er funktioniert genauso und die Verwendung ist nur eine Frage der persönlichen Vorlieben.

Da die Daten zur Datenbankverbindung in den meisten Fällen in mehreren Dateien verwendet werden, sich aber bei einem Serverumzug ändern könnten, ist es sinnvoll, diesen Teil in einer extra Datei zu speichern und sie anschließend über den Befehl include in jeder Seite wieder einzubinden - so braucht man eine spätere Änderung nur in einer Datei vornehmen.

Bei mir nennt sich diese Datei dbconnect.php (die Endung ist egal, aber eine PHP-Datei kann von niemandem gelesen werden und somit sind die Daten sicher) und beinhaltet genau das, was wir oben schon gemacht haben:
<?php
$db = mysqli_connect("localhost", "Benutzername", "Passwort", "Datenbankname");
if(!$db)
{
  exit("Verbindungsfehler: ".mysqli_connect_error());
}
?>
In der Datei, in der wir die Datenbankverbindung benötigen steht dann ganz oben (vor <html> oder irgendetwas anderem)
<?php
include("dbconnect.php");
?>
Als nächstes wollen wir uns ansehen, wie wir unsere Daten abfragen können.
Einfache Abfragen

Die Daten aus unseren Tabellen können wir jetzt mittels SQL-Befehlen wieder abfragen.

Dabei wird zunächst die gewünschte Abfrage festgelegt und in einer Variable gespeichert - anschließend wird die Abfrage ausgeführt.

Bei der einfachsten Form der Abfrage wird festgelegt, welche Spalten aus welcher Tabelle übernommen werden sollen. Das sieht dann (inkl. Speicherung in einer Variable) so aus:
<?php
$abfrage = "SELECT url FROM links";
?>
Damit wählen wir die Spalte url aus der Tabelle links aus.

Möchten wir mehrere Spalten auswählen, werden die einzelnen Spaltennamen durch ein Komma voneinander getrennt:
<?php
$abfrage = "SELECT url, urlname, besitzer FROM links";
?>
Wenn wir jedoch alle Spalten aus einer Tabellen haben wollen, müssen wir nicht jeden Spaltennamen extra angeben sondern können den Stern * verwenden, der alle Spalten auswählt. Die Verwendung von * gilt häufig als "schlechter Stil", da er mehr Rechenleistung erfordert und langsamer ist als die Auswahl einzelner Spalten. Außerdem kann er zu kleineren Merkwürdigkeiten führen falls du mehrere Tabellen auf einmal abfragst, die identische Spaltennamen haben. Aber für den Anfang empfehle ich dir, dich damit nicht herumzuärgern.
<?php
$abfrage = "SELECT * FROM links";
?>
Mit diesem System wird jeweils der Spaltenname als Variablenname verwendet. Wollen wir andere Namen dafür haben können wir folgendes verwenden:
<?php
$abfrage = "SELECT url AS adresse FROM links";
?>
Damit ist die URL nicht mehr unter der Variable url sondern unter adresse gespeichert.

Um die Abfrage jetzt auch auszuführen und die dabei erhaltenen Daten in einer Variable zu speichern verwenden wir den Befehl mysqli_query. Dabei wird zunächst die Verbindung zur Datenbank angegeben, die wir am Anfang in der Variable $db gespeichert haben, gefolgt von der eigentlichen Abfrage - in diesem Fall in der Variable $abfrage hinterlegt.
<?php
$abfrage = "SELECT url AS adresse, urlname, besitzer FROM links";
$ergebnis = mysqli_query($db, $abfrage);
?>
Damit sind jetzt die Daten in der Variable $ergebnis gespeichert.

Wir können das natürlich auch noch zusammenfassen, anstatt es in zwei Variablen zu schreiben:
<?php
$ergebnis = mysqli_query($db, "SELECT url AS adresse, urlname, besitzer FROM links");
?>
Neben diesen ganz simplen Abfragen, gibt es aber auch speziellere Abfragen.


Weitere Abfragen

Bisher haben wir entweder alle Spalten oder einige Spalten einer kompletten Tabelle abgefragt. Das heißt, wir haben nicht nach irgendwelchen Kriterien ausgewertet. Aber auch das ist mit PHP und MySQL möglich.

Nehmen wir an, wir wollen alle Datensätze anzeigen, bei denen die id kleiner als 5 ist. Für den Zweck können wir folgenden Befehl verwenden:
<?php
$abfrage = "SELECT * FROM links WHERE id < 5";
?>
Durch das Anhängen des Befehls "WHERE" und der Bedingung, die daran angeschlossen wird, können wir das erreichen.

Möchte man alle Links anzeigen lassen, die von einem bestimmten Menschen sind, kann man auch dieses machen:
<?php
$abfrage = "SELECT * FROM links WHERE name LIKE 'Claudia Unkelbach'";
?>
Diese Abfrage enthält alle Links, bei denen mein Name eingetragen ist (ist natürlich hauptsächlich dann sinnvoll, wenn es dazu mehrere Links gibt).

Dabei muss das gesuchte Wort unter Anführungszeichen gesetzt werden.

Eine weitere "besondere" Abfrage erfolgt dann, wenn wir die Datensätze sortieren lassen - z. B. nach den Adressen der Seiten.

Zu diesem Zweck gibt es den Befehl ORDER BY.
<?php
$abfrage = "SELECT * FROM links ORDER BY url";
?>
Nach dem ORDER BY wird das Feld angegeben, nach dem sortiert werden soll.

Standardmäßig erfolgt die Sortierung von A bis Z. Möchte man sie jedoch umgekehrt sortiert haben kann man noch den Befehl DESC anhängen (der Befehl für eine Sortierung von A bis Z wäre ASC).
<?php
$abfrage = "SELECT * FROM links ORDER BY url DESC";
?>
Der Befehl DESC funktioniert nur in Verbindung mit einer ORDER BY Anweisung (sonst ist ja nicht bekannt, was absteigend sortiert werden soll).

Ein letzter interessanter Befehl für Abfragen ist das LIMIT.

Mit diesem kann bestimmt werden, dass nur eine bestimmte Anzahl von Datensätzen abgefragt werden soll (ist z. B. bei Gästebüchern sehr interessant).

Der Befehl besteht aus zwei Angaben. Die erste sagt, ab welchem Datensatz abgefragt werden soll und der zweite gibt an, wieviele Datensätze abgefragt werden sollen.
<?php
$abfrage = "SELECT * FROM links LIMIT 4, 10";
?>
Damit werden 10 Datensätze ab dem 5. abgefragt (der erste Datensatz ist 0).

Möchte man beim ersten Datensatz beginnen ist die zweite Angabe ausreichend (die Anzahl der Datensätze die abgefragt werden sollen).
<?php
$abfrage = "SELECT * FROM links LIMIT 10";
?>
Möchte man anstatt der ersten 10 Datensätze die letzten 10 angezeigt bekommen ist es sinnvoll, sie davor zu sortieren (am besten wiederum nach der id).
<?php
$abfrage = "SELECT * FROM links ORDER BY id DESC LIMIT 10";
?>
Zunächst werden die Datensätze nach der id sortiert und anschließend in eine absteigende Reihenfolge gebracht. Zum Schluss wird bestimmt, dass lediglich 10 Datensätze ausgegeben werden sollen.

Lass dich von dieser Vielzahl von unterschiedlichen Abfragen nicht verwirren. Die, die du verwendest bzw. brauchst, wirst du immer finden - einfach indem du dir durch den Kopf gehen lässt, was du brauchst.

Und als nächstes schauen wir uns an, wie wir die Daten ausgeben können, die wir gerade erhalten haben.


Daten ausgeben

Nachdem wir nun die Abfrageergebnisse in einer Variable gespeichert haben, könnte man annehmen, dass man diese Variable einfach nur mittels echo ausgeben muss. Dem ist aber (leider) nicht so.

Die Daten, die wir erhalten haben, verhalten sich ähnlich wie ein Array, müssen jedoch erst übergeben werden.

Wollen wir alle Daten ausgeben (bzw. alle Datensätze) verwenden wir am besten eine while-Schleife, die alle Datensätze übernimmt und ausgibt und solange ausgeführt wird, wie Datensätze im Abfrageergebnis vorhanden sind.

Zur Übernahme der Datensätze wird der Befehl mysqli_fetch_object verwendet.
<?php
$ergebnis = mysqli_query($db, "SELECT url, urlname FROM links");
while($row = mysqli_fetch_object($ergebnis))
{
  echo $row->url;
}
?>
Das schaut auf den ersten Blick viel komplizierter aus, als es tatsächlich ist.

Die erste Zeile macht das, was wir bereits durchgeführt haben (die Abfrage erstellen und ausführen) und ist hier nur, um klar zu machen, was genau wir abgefragt haben.

Danach kommt die while-Schleife. Die Bedingung dazu lautet "solange ein Eintrag aus der Variable Ergebnis als Arrayinhalt in die Variable row geschrieben wird führe die Schleife aus" - dadurch werden alle Datensätze ausgegeben und die while-Schleife automatisch beendet, wenn alles ausgegeben ist.

Schließlich die Anweisung zur while-Schleife. Hierbei wird mittels echo Befehl jeweils der Inhalt der Spalte url ausgegeben (das $row->url ist notwendig, weil wir so die jeweilige Spalte ansprechen).

Über $row-> und den Spaltennamen können die Spalten beliebig angesprochen werden.

Hier wird nur eine URL nach der anderen ausgegeben. Wenn die einzelnen Inhalte voneinander getrennt werden sollen müssen wir das zusätzlich in der while-Schleife angeben, z. B. so:
<?php
$ergebnis = mysqli_query($db, "SELECT url, urlname FROM links");
while($row = mysqli_fetch_object($ergebnis))
{
  echo $row->url;
  echo "<br />";
}
?>
Dadurch würde nach jeder URL eine neue Zeile anfangen.

Für besondere Ausgaben (wie z. B. Tabellen, die jeweils eine bestimmte Anzahl von Spalten haben sollen) genügt ebenfalls eine while-Schleife, jedoch sieht diese dann weitaus umständlicher und komplizierter aus und ist darüber hinaus verschachtelt. Aber das Prinzip bleibt immer gleich.

Als nächstes wäre von Interesse, wie über PHP (also z. B. mittels eines Onlineformulares) Datensätze in der Datenbank aufgenommen werden können.


Daten hinzufügen

Das Einfügen von Daten in eine Datenbank funktioniert am sinnvollsten mit einem Formular, in das diese Daten eingegeben werden können und das danach übermittelt wird.

In unserem Fall mit der Linkliste könnte man damit z. B. eine Linkliste, in die andere ihre Seiten eintragen können realisieren. Oder es dient einfach als Online-Administration.

Ich setze jetzt also ein Formular voraus, in das die Url, der Name des Links, der Name des Seitenbesitzers, eine Bannerurl und eine Beschreibung eingetragen werden. Das Formular wird ganz normal mittels HTML erstellt, denk bitte daran, dass die Namen der einzelnen Formularfelder zu unseren Variablennamen werden. Wir wollen die Variablen url, hpname, name, banner und beschreibung verwenden.

Wenn das Formular für die Öffentlichkeit bestimmt ist, und du die übergebenen Daten nicht von Hand kontrollierst, bevor du sie in die Datenbank speicherst, ist es empfehlenswert, die aus dem Formular kommenden Daten zuerst zu überprüfen, ansonsten kann es zu Angriffen auf deine Datenbank kommen - da das aber tiefergehendes Wissen erfordert, lassen wir es für dieses Beispiel aus und übernehmen die Daten direkt.

Um es später übersichlichter zu machen, schreibe ich sie aber gerne in kurze Variablen um:
<?php
$url = $_POST["url"];
$hpname = $_POST["hpname"];
$name = $_POST["name"];
$banner = $_POST["banner"];
$beschreibung = $_POST["beschreibung"];
?>
Der Befehl zum Einfügen dieser Daten funktioniert jetzt so ähnlich wie die Abfrage. Zunächst wird festgelegt was, wo eingefügt werden soll und das wird in einer Variable gespeichert.
<?php
$eintrag = "INSERT INTO links (url, urlname, name, banner, beschreibung) VALUES ('$url', '$hpname', '$name', '$banner', '$beschreibung')";
?>
Nach dem "INSERT INTO" wird festgelegt in welche Tabelle und in welche Spalten (die Angabe der Spaltennamen erfolgt in Klammer) unsere Daten eingefügt werden sollen. Mit "VALUES" wird angegeben, was für Werte verwendet werden sollen. Da bei uns alles in Variablen gespeichert wird, werden diese Variablennamen in Hochkomma angeführt.

Da wir für die Spalte id Autowerte verwenden müssen wir diesen Wert nicht von Hand eintragen - er wird automatisch eines höher gesetzt als der vorige Wert war.

Um den Eintrag jetzt durchführen zu lassen verwenden wir wieder den Befehl mysqli_query.
<?php
$eintragen = mysqli_query($db, $eintrag);
?>
Und schon stehen die Daten in der Datenbank.

Das kann man natürlich auch wieder in einen einzelnen Befehl zusammen fassen:
<?php
$eintragen = mysqli_query($db, "INSERT INTO links (url, urlname, name, banner, beschreibung) VALUES ('$url', '$hpname', '$name', '$banner', '$beschreibung')");
?>
Gerade bei dieser Funktion passieren mir meistens Fehler, da es sehr schnell passiert, dass Variablennamen falsch geschrieben oder zuwenige Werte angeben werden. Dann erfolgt überhaupt kein Eintrag in die Datenbank. Gib also darauf acht.

SQL-Injections
Das hier ist ein Anfängertutorial, das die grundlegende Handhabung möglichst einfach und verständlich erklären soll. Es bezieht bewusst keine Sicherheitsmaßnahmen mit ein um übersichtlich und auch für Anfänger nachvollziehbar zu bleiben.
Zum Schutz vor SQL-Injections ist es in öffentlich zugänglichen Seiten anzuraten, sich mit der Funktion mysqli_real_escape_string zu beschäftigen. Beachte bitte, dass auf vielen Servern noch magic_quotes aktiv sind, die mit dieser Funktion kollidieren!


Nachdem wir jetzt Datensätze eingefügt haben, wollen wir auch wieder welche löschen.


Daten löschen

Das Löschen von Datensätzen aus einer Datenbank ist mit noch weniger Aufwand verbunden als das Einfügen von Daten. Jedoch sollte man sich bei jedem Löschvorgang bewusst sein, dass er nicht rückgängig gemacht werden kann.

Man gibt hierbei ebenfalls an, welche Tabelle angesprochen werden soll und zusätzlich welcher Datensatz gelöscht werden soll.

Die Bestimmung des Datensatzes erfolgt über einen bestimmten Inhalt einer Spalte. Daher eignet sich beim einzelnen Löschen vor allem das id-Feld um einen Datensatz eindeutig zu identifizieren und daher keinen falschen zu löschen.

Auch hier erfolgt die Ausführung des Befehls in zwei Schritten:
<?php
$loeschen = "DELETE FROM links WHERE id = '3'";
?>
Mit dem "DELETE FROM" wird festgelegt, aus welcher Tabelle die Datensätze gelöscht werden sollen und nach dem "WHERE" wird festgelegt welche Spalte welchen Wert erhalten soll (der Wert wird in einfache Anführungszeichen (auch Hochkommata genannt) gesetzt).

In unserem Fall ist das die Spalte id und der Datensatz, bei dem in dieser Spalte der Wert 3 enthalten ist wird gelöscht.

Dafür brauchen wir aber wiederum den Befehl mysqli_query.
<?php
$loesch = mysqli_query($db, $loeschen);
?>
Und schon ist der Eintrag aus der Datenbank verschwunden.

Auch das kann natürlich wieder zusammen gefasst werden:
<?php
$loesch = mysqli_query($db, "DELETE FROM links WHERE id = '3'");
?>
Wie gesagt - hierbei ist Vorsicht geboten, da der Eintrag ohne Nachfragen gelöscht wird und danach nicht wieder hergestellt werden kann.

Nachdem wir jetzt Daten eingefügt und gelöscht haben gibt es noch eine ähnliche Funktion, die wir auch oft benötigen werden - nämlich das Ändern von Datensätzen.
Daten ändern

Datensätze zu ändern ist eine Mischung aus dem Anfügen von Datensätzen und dem Löschen.

Auch dieser Befehl erfordert zwei Schritte.

Im ersten wird wieder der Befehl definiert und in einer Variable gespeichert, während der zweite Befehl das Update durchführt.
<?php
$aendern = "UPDATE links Set urlname = 'PHP f&uuml;r dich' WHERE id = '4'";
?>
In diesem Fall wird nach dem "UPDATE" der Tabellenname angegeben gefolgt von einem "Set" das bestimmt, welche Spalte auf welchen Wert geändert werden soll. In unserem Fall ändern wir den Namen der Homepage.

Mit dem "WHERE" bestimmen wir, welcher Datensatz geändert werden soll. In unserem Fall ist das der, der die id 4 erhalten hat.

Auch in diesem Fall dient die id der eindeutigen Bestimmung eines Datensatzes.
<?php
$update = mysqli_query($db, $aendern);
?>
Und wiederum wird der Befehl (das Update) durch den Einsatz des Befehls mysqli_query ausgeführt, was natürlich auch wieder zusammen gefasst werden kann:
<?php
$update = mysqli_query($db, "UPDATE links Set urlname = 'PHP f&uuml;r dich' WHERE id = '4'");
?>
Wenn mehrere Werte auf einmal geändet werden sollen funktioniert das, indem man die "Änderungspaare" durch Komma trennt. Also so:
<?php
$aendern = "UPDATE links Set urlname = 'PHP f&uuml;r dich', url = 'http://www.schattenbaum.net/php' WHERE id = '4'";
?>
Damit haben wir die wichtigsten Funktionen für MySQL durch. Auch hier kann ich dir nur raten, selbst weiter zu probieren, das Gelernte anzuwenden und immer weiter zu probieren - und notfalls mal auf php.net nachzuschlagen. Viel Erfolg!

Das komplette Tutorial findet sich unter http://www.schattenbaum.net/php