Erste Schritte mit PHP und mySQL
Artikel erschienen in Swiss IT Magazine 2001/14
Bei der Anbindung von Datenbanken führen verschiedenste Wege zum Ziel. Mit dem Linux-Hype erfreut sich die Middleware PHP immer grösserer Beliebtheit. Bei PHP handelt es sich um eine Server-seitig ausgeführte Scripting-Sprache, die in HTML eingebettet wird. Der grosse Vorteil von PHP liegt neben den vielfältigen Einsatzmöglichkeiten aber auch in der Tatsache, dass die Software im Open-Source-Verfahren der Anwenderschaft zur Verfügung gestellt wird. Ebenso gratis wie PHP ist auch die Datenbank mySQL, die bei unzähligen Sites als Back-End-Lösung zum Einsatz kommt.
Der vorliegende Workshop zeigt, welche Tools und Lösungen für den PHP-Einsatz zu installieren sind, und erläutert anhand von Beispielen, wie die mySQL-Datenbank über PHP abgefragt wird.
Wer in PHP entwickelt, wird zunächst vor dem Problem stehen, dass eine leicht verfügbare Entwicklungsumgebung, wie man sie für andere Programmiersprachen gewohnt ist, nicht zur Verfügung steht. Statt dessen muss man sich zunächst umschauen, welche Tools hier vorhanden sind.
Unter Linux ist der benötigte Webserver in Form des Apache-Servers zumeist schon installiert, das Mailsystem ist für internen Postversand schon eingerichtet, und ein guter Editor mit Syntax-Highlighting lässt sich schnell im Internet finden. Viele Linux-Entwickler bevorzugen den Editor glimmer in Verbindung mit dem HTML-Editor quanta. PHP sollte in Verbindung mit Apache als Modul installiert werden. Dazu kann man sich von der PHP-Homepage die Quellcodes herunterladen und über den entsprechenden make-Befehl erzeugen lassen. Auch mySQL ist auf diese Weise recht flott zu installieren, hier muss allerdings noch dafür gesorgt werden, dass der mySQL-deamon beim Hochfahren des Systems automatisch gestartet wird.
Wer unter Windows entwickelt, kann sich nebenbei noch einen alten PC als Webserver mit Linux und Apache einrichten. Meist wird ein separater Webserver vorgezogen, da man die Tests dann auch mit unterschiedlichen Betriebssystemen durchführen kann.
Wer jedoch die Entwicklung komfortabel auf einer einzelnen Maschine vornehmen möchte, ist mit der folgenden Beschreibung gut beraten. Zunächst muss PHP selbst installiert werden, um die Programme laufen zu lassen. Dazu bietet die PHP-Homepage vorkompilierte Windows-Pakete an, die bequem mit einem Setup-Programm installiert werden.
Als nächstes wird ein Editor benötigt, der etwas mehr Bedienkomfort bietet als das Windows-Notepad. Hier findet man im Internet zwei Programme, die diese Aufgabe gut erledigen. Das eine heisst PHP-Coder und kann auf der Seite http://phpcoder.stsoft.cjb.net heruntergeladen werden. Die Installation erfolgt ebenfalls über ein Setup-Programm unter Windows. Wenn der Pfad zu php.exe in den Optionen entsprechend eingestellt wird, kann man das Programm direkt aus dem Editor heraus starten. Das alternative Tool heisst PHP-Ed und findet sich unter www.soysal.com/PHPEd.
Die Software mySQL erhält man bei www.mysql.com auch als Windows-Version inklusive Setup-Programm. Der damit installierte Datenbankserver muss dann manuell oder über Autostart mit mysqld.exe gestartet werden. Die mitgelieferten Kommandozeilentools wie mysql.exe führten in einigen Fällen unter Windows 95 zum Absturz. Mit php.exe arbeitet der Server jedoch gut zusammen, und er kann bei der Entwicklung über PHP-Ed oder PHP-Coder gut verwendet werden.
Damit wären dann schon die wichtigsten Tools vorhanden, um PHP-Anwendungen zu schreiben und auch zu testen.
Die beiden Entwicklungstools PHP-Coder und PHP-Ed unterscheiden sich in einigen Funktionen voneinander. Um den Rahmen des Artikels nicht zu sprengen, wird hier nur PHP-Coder im Detail vorgestellt.
In der Symbolleiste sind einige typische HTML-Symbole zum Einfügen von HTML-Tags enthalten. Mit diesen können recht bequem der Code für Formulare und die gängigen Tags für Links oder Überschriften eingefügt werden. Das Editorfenster ist in drei Bereiche geteilt. Auf der linken Seite findet man die Projektverwaltung, den Klassenbrowser, die Dokumentation und eine Dateiverwaltung.
Die rechte Seite ist aufgeteilt in das eigentliche Editorfenster für den Quellcode und ein Ausgabefenster für die Ergebnisse. Um PHP-Scripts direkt ausführen zu können, muss zunächst der korrekte Pfad für php.exe eingetragen werden. Dies wird über den Menüpunkt View - Preferences and Settings erledigt. Zunächst wählt man hier unter PHP Parsing, damit der PHP Interpreter direkt als CGI aufgerufen wird.
Im zweiten Schritt muss jetzt nur noch der korrekte Pfad unter PHP Interpreter eingetragen werden.
Falls PHP Warnungen ausgibt, erscheinen diese mit dem anderen Text im Ausgabefenster. Tauchen Fehler auf, so bietet PHP-Coder eine sehr komfortable Fehlerbehandlung. Der Editor zeigt die fehlerhafte Zeile direkt an, so dass man diese gleich korrigieren kann.
Auf die Online-Dokumentation kann direkt im Dokumentenfenster zugegriffen werden. Falls die HTML-Dateien auf der lokalen Festplatte liegen, kann auch dies eingestellt werden, so dass die Dokumentationen für PHP und mySQL direkt aus PHP-Coder herausgelesen werden können.
Ebenso wie PHP-Coder ist auch PHP-Ed gut geeignet, um PHP-Programme zu entwickeln. Welches dieser Programme man schliesslich verwenden will, hängt von persönlichen Vorlieben und den benötigten Features ab. Es ist sinnvoll, zunächst beide wechselweise zu nutzen, zumal sie kostenfrei erhältlich sind. Es ist zu erwarten, dass die beiden Entwicklungstools im Laufe der Zeit noch weiter verbessert werden.
Jeder, der schon einmal eine Programmiersprache erlernt hat, wird am Anfang ein Programm schreiben, das den Text "Hallo Welt" auf dem Bildschirm ausgibt. Hier ist dieses Programm für die Sprache PHP:
Dieses einfache Beispiel zeigt, dass die Verwendung von PHP recht unkompliziert ist. Diese Codezeile kann ebenso gut in einem bestehenden HTML-Dokument plaziert werden. Damit der Webserver erkennt, dass im Dokument PHP-Code enthalten ist, wird die Dateierweiterung ".php" für diese Dateien verwendet. Hier können dann HTML und PHP gemischt verwendet werden.
Wer dynamische Webseiten programmiert, möchte natürlich mit dem Anwender in Interaktion treten. Zu diesem Zweck müssen nicht nur Daten auf dem Browser ausgegeben, sondern auch Angaben des Benutzers entgegen genommen werden. PHP arbeitet hier prinzipiell, wie man dies auch bei CGI gewohnt ist: Die Eingaben werden entweder als Parameter über die URL-Zeile oder über den POST-Befehl eines Formulars übergeben. Damit muss dann ein Perl-Programmierer nicht mehr umlernen, denn auch bei PHP stehen die übergebenen Parameter im Programm als Variablen zur Verfügung.
Wird beispielsweise folgende URL-Zeile eingegeben: www.mydomain.com/warenkorb.php?action=add&artikel=4711&menge=1, so wird das Dokument warenkorb.php vom Webserver angefordert, wobei dieses Dokument wegen der Erweiterung .php als PHP-Programm interpretiert wird. In dem Programm kann nun auf folgende Variablen zugegriffen werden: $action (enthält den Wert "add"), $artikel (enthält den Wert 4711) und $menge (enthält den Wert 1).
Werden die Daten über ein Formular übergeben, so können hier ebenfalls Variablen als "Hidden Field" verwendet werden, die dann beim anschliessenden POST mit übertragen werden. Eingabefelder werden dabei automatisch mit dem gleichen Namen übergeben, den sie auch im HTML-Formular haben.
Auch Schaltflächen werden als Variablen übergeben. Dies ist dann praktisch, wenn man in PHP feststellen will, welche der Schaltflächen zum Absenden des Formulars verwendet wurde. Hier ein kurzes Beispiel:
Die Funktion isset() prüft, ob die Variable einen Wert enthält, also ob die Schaltfläche angeklickt wurde. Hier werden die Inhalte der Variablen einfach auf der Seite angezeigt. Natürlich bietet PHP eine ganze Reihe von Operatoren und mathematischen Funktionen zur Auswertung solcher Daten.
Nach der Verarbeitung sollen die Daten irgendwann wieder ausgegeben werden. Üblicherweise erfolgt dies auf dem Bildschirm über den Browser. Der hierzu meist benutzte Befehl "echo" wurde bereits vorgestellt. Da man PHP und HTML beliebig mischen kann, hat man die Wahl, ob man HTML-Tags über die echo-Funktion ausgibt oder wieder zu HTML wechselt.
Empfehlenswert ist es, möglichst oft HTML zu verwenden, dann können die Dokumente auch in den handelsüblichen WYSIWYG-Editoren bearbeitet werden. Diese interpretieren nämlich PHP-Code in der Regel nicht und können daher mit dem echo-Befehl nichts anfangen. Um das Layout zu prüfen, ist daher die HTML-Version vorzuziehen. Das folgende Code-Beispiel zeigt eine HTML-Tabelle mit PHP-Einträgen:
Die Gestaltung über HTML funktioniert natürlich nur, wenn das Programm nicht selbst den HTML-Code erzeugen soll. Wenn also eine Tabelle dynamisch per PHP erstellt wird, so müssen die entsprechenden Tabellen-Tags von PHP erzeugt werden. In diesem Fall ist es ratsam, sich eine leere Tabelle im Editor anzulegen, um die notwendigen Parameter wie Breitenangaben oder Farben dann im Programm zur Hand zu haben.
Nachdem geklärt ist, wie man mit PHP generell umgeht, soll als nächstes der Datenbankzugriff erfolgen. Dazu wird zunächst eine Datenbank angelegt. Aus Sicherheitsgründen ist es sinnvoll, für jede Anwendung eine eigene Datenbank zu verwenden. Jede Datenbank kann einzeln mit Passwort geschützt werden, was die Gefahren eines Hackerangriffs minimiert. Leider gibt es immer noch Provider, die nur eine begrenzte Anzahl an Datenbanken für ihre Kunden anbieten.
Zum Anlegen der Datenbank stehen verschiedene Möglichkeiten zur Verfügung. Wer einen direkten Zugriff per Telnet oder SSH auf den Server hat, kann dies mit dem Dienstprogramm mysqladmin erledigen. Der Befehl zum Anlegen einer Datenbank warenkorb lautet dann:
Dieser Befehl zeigt die vorhandenen Datenbanken auf dem Server an. Da die Provider den Datenbankserver für viele Kunden zur Verfügung stellen, ist es hier meist nicht möglich, beliebige Namen für die Datenbank zu verwenden. Hier sollte man seinen Provider fragen.
In der Regel bieten die Provider auch ein Admin-Tool zur Einrichtung und Verwaltung von Datenbanken an. Hier kann der Webmaster dann direkt über ein Webinterface die neue Datenbank anlegen. Eines dieser Tools, das auch immer gern von den Providern angeboten wird, ist phpMyAdmin. Damit lassen sich nicht nur Datenbanken anlegen und löschen, sondern auch Tabellen und Daten innerhalb der Datenbanken. Sollte der Provider das Tool nicht mit anbieten, kann man es vom Web herunterladen.
Nachdem die Datenbank angelegt wurde, können nun die Tabellen erzeugt werden. Auch dies lässt sich problemlos mit phpMyAdmin erledigen. Meist möchte man dem Anwender jedoch ein komfortables Installationsprogramm anbieten, mit dem die benötigten Tabellen und auch schon benötigte Basisdaten direkt eingegeben werden. Daher sollten die Tabellen für die angelegte Datenbank in PHP erzeugt werden.
Als Beispieltabelle dient eine Artikeldatei, in der folgende Daten gespeichert werden: die ID-Nummer (fortlaufend), die Artikelnummer, die Artikelbezeichnung, eine Beschreibung des Artikels sowie der Preis des Artikels. Dabei soll die ID-Nummer vom System fortlaufend vergeben werden. Um mit der Datenbank in PHP kommunizieren zu können, wird zunächst eine Verbindung aufgebaut.
Um eine spätere Suche zu beschleunigen, können zu jeder Tabelle auch noch nachträglich Indizes definiert werden.
Mit dem SQL-Befehl insert werden die Daten in die Artikeltabelle eingefügt. Die Anweisung erwartet zunächst ein Liste der Feldnamen in runden Klammern, anschliessend das Schlüsselwort "VALUES" mit einer Liste der einzutragenden Werte, ebenfalls in runden Klammern. Texte müssen dabei in Anführungszeichen angegeben werden, wobei hier die einfachen Anführungszeichen üblich sind.
Für das erste Feld "ID" wird eine Null eingetragen, da es sich hier um ein Feld vom Typ auto_increment handelt. Bei Angabe eines Nullwertes wird beim Hinzufügen eines neuen Datensatzes dann automatisch die nächste freie Nummer eingetragen.
Alle anderen Werte werden schliesslich ganz normal angeführt, jeweils durch Komma getrennt. Bei längeren Texten können diese auch über mehrere Zeilen zusammengesetzt werden.
Um das Beispiel abzuschliessen, sollen nur noch die eingefügten Artikel nacheinander angezeigt werden, was sich mit den folgenden Code-Zeilen bewerkstelligen lässt.
Die Anzeige der Daten erfolgt über eine While-Schleife. Die PHP-Funktion mysql_fetch_array() gibt dabei die jeweils nächste Zeile der Ergebnismenge als assoziatives Array zurück. Der zurückgegebene Wert $items wird noch während der Zuweisung abgefragt, so dass die While-Schleife automatisch beendet wird, wenn keine Daten mehr vorhanden sind. Innerhalb der Schleife werden die Datenfelder über den Zugriffsoperator "[ ]" und den Schlüsselwert des assoziativen Arrays abgefragt. Dabei wird innerhalb der eckigen Klammern nur der Feldname als Zeichenkette angegeben und das Array liefert den Feldinhalt zurück. Am Schluss wird die Verbindung zur Datenbank wieder beendet.