19
Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de PHP und MySQL auf der Homepage von Johann-Christian Hanke 64 Seiten für 4,40 Euro ISBN 87-91364-36-1 Dieses Heft ist die Fortsetzung von „PHP für Einsteiger“ vom gleichen Autor!

PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Embed Size (px)

Citation preview

Page 1: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

PHP und MySQL auf der Homepage

von Johann-Christian Hanke 64 Seiten für 4,40 Euro ISBN 87-91364-36-1

Dieses Heft ist die Fortsetzung von „PHP für Einsteiger“ vom gleichen Autor!

Page 2: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Hinweise zum Lesen dieser PDF-Datei

© KnowWare.de

2

Bildqualität Wir versuchen die Dateigröße zu reduzieren, um die Downloadzeit zu verkür-zen. Daher ist die Bildqualität in dieser Download-Datei nicht in allen Fällen optimal. Im Druck tritt dieses Problem nicht auf.

Acrobat Reader: Wie komme ich klar? F5/F6 öffnet/schließt die Ansicht Lesezeichen

Strg+F sucht

Im Menü Ansicht stellst du ein, wie die Datei angezeigt wird

STRG+0 = Ganze Seite STRG+1 = Originalgröße STRG+2 = Fensterbreite

Im selben Menü kannst du folgendes einstellen: Einzelne Seite, Fort-laufend oder Fortlaufend - Doppelseiten ... Probiere es aus, um die Unterschiede zu sehen.

Navigation

Pfeil Links/Rechts: eine Seite vor/zurück

Alt+ Pfeil Links/Rechts: Wie im Browser: Vorwärts/Zurück

Strg++ vergrößert und Strg+– verkleinert

Bestellung und Vertrieb für den Buchhandel KnowWare-Vertrieb, Postfach 3920, D-49029 Osnabrück Tel.: +49 (0)541 33145-20 Fax: +49 (0)541 33145-33 [email protected] www.knowware.de

Autoren gesucht Der KnowWare-Verlag sucht ständig neue Autoren. Hast du ein Thema, dass dir unter den Fingern brennt? - ein Thema, das du anderen Leu-ten leicht verständlich erklären kannst?

Schicke uns einfach ein paar Beispielseiten und ein vorläufiges In-haltsverzeichnis an folgende Adresse:

[email protected]

Wir werden uns deinen Vorschlag ansehen und dir so schnell wie mög-lich eine Antwort senden.

www.knowware.de

Page 3: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Inhaltsverzeichnis

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

3

Inhaltsverzeichnis Willkommen in der Welt der dynamischen Websites! ...........................5

Worum dreht sich das Heft? ..................................5 Lehrgang zu MySQL und SQL...............................5 Über den Autor ......................................................5

Apache und PHP installieren mit XAMPP 6 XAMPP, der neue Shooting-Star ...........................6 Alte Installationen entfernen ..................................7 Welches XAMPP darf’s denn sein? .......................7 XAMPP Lite herunterladen ....................................8 XAMPP Lite installieren .........................................8 Apache und MySQL starten...................................8

Die neue Syntax von PHP seit Version 4.1 bzw. 4.2.....................................................10

Infos über PHP ....................................................10 Das steckt dahinter: safety first!...........................10 Weitere Neuerungen............................................12 Übungsteil A zur neuen Syntax............................13

Einrückungen nach PEAR: Guter Code im Zeichen der Birne...............................14

Guter Code = lesbarer Code................................14 Wo setzt du Leerzeichen? ...................................15 Wo setzt du kein Leerzeichen?............................15 Einrückungen mit vier Leerzeichen......................15 Geschweifte Klammern setzen ............................15

PHPEdit – PHP-Editor der Superlative ..16 Freeware-Variante PHPEdit 0.8...........................16 Code automatisch verschönern ...........................16 Übungsteil B zur Codeeinrückung .......................16

Notationstricks, mit denen PHP wieder Spaß macht! .............................................17

Der Trick mit den Arrays ......................................17 Ein zweiter Trick mit den Arrays ..........................17 Lange Passagen mit echo, Trick 1.......................18 Lange Passagen mit echo, Trick 2.......................18 Passagen in Heredoc-Syntax ..............................18 Endlich alle Fehler finden!....................................19

Mehr Komfort und Sicherheit: Code auslagern mit include() ...........................20

Syntax der Funktion include() ..............................21 HTML-Datei einbinden.........................................22 Übungsteil C ........................................................22

So schreibst du eigene Funktionen.......23 Grundsyntax von Funktionen ...............................23 Ein Beispiel: Brutto- in Nettowert .........................24 Übungsteil D ........................................................24

Bilderalbum: Dateien hochladen auf die Homepage ............................................... 25

Optimiert für Grafiken ..........................................25 Formular zum Hochladen ....................................27 Das Array $_FILES..............................................27 Eigenschaften von $_FILES ................................27 Dateityp und -größe ermitteln ..............................28 Funktion move_uploaded_file() ...........................28 Auslesen des Verzeichnisses ..............................29 Gib das Verzeichnis frei!......................................29 Domainfactory oder Neuer Ärger mit dem chmod!.................................................................30 Übungsteil E: Anregungen für Verbesserungen! .30

Komfort für MySQL – Die grafische Oberfläche phpMyAdmin ....................... 31

phpMyAdmin beim Dienstleister ..........................31 Datenbank und Tabellen: Die Adressliste aufbauen.................................................. 33

Datenbank anlegen .............................................33 Tabelle für Kategorien .........................................33 Das Schlüsselfeld ................................................34 SQL-Befehl eingeben ..........................................34 Daten eintragen ...................................................35 Adresstabelle anlegen .........................................35

Die wichtigsten Felddatentypen von MySQL ..................................................... 36 Daten eintragen, updaten und löschen. 37

Daten eintragen: INSERT INTO ..........................37 Daten updaten: UPDATE.....................................37 Daten löschen: DELETE......................................37

Daten ausgeben, filtern, sortieren und verknüpfen .............................................. 38

Alle Datensätze ausgeben...................................38 Filtern mit WHERE...............................................38 Der Operator LIKE...............................................39 Auswahlkriterien verknüpfen................................39 Sortieren ..............................................................39

Zwei Tabellen gleichzeitig abfragen – durch einen JOIN .................................... 40

Zwei Tabellen sind verbunden.............................40 Join zwischen den Tabellen.................................40

Das Herz schlägt links – mit einem LEFT JOIN ......................................................... 41

Übungsteil F ........................................................41

Page 4: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Inhaltsverzeichnis

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

4

Mit PHP und MySQL: Daten als HTML-Seite ausgeben........................................42

Vorname und Name anzeigen .............................42 Verbindung aufnehmen........................................42 Abfrage ausführen ...............................................43

Noch schicker: Datensätze in Tabellenform darstellen ..........................44

Anzahl der Felder und Spalten ............................45 Ausgeben der Feldnamen....................................45 Ausgeben der Datensätze ...................................45 Kategorie im Klartext ausgeben...........................45

Mehr Sicherheit für die MySQL-Verbindung...............................................46

Fehlermeldungen unterdrücken ...........................46 Abbruchsteuerung mit: or die() ............................46 Zugriffsdaten auslagern .......................................46

Dateneingabe mit Komfort: Formular mit Nachschlagefeld......................................47

Der Quelltext kurz erklärt .....................................47 Formularvalidierung .............................................47 Daten einfügen: INSERT INTO............................48 Die Reload-Falle: Vermeide sie! ..........................49

Datenbanktabellen sichern und auf andere Rechner übertragen ...................50

Offline: Bei lokalen PCs .......................................50 Online: Übertragen per SQL-Dump .....................50 Übungsteil G ........................................................50

Das Projekt: Gästebuch, CMS oder Fototagebuch? ........................................51

Gestaltung per CSS-Datei ...................................51 Die Module des Gästebuchs................................51 Steuervariablen der edit.inc.php ..........................52 Die Datenbanktabelle gb_tabelle .........................52 Der komplette Quelltext der Datei index.php .......53 Anzeigen der Datensätze.....................................55 Gästebucheintrag vornehmen..............................56 Eingabeformular erzeugen: Kompletter Quelltext der eingabe.inc.php .............................................56 Zurück zur gleichen Stelle bitte!...........................59

Administrationsbereich: Lästige Datensätze einfach löschen! ..................60

Quelltext der admin.inc.php .................................60 Eintrag löschen: loeschen.inc.php .......................61 Übungsteil H ........................................................61

Stichwortverzeichnis ..............................62

Weitere interessante KnowWare-Titel

KnowWare bringt jeden Monat 2–3 neue Computerhefte auf den Markt. Aber auch wenn die Titel am Zeitschriftenkiosk längst ver-griffen sind, halten wir sie alle zum Nachbestel-len bereit. Und zwar stets aktuell – da wir immer wieder aktualisieren und nachdrucken! Insgesamt bieten wir dir mehr als 100 preiswerte Hefte an, siehe www.knowware.de! Noch ein-mal: Sie sind allesamt sofort lieferbar! Folgende Hefte legen wir dir ganz besonders ans Herz, sie kosten übrigens jeweils nur 4,- Euro: • PHP für Einsteiger 2. aktualisierte Ausgabe von 2003 mit 88 Seiten Autor: Johann-Christian Hanke Es handelt sich um das verständlich geschriebe-ne Grundlagenheft zu PHP, es ist einer unserer Bestseller und der Vorgänger zu diesem Titel. • PHP und MySQL für Einsteiger letzter Nachdruck vom Mai 2003 mit 72 Seiten Autorin: Petra Bilke Petra erklärt dir ganz genau, wie Datenbanken miteinander verknüpft werden und wie man auf deren Inhalte zugreift. Für Anspruchsvolle! • Homepages mit HTML und CSS 2. Ausgabe vom August 2003 mit 88 Seiten Autor: Johann-Christian Hanke Noch keinen Schimmer von HTML und CSS, al-so dem attraktiven Aufbau von Webseiten? Die-ser Titel kommt ohne viel Einsteiger-Blabla so-fort auf den Punkt. • Homepages für Einsteiger 5. neu bearbeitete Ausgabe 2004 mit 80 Seiten Autor: Johann-Chrisitan Hanke Seit Jahren der Klassiker für den Einstieg in das Schreiben von Webseiten mit HTML, jetzt in ei-ner 5., komplett überarbeiteten Neuausgabe!

KnowWare gibt neuerdings auch Titel zum Thema Lebenshilfe heraus: Arbeitslosen-

geld II, BAföG, Hartz IV usw.: www.life21.de

Page 5: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Willkommen in der Welt der dynamischen Websites!

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

5

Willkommen in der Welt der dynamischen Websites! Es geht weiter mit PHP, liebe Leserin und lieber Leser. Endlich ist sie da – die lang ersehnte Fortsetzung meines Titels „PHP für Einsteiger“. Ich begrüße dich ganz herzlich und freue mich, dass du wieder „zugeschnappt“ hast.

Worum dreht sich das Heft? Es geht – nomen est omen – natürlich um PHP und MySQL auf der Homepage. Das klingt nach viel Praxis und so soll es auch sein! Aber wie immer folgt vor der Praxis leider erst eine gehörige Portion Theorie.

Fortgeschrittene PHP-Techniken Im ersten Teil des Heftes besprechen wir daher einige fortgeschrittene Programmiertechniken. Es geht u. a. um Folgendes: • neue Syntax seit PHP 4.2 • Schreiben eigener Funktionen • Auslagern von Modulen durch include() • Methoden, den Code lesbarer zu machen Ich zeige dir bei dieser Gelegenheit auch, wie du die neuesten Versionen von PHP (und MySQL) für den Offline-Betrieb einrichtest – mit dem genialen Installations-Paket XAMPP.

Natürlich probieren wir diese Neuerungen dann in der Praxis aus – du wirst Dateien über ein Formularfeld hochladen und auf deiner Webseite speichern. Außerdem lernst du die Funktionen an einfachen Beispielen kennen.

Nachdem wir uns damit vergnügt haben, geht es ans Eingemachte! Es folgt der lang ersehnte …

Lehrgang zu MySQL und SQL Wir schauen uns an, wie du MySQL bei deinem Dienstleister „scharf schaltest“ und dort mit dei-nen Datenbanken jonglierst – oder mit der Da-tenbank, denn viele Dienstleister bieten dir nur eine einzelne an.

Du lernst die grafische Oberfläche phpMyAdmin ausführlich kennen!

Und dann folgen die Beispiele! Doch ehe wir uns an das erste Datenbank-Praxisexempel wa-gen können, ist auch hier Theorie gefragt. Lerne SQL, die Sprache zum Einrichten, Pflegen und

Abfragen von Datenbanktabellen. Anhand einer schicken Adressliste zeige ich dir Folgendes: • Datenbanktabellen anlegen • Daten eintragen • Ermitteln der gewünschten Datensätze • Einbinden der SQL-Befehle in PHP Und die Praxis? Hier habe ich mir gedacht, dass dir ein wirklich komfortables Gästebuch gut ge-fallen wird – mit Foto-Feld, Reloadsperre und seitenweiser Ausgabe der Daten! Auch als Content-Management-System, Weblog oder Fototagebuch verwendbar!

Die Grenzen des Heftes … liegen beim relationalen Datenbankdesign, also dem Verknüpfen von mehreren Tabellen, um das Speichern von Daten effektiver zu ge-stalten. Da schnuppern wir natürlich auf didak-tisch-verständliche Art hinein! Danach „treibe“ ich dich allerdings „in die Fänge“ meiner Auto-renkollegin Petra Bilke. Grund: Petra bietet dir in ihrem anspruchsvollen Titel „PHP und My-SQL“ eine ausführliche Einführung in diese Ma-terie und eine Wiederholung dieses Wissens hie-ße „Eulen nach Athen tragen“.

Über den Autor Ich bin kein genialer Programmierer, sondern Autodidakt. Programmieren ist allerdings mein Hobby, für das ich viele, viele Nächte und Wochenenden opfere. Ein Beispiel dafür findest du unter www.phpkid.de, meiner ersten ausschließlich mit Datenbanktabellen gesteuerten Seite. Mein „Gesellenstück“ kannst du dagegen unter www.knowware.de bewundern – ein Projekt, bei dem ich mich fast überhoben hätte. Seit März 2004 läuft die KnowWare-Homepage nun auf Datenbankbasis. Beim „Stemmen“ dieses Portals habe ich wieder viel gelernt und bin froh, dass ich dieses Wissen nun weitergeben kann! Ich wünsche auch dir viel Spaß und Erfolg mit „PHP und MySQL auf der Homepage“! Die Bei-spieldateien für das Heft findest du übrigens un-ter http:// knowware.de/?book=phpmysql

Johann-Christian Hanke, Berlin im August 2004

Page 6: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

XAMPP, der neue Shooting-Star

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

6

Apache und PHP installieren mit XAMPP Du willst PHP und MySQL offline ausprobie-ren? Dazu benötigst du lediglich einen lokalen Webserver, der mit PHP und MySQL ideal zu-sammenarbeitet – den Apache-Webserver! Lesern von „PHP für Einsteiger“ ist das nicht neu – deshalb will ich dich nicht mit Einzelhei-ten langweilen. Schließlich hatte ich dir dort ge-zeigt, wie du den Apachen und PHP installierst. In Ausgabe 1 mussten wir das noch in Handar-beit erledigen – inklusive manueller Anpassung von Konfigurationsdateien. Die Fehlerquote be-trug nach meinen Erfahrungen 10-20% – relativ viel, wie ich heute finde. Und nicht jeder hat Lust und Nerven, in unzähligen Konfigurations-dateien „herumzumanschen“. In Ausgabe 2 von 2003 konnte ich dich vom In-stallationspaket FoxServ (www.foxserv.net) be-geistern. Dieses Installationspaket richtete Apa-che, PHP und MySQL in 90-95% aller Fälle er-folgreich ein und machte die ersten „lokalen Schritte“ mit PHP zum angenehmen Erlebnis.

Leider gab es immer wieder einige hartnäckige Fälle, bei denen weder die „Handarbeits-Varian-te“ noch FoxServ funktionierten. Die betroffe-nen Computerfreunde mussten mit dem Online-Test beim Dienstleister vorlieb nehmen.

Ein weiterer Wermutstropfen: Die mit FoxServ mitinstallierte Version von phpMyAdmin (ein grafischer Aufsatz für das Datenbanksystem MySQL) ist schlicht und einfach unbrauchbar. Man kann mit dieser Version nicht vernünftig arbeiten, da die Daten in der Browseransicht nicht korrekt aktualisiert werden. Der Browser zeigt nach Eingeben und Löschen von Datensät-zen meist alte Versionen aus dem Cache an. Oft hilft nicht einmal das einfache Aktualisieren durch Druck auf [F5]. Dieser sehr nervige Fehler ist mit neueren Versi-onen von phpMyAdmin zum Glück behoben. Doch hier muss FoxServ leider passen, denn seit 2003 wurde das Programm nicht mehr aktuali-siert. Für diesen Kurs benötigen wir aber eine neue Version von phpMyAdmin!

Aus diesem Grund ist inzwischen auch FoxServ keine Empfehlung mehr wert!

XAMPP, der neue Shooting-Star Doch du musst nicht die Flinte ins Korn werfen, denn ich habe XAMPP für dich aufgespürt!

XAMPP findest du unter www.apachefriends.org

Auch XAMPP ist ein kostenloses Installations-tool für PHP, MySQL, phpMyAdmin, Perl und viele andere Zusatzprogramme. Im Gegensatz zu FoxServ besitzt es jedoch ent-scheidende Vorteile: • XAMPP ist stets aktuell, da es alle paar Wo-

chen aktualisiert und angepasst wird. Fast zeitgleich mit der neuen PHP-Version 5 er-schien z. B. auch ein XAMPP mit PHP 5!

• XAMPP ist leicht einzurichten und ziemlich zuverlässig.

• XAMPP ist schlank und trägt sich nicht in die Registry ein. Zur Deinstallation musst du den entsprechenden XAMPP-Ordner einfach lö-schen und fertig.

XAMPP stammt von meinem Autorenkollegen Kai Oswald Seidler aus Berlin und seinem Mit-streiter Kay Vogelgesang. Kai, Kay und weitere „Friends“ sind also die „Apachefriends“. Sie för-dern mit ihrem genialen Tool die Verbreitung des Apache-Webservers. Das unterstütze ich gerne! Soviel vorweg: Ich verspreche eine Erfolgsquote von 98%. (Das bedeutet aber, dass es in 2% aller Fälle aus welchen Gründen auch immer trotz-dem nicht klappen wird.) Genug geschwafelt, jetzt schaufeln wir uns die-ses XAMPP erst einmal auf die Platte. Wie das geht? Und was du vorher beachten solltest? Auf der nächsten Seite kläre ich dich auf!

Page 7: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Alte Installationen entfernen

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

7

Alte Installationen entfernen Zuerst ein paar wichtige Hinweise, wenn du schon Frust mit vorhandenen Installations-Versuchen hattest und nun XAMPP probieren möchtest. (Falls XAMPP jedoch deine erste Begegnung mit dem Apachen ist, überspringst du diesen Ab-schnitt und liest frech in der Nachbarspalte wei-ter bei „Welches XAMPP darf’s denn sein?“)

Achte darauf, dass alle alten Apache-, PHP- und MySQL-Installationen von deinem

Computer gelöscht werden!

Besonders als FoxServ-Freund musst du deine Festplatte erst „beräumen“: Gehe z.B. über Sys-temsteuerung in den Bereich Software und deinstalliere den „Fuchsdienst“. (Keine Sorge, deine evtl. schon vorhandenen MySQL-Tabellen unter mysql/data und natürlich alle Daten un-ter dem Root-Ordner www bleiben erhalten!)

Dienste deaktivieren Deaktiviere die evtl. vorhandenen Dienste in der Verwaltungskonsole bei Windows 2000 bzw. XP. Denn zumindest unter Windows 2000/XP hat FoxServ Apache und MySQL als so genannte Dienste eingerichtet.

Verwaltungskonsole aufrufen Rechtsklicke auf den Arbeitsplatz und wähle VERWALTEN. Gehe zum Zweig Dienste und Ein-stellungen, Unterzweig Dienste. Hier findest du zum einen den „Apachen“ und zum anderen MySQL. Rechtsklicke auf den entsprechenden Dienst und wähle den EIGENSCHAFTEN-Befehl. Wähle im Listenfeld bei Starttyp den Eintrag DEAKTIVIERT.

Warum empfehle ich das Deaktivieren? Leider werden diese Dienste auch nach Deinstallation von FoxServ nicht in jedem Fall sauber entfernt! Aber wie gesagt – diese Dienste müssen nur dann weg, wenn sie nach der Deinstallation von FoxServ noch in der Verwaltungskonsole „her-umgeistern“. Alte Einstellungen löschen Zur Sicherheit empfehle ich noch eine weitere Maßnahme:

Lösche die Dateien my.ini und php.ini.

Es handelt sich um die Konfigurationsdateien für MySQL und PHP. In der Regel findest du diese Dateien unter C:\Windows. Putze die Teile runter von der Festplatte, da sie eine Neuinstallation evtl. behindern können!

Wirf auch Winsqladmin aus dem Autostart des Startmenüs heraus – diese „grafische Statusan-zeige“ für die Datenbank MySQL. Sicher ist dir Winsqladmin schon aufgefallen. Dieses Tool sorgt schließlich dafür, dass rechts unten im Sys-tembereich die Ampel erscheint. Bei XAMPP benötigst du diese Ampel nicht, sie wird dich nur verwirren. Zum Entfernen rufst du das AUTO-START-Menü unter (ALLE) PROGRAMME auf und rechtsklickst auf den Eintrag. Wähle den LÖ-SCHEN-Befehl und Winsqladmin wird dich nun nicht mehr „belästigen“. Im Zweifelsfalle kannst du das Tool immer noch von Hand starten.

Alles deaktiviert und entfernt? Dann starte den Rechner neu und prüfe unbedingt noch einmal, ob die Dienste auch deaktiviert sind und ob we-der der Apache noch Mysql läuft! Erst wenn die Platte sauber ist, sollte das neue XAMPP drauf!

Welches XAMPP darf’s denn sein? Ich empfehle dir das Paket XAMPP Lite (früher XAMPP Mini). Es umfasst nur 10 MB Down-loadgröße und beherbergt dabei immerhin PHP, MySQL und phpMyAdmin in neuen Versionen. Für unsere Zwecke vollkommen ausreichend und geeignet für Windows ab Version 98!

Auch für Linux haben die „Apachefriends“ ein Herz

Das „große XAMPP“ dagegen kommt in einer Basisversion daher und kann mit Add-Ons wie Perl, Python, Java Tomcat, Cocoon und was weiß ich nicht noch allem „aufgewertet“ werden.

Page 8: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

XAMPP Lite herunterladen

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

8

XAMPP Lite herunterladen Ich nehme einmal an, dass du dich für die Win-dows-Variante von XAMPP interessierst. Surfe zu www.apachefriends.org/wampp.html bzw. apachefriends.org/de/xampp-windows.html und suche nach XAMPP lite 1.4.x (oder höher). Du brauchst wirklich nur diese Lite-Version, al-les andere wäre für uns Platzverschwendung. (Falls du jedoch die Linux-Version suchst, wirst du unter apachefriends.org/de/xampp-linux.html fündig.)

Die Lite-Version genügt völlig und ist nur 10 MB groß

Du hast auf den Link geklickt? Dann musst du ein wenig nach dem Download suchen. Es gibt keinen direkten Link zu der Datei. Gehe in der Tabelle bei den Apachefriends zum Punkt XAMPP Lite 1.4.x und klicke auf EXE (7-zip). Nun gelangst du zu einer Auswahlseite. Dort klickst du eines der vielen Symbole unter Down-load an und nach wenigen Sekunden „wird dir die Datei automatisch auf den Rechner gescho-ben“. XAMPP Lite installieren Alles klar? Die heruntergeladene Datei xamppli-te-win32-1.4.x.exe o.ä. liegt bereit? Im Beispiel soll das neue System unter C:\xampplite ein-gerichtet werden.

Entpacke diese Exe-Datei direkt unter C:!

Doppelklicke dafür auf die Datei xampplite-win32-1.4.x.exe und wähle den Entpack-Ordner im folgenden Dialogfenster aus: Wie schon er-wähnt: Ich empfehle dir, nur C:\ in diesem Ent-pack-Dialogfenster stehen zu lassen, den Rest löschst du einfach.

Hier sollte nur C:\ stehen – Klicke dann auf EXTRACT

Wenn das Entpacken geklappt hat, entsteht dann direkt unter C: ein Extra-Ordner namens xampp-lite. Das ist so ähnlich wie mit FoxServ, nur dass der Ordner bei XAMPP eben anders heißt.

Der Ordner wird im Windows Explorer sehr weit unten in der Ordnerstruktur aufgeführt – du findest ihn so schnell wieder! Kunst-stück, schließlich beginnt xampp mit „x“.

Gehe in diesen neuen Ordner xampplite und doppelklicke auf die Datei setup_xampp.bat. Ein DOS-Fenster erscheint. Warte kurz, die In-stallation geht vonstatten. Nach erfolgreicher Einrichtung drückst du eine beliebige Taste, da-mit das DOS-Fenster verschwindet. Das System ist schon eingerichtet – ich empfeh-le einen Neustart deines Rechners.

Apache und MySQL starten Nun kannst du vergnügt den Apachen und MySQL starten. Gehe dafür in den Ordner C:\xampplite und lege los: • Wähle apache_start.bat, um nur den Web-

server zu starten und wähle dann mysql_start.bat für MySQL.

• Oder – das ist noch besser – wähle gleich xampp_start.exe, um beides auf einen Schlag aufzurufen.

Die xampp_start.exe startet Apache, PHP und MySQL

Tippe nun http://localhost in deinen Browser. XAMPP begrüßt dich mit einer ganz eigenen index.html-Startseite (die du später ger-ne entfernen kannst)! Der lokale Apache-Web-server funktioniert und die XAMPP-Startseite zeigt dir auch ein paar Demos an. Sagenhaft, wie einfach sich XAMPP einrichten lässt!

Wenn du XAMPP Lite beenden möchtest, wählst du xampp_stop.exe!

Das oder die von XAMPP geöffnete(n) DOS-Fenster darfst du übrigens auf keinen Fall schließen! Lasse sie offen, da sie die Funktion von „Apache“ und MySQL sichern!

Page 9: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Apache und MySQL starten

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

9

Tipp: Lege dir einfach eine Verknüpfung zu die-sem xampplite-Ordner auf den Desktop. So kommst du schnell an die Dateien zum Starten und Beenden heran!

Probleme mit XAMPP lösen Wenn du das Prinzip der Installation erst einmal „geschnappt“ hast, wirst du merken: XAMPP ist zuverlässig und macht kaum Probleme. Das Ein-richten irgendwelcher Konfigurationseinstellun-gen ist (meist) nicht nötig, da alles optimal vor-konfiguriert wurde.

Optimal bedeutet nicht sicher! Die Vorein-stellungen sind für Offline-Testzwecke ge-eignet, nicht für den Produktionseinsatz!

Doch nun zu den Problemen, denn auch mir ist es schon passiert, dass der Apache partout nicht starten wollte. Das kann folgende Gründe haben: • Ein anderer lokaler Webserver ist aktiv, z. B.

der IIS (Internet Information Server) von Windows 2000 bzw. XP Professional. Den musst du vor dem Start von XAMPP runter-fahren.

• Einer dieser hartnäckigen und eigentlich im-mer störenden Virenscanner arbeitet im Hin-tergrund und blockiert XAMPP. Im Zweifels-falle gilt: Abschalten.

• Eine lokale Firewall verträgt sich nicht mit XAMPP. Versucht macht klug.

• Du telefonierst mit Skype (www.skype.com), dem coolen „Kostenlostelefonierprogramm“. Leider blockiert Skype den Port 80 und muss erst komplett heruntergefahren werden.

Dein Problem ist damit immer noch nicht ge-löst? Dann besuche die XAMPP-FAQ unter apachefriends.org/de/faq-xampp-windows.html und lies dir die Fragen und Antworten durch.

Hilfreiche FAQ zu allen XAMPP-Versionen

Der Root-Ordner für dein Projekt Wo steckt der Root-Ordner des Webservers? Woher nimmt XAMPP die Dateien? Ganz ein-fach: der Root-Ordner heißt htdocs und befindet sich direkt unter xampplite. Lege also alle deine PHP- und HTML-Dateien hier hinein bzw. in selbst zu erstellende Unterordner.

Der Root-Ordner von XAMPP heißt htdocs

Daten übertragen von FoxServ Du steigst um von FoxServ? Wie überträgst du deine Daten, die bisher z. B. noch unter fox-serv/www liegen? Ganz einfach, den gesamten Inhalt des Ordners www legst du einfach in den neuen Stammordner xampplite/htdocs. Auch evtl. schon vorhandene MySQL-Tabellen über-trägst du ganz einfach: Kopiere die unter fox-serv/mysql/data befindlichen Ordner nach xampplite/mysql/data. Das war es schon!

Zugriffsdaten zu MySQL Schnell noch eine Information vorab für die ganz Eiligen. Wie lauten eigentlich die Zugriffs-daten von XAMPP in der Grundinstallation? • MySQL-Benutzername: root • Passwort: (kein Passwort) Das sind automatisch auch die Daten für php-MyAdmin, das Datenbank-Verwaltungstool.

Klappt der Zugriff auf phpMyAdmin? Probiere es aus, rufe das Programm auf über http://localhost/phpmyadmin. Gib root und nichts in das Passwortfenster ein. phpMyAdmin produziert eine Fehlermeldung? Gehe in den Ordner C:\xampplite\phpmyadmin und öffne die Datei config.inc.php. Gehe zur Stelle $cfg['Servers'][$i]['controluser'] = 'pma'; und lösche das pma. Bei mir klappte es nach dieser Aktion.

Page 10: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Die neue Syntax von PHP

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

10

Die neue Syntax von PHP seit Version 4.1 bzw. 4.2 Was für ein Pech! So würde ich das Erscheinen der ersten Ausgabe von „PHP für Einsteiger“ be-schreiben. Redaktionsschluss war im April 2002. Die zu dieser Zeit aktuelle PHP-Version hieß 4.1 und bei Abgabe des Hefts schien die Welt noch in Ordnung zu sein. Kurz vor Erscheinen des Titels (Juni 2002) kam jedoch eine brandneue Version von PHP auf den Markt: die berühmt-berüchtigte Version 4.2. Woran ich das merkte? An den vielen Lesern, die sich per E-Mail bitter beklagten, dass alle Beispiele ab Lektion 5 nun nicht mehr funktio-nieren würden. Was war geschehen?

Die Macher von PHP hatten kurzerhand ei-ne Servervariable in der Konfigurationsdatei

php.ini verstellt.

Statt register_globals = On lautete die Voreinstellung register_globals = Off. Ergo: Viele Skripte funktionierten nicht mehr. Zumindest gilt bzw. galt diese Weisheit bei einer Offline-Installation, z. B. in Handarbeit bzw. durch das FoxServ-Paket. Ich konnte meine Leser bald beruhigen: Alle Beispiele im Heft waren und sind brauchbar, wenn man diese Variable einfach wieder um-stellt: In der zweiten Ausgabe von Anfang 2003 machte ich auf die Problematik aufmerksam. Ich empfahl, diese Variable unter C:\Windows\ php.ini (vorläufig) wieder auf On zu setzen:

Die php.ini lag bzw. liegt in der Regel unter C:\Windows

Online, also beim Dienstleister, droht nach wie vor keine „Gefahr“. Selbst heute noch haben die meisten Dienstleister noch nicht auf register_ globals = Off umgeschaltet.

Und selbst XAMPP setzt auf Komfort statt Si-cherheit und will die Nutzer nicht verärgern. Auch hier ist man daher beim „On“ geblieben.

Infos über PHP Wie ist register_globals bei dir bzw. bei deinem Dienstleister eingestellt? Überprüfe es: Verwen-de dazu die bekannte Funktion phpinfo(). Zur Erinnerung: Erzeuge ein Dokument mit fol-gendem Inhalt, speichere es als info.php und le-ge es im Root des lokalen Webservers oder ir-gendwo auf deiner Homepage ab: <?php

phpinfo();

?>

XAMPP setzt register_globals auf On

Mein Tipp: Gewöhne dich (so langsam) an das Off. Denn Sicherheit geht vor Komfort. Auch ich programmiere inzwischen ausschließlich in der neuen Syntax.

Außerdem werden auch die Dienstleister sicher irgendwann einmal nachziehen und Schritt für Schritt diesen „Variablenschalter“ auf Off schal-ten. Und dann solltest du vorbereitet sein.

Zeit zum Umlernen! Ich verrate dir zuerst, wa-rum die neue Syntax Sinn macht. Dann führe ich dir die Sicherheitslücke an einem Beispiel vor. Danach pflichtest du mir sicher bei, dass die un-geprüfte automatische Erzeugung von globalen Variablen gesperrt werden muss.

Das steckt dahinter: safety first! Was heißt es eigentlich, dass plötzlich „globale Variablen“ (register_globals) nicht mehr zuge-lassen sind? Was sind globale Variablen?

Exkurs: globale Variablen Hinter registrierten globalen Variablen verbergen sich die Informationen aus „GET“ und „POST“, „COOKIE“ und „SERVER“ – praktisch der ge-samte Bereich externer Variablenquellen. Diese Werte stehen nicht mehr global zur Verfügung. Einfacher ausgedrückt: Alle Inhalte aus dieser Quelle können jetzt nicht mehr einfach per „$Variablenname“ ausgelesen werden.

Page 11: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Das steckt dahinter: safety first!

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

11

Beispiel Formularauswertung Die Erklärung war zu technisch? Dann zeige ich dir das Prinzip nun Schritt für Schritt am Bei-spiel! Fangen wir mit dem Musterfall Formular-auswertung und dem Array $_POST an! Bisher war PHP ganz einfach gestrickt. Der Na-me eines Formularfelds wurde automatisch zur Variablen. Den Wert eines Formularfelds wie diesem <input type="text" name="Name">

konntest du folgendermaßen auslesen: echo "<b>$Name</b>", herzlich willkommen!\n";

Vergleiche mit dem ersten Beispiel aus Kapitel 5 in „PHP für Einsteiger“.

Dabei spielte es keine Rolle, ob du das Formular per method="post" oder method="get" abgeschickt hattest. Selbst die Werte von Coo-kies konntest du anhand ihres Namens ganz ein-fach ermitteln. Ein Cookie namens Name wurde zu einer Variablen namens $Name. Diese Schreibweise war und ist bequem, das ge-be ich zu. Zu bequem! Zum einen kann es zu

Verwechslungen kommen. Du erzeugst ein For-mularfeld, welches Name heißt? Und zufälliger-weise steckt ein gleichnamiges Cookie in dei-nem Quellcode? Dann stehen sowohl der Inhalt des Formularfelds als auch der Wert des Cookies über $Name zur Verfügung. Wer gewinnt? Das hängt von deinem Skript ab! Einverstanden, diese Schwierigkeiten könntest du durch eine konsequente Variablenbenennung von Anfang an ausschließen. Denke dir kleine Kürzel aus, die nur für Cookies oder nur für Formularfelder gelten.

Schlimmer sind die Sicherheitsmängel dieser Schreibweise bei schlampig programmiertem Code. Solch einen Sicherheitsmangel zeige ich dir jetzt!

Quelltext der Datei unsicher.php Schaue dir das unten stehende Listing genau an. Schreibe den Code ab und speichere ihn unter dem Namen unsicher.php! Rufe die Datei auf!

Findest du die schwere Sicherheitslücke?

(Ich gehe natürlich davon aus, dass register _globals bei dir noch auf On steht!)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

<head>

<title>Das große Sicherheitsloch</title>

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">

</head>

<body>

<h2>Sicherheitslücke bei register_globals = On</h2>

<form action="<?php echo "unsicher.php"; ?>" method="post">

Passwort: <input type="password" name="pass">

<input type="submit" value="Absenden">

</form>

<?php

if ($pass == "abc_xyz_123") {

$login = true;

}

if ($login) {

echo "<p>Geheimer Bereich beginnt hier</p>";

}

?>

</body>

</html>

Page 12: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Weitere Neuerungen

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

12

Der Quelltext im Überblick Ich arbeite mit der „Flag-Variablen“ $login. Nur bei Kenntnis des richtigen Passworts soll diese auf true gesetzt werden. if ($pass == "abc_xyz_123") {

$login = true;

}

Dummerweise habe ich diese Variable im Bei-spiel am Anfang nicht mit false initialisiert. Durch diese kleine Code-Schlamperei kann ein Angreifer ganz leicht ohne Kenntnis des Pass-wortes eintreten. Wie? Sie oder er muss einfach nur ?login=true oder ?login=1 an die URL anhängen. Denn eine 1 steht für true. Schon wird die Variable $login auf true geschaltet und das „Tor“ zum geheimen Be-reich steht sperrangelweit offen. Probiere es aus: Rufe die Datei unsicher.php auf, indem du tippst: unsicher.php?login=1!

Nachschlüssel: Ohne Passwortkenntnis eintreten!

Dramatisch, findest du nicht auch?

Die Arrays $_POST und $_GET Dieses Sicherheitsproblem haben auch die Ma-cher von PHP erkannt und mit Einführung von PHP 4.1 gelöst. Es gilt: • Alle über method="post" versendeten For-

mulardaten sind im Array $_POST gespei-chert.

• Die per method="get" erhältlichen Daten da-gegen im Array $_GET. Dazu gehören auch die an die URL gehängten Parameter.

Wenn du den Wert des URL-Anhangs „?log-in=true“ erfassen möchest, gelingt das nur noch über: $_GET['login']. Nur das ist also die Variante, die höchste Sicher-heit bietet! Und nun schalte bitte register_globals auf Off!

register_globals auf Off setzen In diesem Kurs empfehle ich dir dringend, mit abgeschaltetem register_globals zu arbeiten. Setze diesen Schalter in der php.ini auf Off. Wie machst du das?

1. Prüfe zuerst, wo deine php.ini liegt.

Denn XAMPP nutzt nicht den Pfad C:\Windows, sondern verwendet einen abweichenden Speicherplatz.

2. XAMPP nutzt im Beispiel den Pfad C:\xampplite\apache\bin\php.ini. Stoppe XAMPP und rufe diese php.ini auf.

3. Suche die Zeile register_globals = On (es darf kein Semikolon davor stehen, ein Semi-kolon gilt als Kommentarzeichen).

4. Ersetze On durch Off und speichere die Ini-Datei.

5. Starte XAMPP erneut und überprüfe die Konfigurationseinstellung.

Probiere den Login-Trick erneut. Er klappt nicht mehr – die Sicherheitslücke ist geschlossen!

Weitere Neuerungen Da wurde nun schon seit 2003 ein riesiges Ge-wese um PHP 5 gemacht. PHP 5-Bücher er-schienen lange bevor es PHP 5 gab. Die verbesserten (aber nicht unbedingt ausrei-chenden) Fähigkeiten in Hinblick auf objektori-entierte Programmierung sind aber nur für wirk-liche Könner interessant. PHP ist eine Skript-sprache. Objektorientiert arbeiten hieße in unse-rem Falle mit Kanonen auf Spatzen zu schießen. Und da die meisten Dienstleister bei den Versio-nen sowieso um Monate oder Jahre hinterher-hinken, wäre ich hier erst einmal vorsichtig. Die für den Programmieranfänger wirklich inte-ressanten Neuerungen steckten dagegen in PHP 4.1! Denn mit dieser Version wurden neben den schon erwähnten Arrays $_POST und $_GET auch weitere assoziative Arrays eingeführt: $_COOKIE Dieses Array enthält alle Cookie-Variablen. Mit $_COOKIE['besuch'] ermittelst du z. B. den Wert des Cookies besuch..

Page 13: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Übungsteil A zur neuen Syntax

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

13

$_REQUEST Dieses Array spielt eine Sonderrolle. Es enthält alle Werte aus $_POST, $_GET und $_COOKIE. Das ist dann praktisch, wenn dein Skript sowohl Daten empfängt, die zum einen aus einem For-mular stammen, zum anderen aber auch über ei-nen URL-Parameter von der vorigen Webseite übergeben werden. Du kannst also den Wert aus dem Formularfeld <input type="text" name="Name">

in jedem Fall auffangen, egal ob du das Formu-lar mit method="post" oder method="get" abgeschickt hattest. Ich bin bei der Verwendung von $_REQUEST jedoch vorsichtig, da es die Bemühungen um mehr „Ordnung“ ein wenig einschränkt. Damit wird die eben als vorteilhaft herausgearbeitete eindeutige Trennung wieder aufgehoben – zu-mindest teilweise.

Mit diesen neuen Variablen entfallen übrigens auch die bis PHP-Version 4.1 gültigen sperrigen und langen Array-Bezeichnungen: $HTTP_POST_VARS $HTTP_GET_VARS $HTTP_COOKIE_VARS Gewöhne dich an $_POST, $_GET und $_COOKIE!

Neu sind auch die Array-Variablen $_SERVER, $_ENV und $_SESSION. Dabei ist $_ENV für Umgebungsvariablen und $_SESSION für das Session-Management verantwortlich. Die Sessi-ons schauen wir uns in einem 3. PHP-Heft an! Versprochen!

Die Variable $_SERVER Am interessantesten ist sicher die Array-Variable $_SERVER. Denn sie enthält alle Servervariab-len, also alle die Variablen, die der Webserver übergibt. Und der übergibt so allerhand, wie du mit der Funktion phpinfo() erkennen kannst. Uns interessieren vor allem Dateiname und Pfad! Erinnerst du dich an die Beispiele aus dem Ein-steigerheft (bis 2. Auflage)? Wenn du dort Pfad und Dateinamen ermitteln wolltest, schriebst du $PHP_SELF. Nach der neuen Syntax jedoch greifst du per $_SERVER['PHP_SELF'] auf die-sen Wert zurück.

Übungsteil A zur neuen Syntax Übung macht den Meister, deshalb folgen nun ein paar „Excerzisen“!

Übung 1: Servervariable Baue die eben besprochene Servervariable $_SERVER['PHP_SELF'] in die Datei unsi-cher.php ein und ersetze die Variable $pass durch die entsprechende $_POST-Variante. Mei-ne Lösung findest du in der Datei unsicher2.php.

Übung 2: Vergleich im Quelltext Vergleiche beide Varianten miteinander; die mit der direkten Angabe des Dateinamens und die mit der Servervariablen. Schaue dir den Quell-text der vom Webserver generierten Seite an.

Der Webserver sendet stets eine HTML-Datei an den Browser – PHP-Befehle suchst du vergeblich!

Welchen Unterschied stellst du fest?

Übung 3: Variable initialisieren Bügle meine kleine Programmierschlamperei aus dem „Unsicher-Beispiel“ aus. Sorge dafür, dass auch bei eingeschalteten register_globals kein Hintertürchen für den Angreifer offen bleibt! Die Lösung zeige ich dir in der Datei un-sicher3.php.

Alle Download-Dateien liegen auf der De-tailseite für dieses Heft. Surfe zu

www.knowware.de/?book=phpmysql und lade das Archiv phpkurs_teil2.zip herunter.

Formular-Know-how für Fortgeschrittene Auch wenn sich viele Leser immer wieder eine Neuauflage von „PHP für Einsteiger“ wünschen: So veraltet ist die 2. Ausgabe von 2003 über-haupt noch nicht! Denn über die neue Syntax und die Arrays $_POST und $_GET hatte ich dich schon ab S. 42 aufgeklärt. Dort findest du sogar ein Beispiel, das die Unter-schiede zwischen alter und neuer Syntax zeigt. Solltest du also stolze Besitzerin bzw. stolzer Besitzer dieses Titels sein, lies das entsprechen-de Kapitel bitte noch einmal gründlich durch!

Page 14: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Guter Code = lesbarer Code

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

14

Einrückungen nach PEAR: Guter Code im Zeichen der Birne Neulich fragte mich ein Leser, warum ich denn nicht nach PEAR eingerückt hätte. Wonach? Nach PEAR, der Birne? Es handelte sich keines-falls um einen späten Verehrer von Altbundes-kanzler Kohl: Mein freundlicher Feedback-Schreiber meinte den PEAR-Coding-Standard für Einrückungen und wollte wissen, warum ich den ignoriert hätte.

Exkurs: PEAR

Hinter PEAR verbirgt sich das „PHP Extension and Application Repository“, eine riesige Biblio-thek von PHP-Erweiterungen und Anwendun-gen, die du dir herunterladen und nutzen kannst. Derzeit (Sommer 2004) existieren über 250 ver-schiedene Programm-Pakete, auch als „Packa-ges“ bezeichnet, und zwar von A wie Authenti-fizierung bis X wie XML. Eine Übersicht findest du auf http://pear.php.net, bei manchen PHP-Distributionen (nicht bei XAMPP Lite) ist PEAR gleich mit dabei.

Aber darauf wollte ich nicht hinaus, denn für Programmier-Analphabeten wie mich war die erste Beschäftigung mit PEAR sehr frustrierend. Hier empfängt dich eine „geballte Ladung“ Eng-lisch, gepaart mit „heavy Tech-Talk“ und ehe ick Dusselkopp da durchjestiegen bin, programmia ick mia den Dreck lieba alleene. Und auch dir empfehle ich, erst die Grundlagen zu trainieren, ehe du die Höhen von API und CVS* erklimmst. (*Keine Ahnung, was das genau ist.) Aber ein wenig habe ich doch begriffen: Wer zur PEAR-Bibliothek etwas beisteuern möchte, muss sich an einheitliche Programmierstandards halten, z. B. in Bezug auf Einrückungen und das Setzen von Leerzeichen.

Hinter den PEAR-Coding-Standards verber-gen sich also strenge Regeln für das Schreiben von gut lesbarem Code.

Guter Code = lesbarer Code Soviel schon vorweg: Dem PHP-Parser (also deinem Webserver mit PHP, der den Code inter-pretiert) ist es im Prinzip egal, wie du deinen Code schreibst. Alles untereinander oder neben-einander? Gequetscht auf eine einzige lange Zei-le? Solange du die Semikolons am „Zeilenende“ nicht vergisst und keine anderen Programmier-fehler machst, ist das statthaft.

Die Frage ist, ob du durch derart schlecht gegliederten Code selber noch durchblickst!

Ich empfehle dir, deinen Code zu gliedern. Da-für steht dir ein großes Repertoire an „white spaces“ zur Verfügung, z. B. Leerzeichen, Tabsprüngen oder Leerzeilen. PHP stört das nicht, der Parser ignoriert diese Zeichen. Und da diese zusätzlichen Leerräume auch die Performance (Ausführgeschwindigkeit) nur geringfügig beeinträchtigen, kannst du diese Weißräume schamlos nutzen. Warum bin ich eigentlich so ein Einrückmuffel? Der Grund ist einfach: Seit Jahren programmiere ich zum größten Teil für Zeitschriftenbeiträge und musste mir dafür eine ganz eigene Schreib-weise angewöhnen – ohne Einrückungen. Denn die Einrückungen gingen beim Satz in den engen Spalten entweder kaputt oder wurden falsch um-brochen. Wo doch oft noch nicht einmal die ge-raden "Gänsefüßchen" im Quellcode überleben! Mein Motto lautete daher stets: • viel mit Kommentaren zu arbeiten und • zusätzlich durch leere Zeilen gliedern. Doch nun schreite ich mit gutem Beispiel voran und kodiere „im Zeichen der Birne“. Da ich bei diesem Heft auch das Layout übernommen habe, geht der Umbruch garantiert nicht kaputt!

Der Code-Knigge im Handbuch von PEAR, downloadbar auf http://pear.php.net, allerdings schwer verdaulich

Page 15: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Wo setzt du Leerzeichen?

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

15

Wo setzt du Leerzeichen? Schauen wir uns zuerst an, wo du zusätzliche Leerzeichen einfügen solltest! Zuweisungsoperator Setze je ein Leerzeichen vor und nach einem Zuweisungsoperator: $login = true;

Du nimmst mehrere Variablenzuweisungen un-tereinander vor, z. B. am Anfang eines Skripts? Dann kannst du auch mehrere Leerzeichen set-zen, um alle Gleichheitszeichen ordentlich un-tereinander auszurichten. $lange_variable = "Teststring";

$kurz = 12;

$noch_eine = true

Du kannst es so machen, musst es aber nicht. Vergleichsoperatoren Platziere auch je ein Leerzeichen vor und nach einem Vergleichsoperator, z.B. in Kontrollstruk-turen. Schau dir dafür noch einmal unser erstes Code-Beispiel an: if ($pass == "abc_xyz_123") {

In diesem Beispiel steckt auch gleich die nächste Regel: Kontrollstrukturen und Schleifen Setze ein Leerzeichen bei Kontrollstrukturen wie if und switch oder bei Schleifen mit for bzw. while. Platziere es nach dem Schlüsselwort und vor der öffnenden runden Klammer. if ($pass == "abc_xyz_123") {

Wo setzt du kein Leerzeichen? Wo setzt du nun kein Leerzeichen? Funktionsaufrufe Du willst eine Funktion aufrufen bzw. definie-ren? Dann folgt zwischen Funktionsnamen und rundem Klammernpaar kein Leerzeichen: setcookie("besuch", "ja")

Damit unterscheidest du Funktionen von Kon-trollstrukturen und zeigst, dass Funktionsname und Argument(e) dicht zueinander gehören.

Mehrere Argumente jedoch sollten durch ein Leerzeichen voneinander abgerückt werden. Setze also nach dem Komma je ein Leerzeichen. setcookie("besuch", "ja")

Einrückungen mit vier Leerzeichen Und wo solltest du den Code nun einrücken? Bei Kontrollstrukturen wie if oder switch. Und bei Schleifen wie while, for, do while oder foreach.

Dabei wird der Code innerhalb eines ge-schweiften Klammernpaares um je vier

Leerzeichen eingerückt. if ($pass == "abc_xyz_123") {

$login = true;

}

oder for ($i = 0; $i < $max; $i++) {

echo "Tue was";

}

Bei einer switch-Fallunterscheidung jedoch sieht die Einrückung folgendermaßen aus, zusätzlich setzt du nach jedem break eine Leerzeile: switch (Bedingung) { Fall 1: action1; break; Fall 2: action2; break; default: defaultaction; break; }

Das Schöne an dieser Einrückgeschichte: Du kommst nicht mehr mit den öffnenden und schließenden geschweiften Klammern durchein-ander. Du erkennst ineinander verschachtelte Strukturen prima durch die entsprechende Ein-rückung. Dadurch findest du z. B. die passende schließende Klammer ganz leicht.

Geschweifte Klammern setzen Apropos geschweifte Klammern: Die „PEAR-Leute“ empfehlen die Klammerung, die ich dir auch schon in „PHP für Einsteiger“ gezeigt habe und in diesem Heft natürlich weiterhin propagie-re. Und sie ermuntern dich, stets Klammern zu setzen, auch wenn du sie weglassen könntest. (Aber da ich dir solche „klammerfreien“ Fälle nie empfohlen hatte, spielt das keine Rolle.)

Page 16: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Freeware-Variante PHPEdit 0.8

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

16

PHPEdit – PHP-Editor der Superlative Jawoll, ich gestehe: Ich bin ein bekennender Weaverslave-Freak. Schon in Ausgabe 1 und 2 von „PHP für Einsteiger“ habe ich dir von die-sem tollen Programm vorgeschwärmt. Für die fünfte komplette Neuausgabe von „Homepages für Einsteiger“ konnte ich sogar einen kleinen Weaverslave-Workshop verfassen. Der Weberknecht von Thomas Weinert (www.weaverslave.ws) ist und bleibt mein Favo-rit für PHP, HTML, JavaScript und XML! Das Programm ist einfach Klasse, nicht nur wegen der tollen Code-Farbhervorhebung! Das Beste:

Der Weaverslave ist nach wie vor Freeware!

Aber der Mensch ist ja bekanntlich nie zufrie-den. Ich war auf der Suche nach einem Editor mit „Beautifying-Funktion“; also einer automa-tischen Code-Verschönerungs- und Einrückau-tomatik. Und irgendwann wurde ich fündig: Zum einen gibt es Zend Studio, www.zend.com. Für 249,- Dollar, muss man fairerweise hinzufü-gen. Wenn du magst, kannst du eine Probeversi-on herunterladen und 30 Tage lang testen. Um einiges preisgünstiger ist da schon PHPEdit von Sébastien Hordeaux. Auch Sébastiens Tool darfst du 30 Tage lang testen: www.phpedit.com, für kommerzielle Nutzung musst du eine Lizenz für 75,- Euro erwerben, die „private Edition“ ist kostenfrei. Wenn du auch mit einer älteren Ver-sion zufrieden bist, suche doch mal nach der …

Freeware-Variante PHPEdit 0.8 Du findest diese Ausgabe z. B. auf der Seite www.soft-ware.net – fahnde dort nach PHPEdit.

PHPEdit in der Freeware-Version

Du hast den Download gefunden? Beachte, dass der Download evtl. nur den Webinstaller enthält. Während der Installation musst du online blei-ben und unzählige Module nachinstallieren. Geduld, das hat bei meinen Tests sehr lange gedauert!

Code automatisch verschönern Doch die herrliche Code-Verschönerungs-funktion entschädigt für die Mühe. 1. Rufe ein vorhandenes PHP-Dokument auf. 2. Wähle TOOLS|CODE BEAUTIFIER|BEAUTIFY

CURRENT DOCUMENT. 3. Beim ersten Aufruf musst du einen Namen

für ein Profil vergeben und die Voreinstel-lung abnicken.

Hier kannst du im Prinzip die Voreinstellun-gen übernehmen. PHPEdit nutzt automatisch den Einrückungs-Standard nach PEAR. Le-diglich die Einrückung nach switch ist „zu-viel des Guten“. Das Entfernen des Häk-chens vor Space after switch zeigte aller-dings keine Wirkung

4. Nach Aufruf des Befehls wird dein Code wie

von Geisterhand ordentlich ausgerichtet.

Übungsteil B zur Codeeinrückung Nun folgen ein paar Übungen zum Thema „schönerer Code“.

Übung 1: PEAR-Manual lesen Surfe zu http://pear.php.net und lade dir das PEAR-Manual im HTML-Help-Format herunter. Lies den Abschnitt zur Codeeinrückung.

Übung 2: Datei von Hand einrücken Nimm eine Beispieldatei zum Thema Schleifen, z. B. aus Kapitel 7 in Einsteigerheft. Formatiere den Quellcode so, dass er den Richtlinien von PEAR entspricht, rücke die Passagen ein – setze dafür die entsprechenden Leerzeichen.

Übung 3: Einrücken mit PHPEdit PHPEdit erlaubt dir, so viele Dokumente zu öff-nen, wie du willst. Finde den Befehl, mit dem du alle gleichzeitig automatisch einrücken kannst.

Page 17: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Der Trick mit den Arrays

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

17

Notationstricks, mit denen PHP wieder Spaß macht! Darf ich dir etwas gestehen? In der Schule galt ich früher als Sonderling. Statt zur Schuldisko ging ich zum Musikunterricht und statt für Fuß-ball interessierte ich mich für Architektur, Lite-ratur und Fotografie. Wenn alle übereinstim-mend der Meinung waren, dass nur A richtig sein konnte, suchte ich hartnäckig nach einer Al-ternative, die B oder C hieß und im Endeffekt auch ganz prima funktionierte. So ähnlich fühlte ich mich bei PHP, z.B. bei die-ser „register_globals = Off“-Geschichte und der neuen Syntax. Ich konnte mich einfach nicht damit abfinden, dass die Notation durch diese $_POST-, $_GET- oder $_REQUEST-Arrays nun um so vieles komplizierter werden würde. Ich zeige dir ein paar Tipps, die ich durch Pro-bieren und Recherchieren herausgefunden habe. In Einsteiger-Büchern oder Musterskripten aus dem Internet wirst du sie selten finden – da über-wiegt meist die „komplizierte“ Schreibweise. Aber meine Tricks sind, soweit ich das beurtei-len kann, zulässig und vor allem – sie funktio-nieren ganz wunderbar! Sie produzieren auch keine Fehlermeldungen.

Apropos Fehlermeldungen! Zwei Seiten weiter hinten schalten wir ein „strenges“

Fehlermanagement ein!

Der Trick mit den Arrays Auf den ersten Blick wird die Schreibweise durch diese neue „Array-Syntax“ verkompli-ziert. So konntest du folgendes Formularfeld <input type="text" name="Vorname">

im PHP-Code nach der alten Schreibung sehr unkompliziert auslesen und weiterverarbeiten: echo "Hi <b>$Vorname</b>!";

Das Verketten des umgebenden Strings mit der Variablen war nicht nötig. Die Idylle war per-fekt: Text, HTML-Tags und Variable friedlich vereint innerhalb eines einzigen Gänsefüßchen-Paars! Nach der neuen Syntax geht das leider offenbar nicht mehr so leicht. Versuche doch einmal das hier und du wirst dich wundern: echo "Hi <b>$_POST['Vorname']</b>!";

Ausgegeben wird nicht der Inhalt der Variablen, sondern der String $_POST['Vorname']. Dabei nützt es auch nichts, wenn du die Regel beher-zigst, bei der Verschachtelung von Gänsefüß-chen nur ungleiche Gänsefüßchen zu verwen-den. Ich habe für den Array-Schlüssel also bewusst einfache Gänsefüßchen und nur außen die dop-pelten verwendet. Doch das hilft alles nichts. Es muss offenbar verkettet werden! echo "Hi <b>" . $_POST['Vorname'] . "</b>!";

Wie umständlich! Denn gerade bei umfangrei-chen Auswertungen mit vielen Variablen wird es dadurch schnell unübersichtlich und kompliziert. Der Trick lautet:

Lasse die normalerweise üblichen Gänse-füßchen um den Array-Key herum weg.

Das sieht dann so aus: echo "Hi <b>$_POST[Vorname]</b>!";

Diese Gänsefüßchen-freie Schreibweise ist im-mer dann möglich, wenn sich die Array-Variable selber innerhalb eines doppelten Gänsefüßchen-Paars befindet. In allen anderen Fällen musst du den Key je nach Geschmack stets mit einfachen bzw. doppelten Gänsefüßchen umkleiden. Und zwar so, wie ich es z.B. bei $_POST['Vorname'] gezeigt habe.

Es macht übrigens auch einen Unterschied, ob eine Passage hinter echo in einfachen oder dop-pelten Gänsefüßchen steht! Denn nur bei Ver-wendung der doppelten werden Variablen inner-halb dieser Passage als Variablen interpretiert.

Ein zweiter Trick mit den Arrays Es gibt noch einen weiteren Trick: Platziere die Variable innerhalb von geschweiften Klammern. Dann kannst du für den Key weiterhin die einfa-chen oder doppelten Gänsefüßchen verwenden: echo "Hi <b>{$_POST['Vorname']}</b>!";

Im Heft werden wir stets eine dieser Schreibwei-sen verwenden, und zwar nicht nur bei $_POST, $_GET oder $_REQUEST, sondern auch bei an-deren Arrays.

Page 18: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Lange Passagen mit echo, Trick 1

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

18

Lange Passagen mit echo, Trick 1 Weißt du, worüber ich mich immer geärgert ha-be? Über die komplizierte Schreibweise, wenn du in PHP längere HTML-Passagen mit echo

ausgeben willst. Schau dir als Beispiel einmal folgenden Quelltext an. Da du gleichrangige Gänsefüßchen nicht miteinander verschachteln darfst, nutzt du das Escape-Zeichen \.

echo "<form action=\"mail.php\" method=\"post\">\n";

echo "<input type=\"hidden\" name=\"Mail\" value=\"$_POST[Mail]\">\n";

echo "<input type=\"hidden\" name=\"botschaft\" value=\"$_POST[botschaft] \">\n";

So steht es in vielen Büchern, so findest du es in den meisten Skripten! Nicht einzusehen, warum es sich viele Autoren (einschließlich eines ge-wissen Herrn Hanke in „PHP für Einsteiger“) so kompliziert gemacht haben!

Der Trick lautet:

Setze statt der doppelten stets einfache Gänsefüßchen.

Der derart vereinfachte Quelltext sieht so aus:

echo "<form action='mail.php' method='post'>\n";

echo "<input type='hidden' name='Mail' value='$_POST[Mail]'>\n";

echo "<input type='hidden' name='botschaft' value='$_POST[botschaft]'>\n";

Das ist absolut zulässig, denn es gibt keine Re-gel, die dir in HTML die Verwendung der dop-pelten Gänsefüßchen für Attributwerte zwingend vorschreibt!

Lange Passagen mit echo, Trick 2 Aber auch damit war ich nicht zufrieden. Du willst zehn HTML-Zeilen untereinander ausge-ben? Zehnmal mit echo operieren und zehn Gän-sefüßchen-Paare setzen? Warum? Wenn du zehn Produkte beim Supermarkt kaufst, trägst du ja auch nicht alle einzeln nach Hause. Du steckst alles in eine Tüte und „ver-waltest“ deinen Einkauf auf diese Weise in einer

„Sammlung“. Und genau so klappt es auch mit echo! Der nächste Trick lautet:

Schreibe die echo-Anweisung nur einmal! Platziere alle auszugebenden HTML-Zeilen

innerhalb eines einzigen Gänsefüßchen-Paars. Setze dazwischen Zeilenumbrüche!

Das sieht dann folgendermaßen aus:

echo "<form action='mail.php' method='post'>

<input type='hidden' name='Mail' value='$_POST[Mail]'>

<input type='hidden' name='botschaft' value='$_POST[botschaft]'>\n";

Das Beste an der Geschichte: Du kannst dir das nervige Setzen der \n-Zeichen (new line) sparen. Durch die Zeilenumbrüche wird automatisch ei-ne „New-line-Anweisung“ erzeugt. (Die Einrückung habe ich übrigens nur erzeugt, damit es schön aussieht und damit die Zugehö-rigkeit zu echo gezeigt wird.)

Passagen in Heredoc-Syntax Dich rappelt das schlechte Gewissen? Du willst weiterhin die doppelten Gänsefüßchen bei HTML-Attributen verwenden und bist auch nicht bereit, auf die einfachen oder doppelten Gänsefüßchen um Array-Keys herum zu ver-zichten?

Page 19: PHP und MySQL auf der Homepage - download.knowware.dedownload.knowware.de/phpmysql.pdf · Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von PHP und MySQL auf der Homepage

Endlich alle Fehler finden!

Hanke: „PHP u. MySQL a. d. Homepage“: Probeseiten von www.knowware.de

19

Auch die Geschichte mit dem einmal echo für viele Zeilen behagt dir nicht? Na dann habe ich auch für dich eine Alternative parat. Ebenfalls kaum bekannt, aber dafür ein umso größerer

Knaller. Wovon ich rede? Von der Heredoc-Syntax. Am besten schaust du dir die Sache erst einmal am Beispiel an! Die Rätselfrage lautet: Findest du die Unterschiede?

echo <<<FORMULAR

<form action="mail.php" method="post"> <input type="hidden" name="Mail" value="{$_POST['Mail']}">

<input type="hidden" name="botschaft" value="{$_POST['botschaft']}">

FORMULAR;

Die Heredoc-Syntax unter der Lupe Zuerst merkst du, dass du auf diese Weise offen-bar ganz gewöhnliche, „unbearbeitete“ HTML-Abschnitte ausgeben kannst. Das Geheimnis steckt in diesem komischen Gebilde: echo <<<FORMULAR

Mit diesem Operator leitest du den Heredoc-Bereich ein. Beachte, dass du hinter dem Schlüs-selwort FORMULAR kein Semikolon setzen darfst! Ausgeschaltet wird der Heredoc-Bereich mit dem Gegenstück: FORMULAR;

Achte hier jedoch auf das Semikolon, denn an dieser Stelle muss es ohne Leerzeichen gesetzt werden, um den Bereich korrekt abzuschließen! Dabei kannst du dir für das Schlüsselwort FORMULAR natürlich auch eine andere, kurze Bezeichnung ausdenken. Verzichte auf Leer- und Sonderzeichen und verwende keine Umlaute und keine Zahlen am Anfang! Achte darauf, dass diese spezielle Bezeichnung nirgendwo anders in deinem Quelltext auftaucht!

Mit dem Kunstwort heredoc wird die Passage „here document“ abgekürzt, auf Deutsch: Hier beginnt das Dokument. Innerhalb des Heredoc-Paares kannst du dann ganz normalen HTML-Quellcode schreiben.

Zugriff auf Variablen Da es sich um einen ganz normalen HTML-Abschnitt handelt fragst du dich sicher: Wie greife ich auf die Werte von Variablen zu? Das gelingt mit dem schon erwähnten Trick:

Umschließe die Variablen einfach durch ein geschweiftes Klammernpaar:

value="{$_POST['Mail']}"

Statt gleich die echo-Anweisung zu verwenden, kannst du den String aus der heredoc-Anweisung auch in einer Variablen zwischenspeichern. Statt echo <<<FORMULAR

schreibst du dann $variable = <<<FORMULAR

Endlich alle Fehler finden! Gut zu wissen: PHP meldet dir deine Fehler! Aber wusstest du, dass PHP per Standard nur ausgewählte Fehler anzeigt? Warnungen oder fa-tale Fehler bekommst du stets zu Gesicht, aber ein einfacher Hinweis (= Notice) wird unter-drückt. Hier siehst du ein Beispiel für einen Hinweis zu einer nicht definierten Variable:

Auch ein Hinweis (Notice) bietet wichtige Informationen!

Gerade diese Hinweise können sehr nützlich sein – sie bewahren dich vor dem schlampigen Programmieren! Stelle sie ein! 1. Gehe in die php.ini, wie auf Seite 12 gezeigt. 2. Suche diese Zeile: error_reporting = E_ALL & ~E_NOTICE

3. Entferne die Passage & ~E_NOTICE: error_reporting = E_ALL

Schon werden dir alle Fehler angezeigt.

Debugger von PHPEdit: Hast du bemerkt, dass auch PHPEdit einen tollen, integrierten Debug-ger besitzt? Wähle DEBUG|RUN oder [F9]. Schon erscheinen die Fehlermeldungen direkt im Editor, ohne dass du die Seite erst aufrufen musst. PHPEdit ist schon ein kleiner Knaller!