Unterabschnitte

Vorwort

Dieses Tutorial erklärt die Grundlagen einer Datenbank in Verbindung mit der Abfragesprache SQL und der Scriptsprache PHP. Dafür wird entlang eines Beispiels ein Datenmodell entwickelt und seine Umsetzung beschrieben. Anhand von einigen Beispielen wird dabei versucht, die Theorie etwas aufzulockern.

Die Kenntnis der Sprache HTML wird vorausgesetzt und in dem vorliegenden Tutorial werden im Prinzip keine HTML-Befehle beschrieben. Wer meint, noch Nachholbedarf zu haben, kann sich unter [7] noch ein Nachschlagewerk besorgen.

Dieses Tutorial wurde ursprünglich für Skripte geschrieben, die auf dem Server der Sites http://ffm.junetz.de/ und http://of.junetz.de/ Verwendung finden. Sie kann aber auch für alle anderen Server benutzt werden, die dieselben Grundkomponenten nutzen, wie in Abschnitt 2.2 beschrieben. Etwaige Server-spezifische Besonderheiten müssen dabei natürlich außer acht gelassen werden.


Aktuelle Version/Download

Diese Anleitung wird ständig aktualisiert und verbessert (wenn ich es schaffe, den inneren Schweinehund zu überwinden). Weiterhin befindet sich unter http://reeg.net/ immer die aktuelle Version. Es gibt neben der Online-HTML Variante auch noch PostScript und PDF in verschiedenen Versionen zum herunterladen und ausdrucken.

Neue Versionen werden per E-Mail angekündigt, wenn du auch eine E-Mail bekommen willst, kannst du dich auf der Mailingliste[*] eintragen.

Wenn du Anregungen hast, was noch verbessert werden kann, würden wir uns über eine E-Mail an dsp-autor@ml.junetz.de sehr freuen.


Was ist das hier oder was ist es nicht?

Dieses Tutorial will die Grundlagen in Datenbankdesign, SQL und PHP vermitteln. Das Wissen sollte für normale und auch etwas aufwendigere Webseiten ausreichen. Wer allerdings Datenbanken mit Millionen von Einträgen oder Webpräsenzen mit mehreren hundert Seiten und tausenden von Abrufen pro Tag plant, sollte dies nur als Einführung sehen und sich Hilfe in Form eines Profis besorgen.

Im SQL- und PHP-Teil werden die grundlegenden Befehle vorgestellt. Für eine ausführliche Befehlsübersicht müssen die Original-Anleitungen zu Rate gezogen werden.

Weitere Informationsquellen oder Hilfe

Wie oben schon gesagt, sollten zur Befehlsübersicht immer die Original-Anleitungen zu Rate gezogen werden. Die Anleitung von MySQL [4] gibt es inzwischen nicht nur in englisch, sondern auch in deutsch; diese ist sehr ausführlich und eignet sich auch als Einführung für SQL.

Bei PHP [6] sieht die Sache etwas anders aus. Die Anleitung gibt es in verschiedenen Sprachen, auch wenn nicht alle komplett aus dem Englischen übersetzt wurden. Sie eignet sich nur dann zum Erlernen von PHP, wenn man schon vorher programmieren konnte und nur die neue Syntax lernen muß. Sie eignet sich aber auf jeden Fall als gutes Nachschlagewerk. Bei der (englischen) Online-Variante gibt es die Möglichkeit, Kommentare zu den einzelnen Seiten zu hinterlassen, die später auch in die Dokumentation eingebaut werden. Die Kommentare sind häufig sehr wertvoll, besonders wenn die Dokumentation nicht ganz klar formuliert ist.

Eine weitere Informationsquelle sind die FAQs[*]. Die FAQ von MySQL [9] ist noch im Aufbau und deshalb noch nicht so ausführlich; sie enthält jedoch schon einige nützliche Informationen. Die PHP-FAQ [8] müßte eigentlich AFAPQ[*] heißen: Es gibt für fast jede erdenkliche Frage eine Antwort.

Neben der PHP-FAQ gibt es noch unzählige weitere Informationsquellen zu PHP (und häufig auch MySQL) im Internet. Gute Startpunkte dafür sind die PHP-Portale, wie z.B. [10] oder [11]. Nimm dir einfach mal einen Abend frei und surf los. Wenn du Glück hast, findest du das, was du selbst programmieren wolltest, schon irgendwo fertig oder zumindest Teile davon.

Trotz ausführlicher Anleitungen kann es einem passieren, daß man an der ein oder anderen Stelle nicht weiterkommt. Für solche Fälle gibt es Newsgroups und Mailinglisten im Internet, wo andere Leute in ihrer Freizeit versuchen, zu helfen. Die Mailingliste zu MySQL findet sich auf der MySQL-Homepage [4] unter ,,Documentation``; die deutschsprachige Newsgroup heißt ,de.comp.datenbanken.mysql`. Zu PHP gibt es gleich mehrere Mailinglisten in Englisch, die sich auf der PHP-Homepage [6] unter ,,support`` finden. Die deutsche Mailingliste wird vom PHP-Center [10] betrieben. Die Newsgroups zu PHP finden sich unter ,de.comp.lang.php`. Auch wenn man keine aktuellen Probleme hat, kann es sich lohnen, dort mitzulesen.

Unterteilung

Dieses Dokument ist in verschiedene Teile unterteilt, wobei die ersten drei auch einzeln für sich gelesen werden können.

Erster Teil

Im ersten Abschnitt dieses Teils der Anleitung soll kurz geklärt werden, welche Software verwendet wird und welche Rolle sie spielt. Die Einzelheiten werden später im Tutorial behandelt.

Anschließend soll geklärt werden, was eine Datenbank ist, bzw. was mit Begriffen wie DB, DBS oder DBMS gemeint ist und wo die Unterschiede liegen.

Dieser Teil ist nicht existentiell, um nachher Datenbanken zu entwickeln; allerdings sollte man es sich schon einmal durchlesen. Und sei es nur, um einmal die Begriffe gehört zu haben ;-).

Wenn wir dann wissen, was eine DB ist, kommen wir zu der Frage, wie man aus einer Aufgabenstellung die passenden Datenstrukturen entwickelt. Dieser Teil ist für alle, die auch für den Entwurf der Datenstrukturen verantwortlich sind, besonders wichtig, weil man sich sonst viel Ärger einhandeln kann. Wer lediglich mit schon vorhanden Datenstrukturen arbeiten muß, kann diesen Teil überspringen, obwohl er eigentlich sehr interessant ist ;-).

Zweiter Teil

Nachdem wir uns dann im ersten Teil schon einige Zeit mit der Datenstruktur beschäftigt haben, wird es langsam Zeit, unsere Kenntnisse am Computer zu testen.

Als DBMS benutzen wir `MySQL`, das als Abfragesprache SQL[*] benutzt. SQL ist eine nach bestimmten Normen festgelegte Sprache, die von der Mehrheit der Relationalen DBS[*]benutzt wird; dazu zählen unter anderem: PostgreSQL, IBM DB2, Oracle, Adabas-D, MySQL, mSQL, Informix und Gupta.

Im Prinzip ist SQL standardisiert, allerdings unterstützen nicht alle Hersteller den kompletten Standard und jeder hat seine eigenen Erweiterungen. Soweit nicht explizit angegeben, sollten die in dieser Anleitung benutzten Befehle dem Standard entsprechen und auch mit anderen Datenbanken verwendet werden können.

All diejenigen, die mit Datenbanken arbeiten wollen, müssen diesen Teil vollständig verstanden haben - andernfalls kommen sie später mit Sicherheit stark ins Schleudern.

Du mußt übrigens nicht jeden Befehl auswendig kennen; viel wichtiger ist, daß du weißt, wo du nachschlagen kannst.

Dritter Teil

In diesem Teil wird die Scriptsprache PHP beschrieben. Mit ihr kann man sehr viel mehr machen als nur Datenbanken abzufragen, wobei der Schwerpunkt hier natürlich auf der Datenbankabfrage liegt. Wer mehr über diese Sprache lernen will, sollte sich einfach die Original-Dokumentation zu Gemüte führen.

Seit einiger Zeit gibt es PHP in der Version 4. Bis alle umgestellt haben, wird jedoch sicherlich noch einige Zeit lang PHP3 verbreitet sein. Im Prinzip sollten alle PHP3-Scripte auch unter PHP4 laufen. Soweit nicht anders angegeben, sind die Befehle, die in dieser Anleitung verwendet werden, sowohl unter PHP3 als auch unter PHP4 verwendbar. Wenn ein Befehl erst in PHP4 hinzu gekommen ist, wird dies explizit erwähnt (sofern ich es nicht vergessen habe ;-)).

Dieser Teil ist unbedingt notwendig, um in PHP programmieren zu können und sollte deshalb verstanden worden sein, was wie oben nicht heißen soll, daß du jeden Befehl auswendig kennen mußt, sondern nur, daß du im Zweifelsfall weißt, wo du nachschlagen mußt.

Vierter Teil

Hier werden ein paar Beispiele vorgestellt, in denen meines Erachtens Konstrukte benutzt werden, auf die man nicht immer auf Anhieb kommen würde. Hoffentlich helfen sie Dir. Sollte noch etwas fehlen: Meine E-Mail-Adresse kennst du ja. ;-)

Ein paar der Beispiele sind auch unter http://reeg.net/ in Aktion zu sehen (wenn ich es endlich mal schaffe, sie zu programmieren :-( ).

Typographische Konventionen

Um die Übersichtlichkeit zu erhöhen, werden einige Sachen hervorgehoben. Die Tabelle 1.1 zeigt, auf welche Weise was hervorgehoben wird.

In den Beispielen wird der PHP-Code, HTML-Text, sowie teilweise der SQL-Code syntaktisch hervorgehoben. Laß dich davon nicht irritieren, sondern verstehe es einfach als Lesehilfe. Wie die jeweiligen Sprachelemente hervorgehoben werden, sollte eigentlich relativ einfach zu erkennen sein.


Tabelle 1.1: Typogr. Konventionen
Wie Was Beispiel  
kursiv Internet-Adressen Wenn du Anregungen hast, dann schreib mir doch eine E-Mail an dsp-autor@ml.junetz.de  
in einfachen Anführungszeichen Bezeichnungen, Namen Wir benutzen hier ,MySQL` und ,PHP`.  
in doppelten Anführungszeichen Werte Wenn die Variable Tag den Wert ,,13`` und die Variable Monat den Wert ,,Mai`` annimmt, hat ein wichtiger Mensch Geburtstag  
nicht-proportionale Schriftart Befehle bzw. Teile davon Zum Mail-Lesen wird auf Unix-Maschinen der Befehl rm (read mail) benutzt. Es gibt noch die Optionen -rf (really fast), da geht das dann noch schneller. Um alle Mails zu lesen, muß man rm * eingeben (auf eigene Gefahr!).  
fett besonders wichtige Dinge, Hervorhebungen, Spalten-Bezeichnungen Der Befehl rm bedeutet nicht ,,read mail``, sondern remove. Und -rf steht für recursive und force.  


Autoren

Inzwischen schreibe ich zum Glück nicht mehr alleine an diesem Tutorial. Auf den jeweiligen Seiten steht in der Fußzeile, wer das Kapitel im Prinzip geschrieben hat[*].

Wenn du Anregungen zu dem Tutorial hast, kannst du gerne eine Mail an dsp-autor@ml.junetz.de schreiben; die wird dann automatisch an alle weitergeleitet und irgendjemand im Autorenteam[*] wird dann schon antworten.

Nun folgen ein paar Worte von den einzelnen Autoren (vielleicht werden es irgendwann ja auch noch mehr ;-) ).

Christoph Reeg

Ich war derjenige, der mit dem Ganzen angefangen hatte. Eigentlich war es nur im Rahmen des Jugendnetz FFM/OF gedacht gewesen und nach der ersten Version[*] hatte ich auch keine große Lust mehr gehabt, weiter zu schreiben und hatte sie einfach auf meiner Homepage[*]liegen. Als ich dann aber in die Abrufstatistik von dem Server gesehen und festgestellt hatte, daß das Tutorial etliche Zugriffe verbuchen konnte, habe ich dann weiter geschrieben. In der Zwischenzeit habe ich dann auch noch etwas dazu gelernt, so daß auch ein paar Anfangsfehler verschwunden sind. So geht es nun weiter: in gelegentlichen Abständen ergreift mich der Ehrgeiz und ich setze mich wieder für ein paar Wochen dran und es entstehen ein paar neue Kapitel, und dann ruht es wieder.

Da ich bis jetzt leider noch nichts Vergleichbares im Internet gefunden habe, werde ich wohl auch noch die nächste Zeit damit beschäftigt sein und weiterschreiben. Auch die Mails, die ich gelegentlich bekomme, zeigen mir immer wieder, daß es einen gewissen Sinn hat, was ich da mache.

Jens Hatlak

Angefangen habe ich, wie Stefan Nagelschmitt, als Lektor. Anstatt jedoch einfach nur Christophs (zahlreiche ;-)) Rechtschreibfehler zu korrigieren, habe ich dann mit der Zeit immer mehr auch Neues hinzugefügt. Das ging dann irgendwann so weit, daß erst ein paar Abschnitte und schließlich ganze Kapitel (wie z.B. OOP) von mir geschrieben wurden. So langsam fällt mir aber gar nichts mehr ein, was noch dringend beschrieben werden müßte - aber es steht ja noch die Umstellung auf neue Rechtschreibung an, also werde ich zumindest als Lektor wohl immer was zu tun haben. ;-)

Tilman Brock

Ich bin einer von denen, die zusammen mit Christoph beim Jugendnetz Frankfurt arbeiten. Über das Jugendnetz und meine Programmierarbeit mit PHP habe ich das DSP schätzen gelernt; jetzt fühle ich mich in der Lage, auch meinen Teil zu dieser PHP/MySQL-Anleitung zu schreiben. Ich bin auch der Erste, der das DSP extensiv in die Schulen gebracht hat, meine komplette Schule[*] - soweit sie mit PHP/MySQL arbeitet - benutzt als erste Dokumentation http://www.reeg.net.

David Peter

Ich bin im Herbst 2001 per Zufall auf DSP gestoßen und hab kurz danach Christoph gefragt, ob ich helfen könnte, indem ich ein paar Artikel für DSP schreibe. Er hatte nichts dagegen und so konnte ich kurz darauf das erste Kapitel (über XML) für DSP bereitstellen. Danach war eine Weile lang nichts los, da weder ich noch die anderen Autoren viel an DSP gearbeitet haben und so wurde ich erst im Frühling 2002 wieder - durch eine Mail von Christoph - an DSP erinnert.

Christoph Reeg