Upload
others
View
1
Download
0
Embed Size (px)
Das große Buch
PHP 5&
MySQLElena HirteDaniel Koch
Jens und Dieter Ferner GBR
DATA BECKER
Inhalt
1« Einleitung 21
1.1 Wie unterscheidet sich PHP von anderen Sprachen? 22
1.2 Neuerungen von PHP 5 gegenüber PHP 4 23
1.3 Bedeutung von Zend 24
1.4 Informationen zur GPL 25
1.5 Editoren zur Arbeit mit PHP 26
2 * Einrichten und Installieren derEntwicklungsumgebung 29
2.1 Zusammenspiel von Webserver und PHP 30
2.2 Installation von Apache und PHP unter Linux 30
2.3 Installation von Apache und PHP unter Windows 31
PHP installieren 33
2.4 Installation von IIS & PHP unter Windows 34
2.5 Konfiguration von Webserver und PHP 35
2.6 Testen und Einsehen der Konfiguration mit phpinfo() 36
Die Datei php.ini 37
2.7 Installation von MySQL 42
2.8 Bedienung von MySQL 43
2.9 Tools unter Windows 45
phpMyAdmin 45MySQL-Front 47MicroWeb - PHP auf CD-ROM 48
2.10 One-Click-Installationspakete für Windows 49
EasyPHP 49Andere Installations-Pakete 51
3« Einstieg in die PHP-Programmierung 53
3.1 PHP & HTML 54
3.2 PHP & JavaScript 55
3.3 Sprachelemente & Syntax 56
3.4 Definieren und Nutzen von Konstanten und Var iablen .... 57Die Daten-Typen 58Variable Variablen 59Konstanten 60Operatoren & Ausdrücke 61
3.5 Eigene Funktionen programmieren 62
3.6 Bedingungen & Schleifen 66if 66switch 67for ...'. 68
while 69exit -- 70
3.7 Referenzen 70
3.8 Arrays und ihre Funktionen 71Mehrdimensionale Arrays 73Konvertieren von Arrays 73Arbeiten mit zwei Arrays 74Arrays nach Elementen durchsuchen 75Sortieren von Arrays 75Durchlaufen von Arrays 75
3.9 Reguläre Ausdrücke 76
3.10 Fehler in PHP-Skripten 79Fehler durch Safe Mode 81
4« Grundlegende Funktionen 83
4.1 Funktionen rund um Zeichenketten 84Analyse-Funktionen 84Bearbeitungsfunktionen 85Vergleichsfunktionen 98Ausgabefunktionen 101Zeichenfunktionen 104
4.2 Mathematische Funktionen 105Berechnungsfunktionen 105Trigonometrische Funktionen 109Konvertierungsfunktionen 111Zufallsgeneratoren 114Formatfunktionen 116
4.3 Datum und Uhrzeit 118Datum- und Uhrzeit-Funktionen 118Kalenderfunktionen 128
4.4 HTTP-Funktionen 129
5* Dateien und Verzeichnisse 133
5.1 Zugriff auf Dateisystem 134Datei- und Dateisystem-Analyse 134Zugriff auf Dateieigenschaften 137Ändern der Eigenschaften der Dateien 142Dateien manipulieren 144
5.2 Lesen und Schreiben 145Dateien öffnen 145
Schreiben in die Datei 147Schließen einer Datei 149Lesen aus einer Datei 150Navigation innerhalb der Datei 156Verriegelung einer Datei 157
5.3 Arbeiten mit Verzeichnissen 158Erstellen, Navigieren und Löschen 158Öffnen, Lesen, Schließen 160
5.4 Sicherheit gewährleisten 162
6* Interaktive Webseiten 163
6.1 HTML-Elemente zur Formulargestaltung 164
6.2 HTML-Formulare und PHP 171
6.3 Datenübergabe mit dem Query-String 179
7 . Sessions und Cookies 183
7.1 Vorzüge der Speicherung von Daten 184
7.2 Setzen und Lesen von Cookies 184Setzen von Cookies 185Cookies wieder auslesen 187
7.3 Wie arbeiten Sessions? 189
7.4 Variablen in Sitzungen speichern und lesen 190Grundlegendes zur Arbeit mit Sessions 190
Funktionen zur Arbeit mit Variablen in Sessions 192Sitzungsdaten speichern 193Einstellungen in der php.ini 194
7.5 Login-Funktion 194
7.6 Cookies, Datenschutz - P3P und Browserprobleme 196Browser und Cookies 196Datenschutz und die eigene Homepage 198P3P •. 199
8 * MySQL-Anwendungen mit PHP 205
8.1 Schnellübersicht über SQL 206Schreibweisen und Namenskonventionen 207
Datentypen 208
8.2 Der MySQL-Monitor 210Datenbanken und Tabellen 210
Tabellenstruktur ändern 213Mit Datenbanken arbeiten 216Erweiterte Bedingungen mit WHERE 222
8.3 PHP und MySQL 222Verbindung zur Datenbank herstellen 223Datensätze auswählen 224Abfragen verfeinern 226Neue Datensätze erzeugen 227Vorhandene Datensätze in Formularen anzeigen 229Datensätze ändern 230Datensätze löschen 230
8.4 MySQL-Funktionen in PHP 231Anzahl der betroffenen Reihen (mysql_affected_rows) 231Benutzer wechseln (mysql_change_user) 232Standard-Zeichensatz (mysql_client_encoding) 232
Verbindung schließen (mysql_close) 233Verbindung herstellen (mysql_connect) 233Datenbank erzeugen (mysql_create_db) 234Datensatz-Zeiger bewegen (mysql_data_seek) 234Anfrage an Datenbank (mysql_db_query) 235Datenbanken löschen (mysql_drop_db) 235Fehlernummern anzeigen (mysql_errno) 236Fehlermeldungen ausgeben (mysql_error) 237Datensätze als assoziativer Array (mysql_fetch_array) 237
Objekt mit Feldinformationen (mysql_fetch_field) 238
Zeichen markieren (mysql_escape_string) 239
Datensatz als assoziativen Array (mysql_fetch_assoc) 239Länge eines Feldes (mysql_fetch_lengths) 240Objekt mit Eigenschaften (mysql_fetch_object) 241Datensätze als assoziative Arrays (mysql_fetch_row) 241Feldoptionen ermitteln (mysql_field_flags) 242Feldlänge ermitteln (mysql_field_len) 242Feldnamen ermitteln (mysql_field_name) 243Feld-Zeiger bewegen (mysql_field_seek) 243Tabellennamen ermitteln (mysql_field_table) 243Feldtyp ermitteln (mysql_field_type) : 244
• Speicher freigeben (mysql_free_result) 244Version der Clientbibliothek (mysql_get_client_info) 245Hostinformationen (mysql_get_host_info) 245Protokollversion ermitteln (mysql_get_proto_info) 245Serverversion ermitteln (mysql_get_server_info) 246
ID einfügen (mysql_insert_id) 246Datenbanken anzeigen (mysql_list_dbs) 246Ergebnisfelder auflisten (mysqljistjields) 247Ergebniskennung anzeigen (mysql_list_process) 247Tabellen anzeigen (mysql_list_tables) 248
Anzahl der Felder (mysql_num_fields) 248Anzahl der Datensätze (mysql_num_rows) 249Persistente Verbindung herstellen (mysqLpconnect) 249SQL-Statement senden (mysqLquery) 250Feldinhalt anzeigen (mysql_result) " 250Datenbank auswählen (mysql_select_db) 251Tabellenname anzeigen (mysql_tablename) 251Thread-ID ermitteln (mysql_thread_id) 252
8.5 Workshop: Umfrage und Bewertung programmieren 252
8.6 Die Datenbank 253
8.7 Die Zugangsdaten 254
Die CSS-Datei 255
8.8 Umfragen erstellen 255
8.9 Abstimmung 258
8.10 Ergebnisse : 261
Alle Umfragen anzeigen 264
8.11 Workshop: Datenbankbasiertes Gästebuch 266
Die Features des Gästebuches 267Die Datenbank 268Die Zugangsdaten 268Die CSS-Datei 269Den aktuellen Zeitpunkt ermitteln 275
Die Danke-Seite 276Der Admin-Bereich 277
8.12 Workshop: Passwortschutz und Benutzerverwaltungumsetzen 281
Die Features der Zugangskontrolle 282Die Datenbank 282Die Zugangsdaten 283Die Registrierung 283Der Login-Bereich 288Daten prüfen 289
Datenbanken mit SQLite 293
9.1 Das Grundprinzip von Datenbanken 294
Allgemeines zu Datenbanken 294Datenbankbetriebssysteme und Datenbanken 295Aufbau von Datenbanken 295
9.2 Eine Access-Datenbank als Beispiel 296
Tabellen anlegen 297Datentypen in Access 298Datensätze eingeben 299Beziehungen definieren 300
9.3 Einführung in SQLite 301
SQLite 302Tools für SQLite 302SQL-Statements in SQLite 308Datentypen 310Mit SQLite-Datenbanken arbeiten 312
9.4 SQLite und PHP : 318
Mit SQLite-Datenbanken arbeiten 319Wichtige PHP-Funktionen 323Datenbank öffnen (sqlite_open) 323Persistente Verbindung herstellen (sqlite_popen) 324
Datenbank schließen (sqlite_close) 324Datenbankabfrage durchführen (sqlite_query) 325Datenbankabfrage durchführen (sqlite_array_query) 325Wartezeit setzen (sqlite_busy_timeout) 326
Anzahl der geänderten Zeilen (sqlite_changes) 326Spalte aus der aktuellen Zeile holen (sqlite_column) 327Funktionen erzeugen (sqlite_create_function) 327Aktuelle Zeile holen (sqlite_current) 327Fehlercode ermitteln (sqlite_last_error) 328Fehlerbeschreibung (sqlite_error_string) 328String für SQL aufbereiten (sqlite_escape_string) 329
I
Nächste Zeile als Array holen (sqlite_fetch_array) 329Erste Zeile als String (sqlite_fetch_single) , 330Erste Spalte als String (sqlite_fetch_string) 331Feldname ermitteln (sqlite_field_name) 331Liefert zurück, ob noch mehr Zeilen im Ergebnis vorliegen(sqlite_has_more) 331Abfrage durchführen (sqlite_unbuffered_query) 332Nummer der letzten eingefügten Zeile (sqlite_last_insert_rowid) 332Kodierung der verwendeten SQLite-Bibliothek ermitteln
(sqlitejibencoding) 333Version der SQLite-Bibliothek (sqlitejibversion) 333Zur nächsten Zeile springen (sqlite_next) 333
Anzahl der Felder eines Abfrageergebnisses ermitteln(sqlite_num_fields) 334Anzahl der Zeilen eines Abfrageergebnissen ermitteln(sqlite_num_rows) 334Zur ersten Zeile springen (sqlite_rewind) 335Zu einer Zeilennummer springen (sqlite_seek) 335Daten dekodieren (sqlite_udf_decode_binary) 336Daten kodieren (sqlite_udf_encode_binary) 336
9.5 Anwendungsbeispiele für SQLite 336
Counter 336
IP-Sperre 338
1 0 . Datenbankanbindung mit AdoDBund ODBC 345
10.1 Allgemeines zu AdoDB 346
10.2 AdoDB-Grundlagen 347
Der erste Test 347
10.3 Wichtige AdoDB-Funktionen 349
10.4 AdoDB-Anwendungen 350
Daten auslesen 350Daten einfügen 353
Daten exportieren 355Blätterfunktionen leicht gemacht 357Menüs erstellen 358
10.5 ODBC 359
10.6 ODBC-Funktionen von PHP 360
10.7 Workshop: ODBC-Funktionen in der Anwendung 361
Datenbank anlegen 361ODBC-Datenquelle definieren 362
Datensätze auslesen 363Datensätze einfügen 364
1 1 * Grafikprogrammierung 367
11.1 Allgemeines zu den grafischen Funktionen 370
Grafikformate 370Schriftarten 371Farben 372
11.2 Erstellen neuer Bilder 373
Senden eines Headers an den Browser 374
Erstellen einer Leinwand (Bild-Resources) ,375Zuweisen von Farben : 376Zeichnen, Füllen und Schreiben 378Löschen der Bild-Ressource 388
11.3 Arbeit mit vorhandenen Bildern 388
11.4 Workshop: Dynamische Diagramme einsetzen 391
Schritt 1: Lesen der Daten aus einer Textdatei 392Schritt 2: Vorkalkulationen 393
Schritt 3: Zeichnen des Diagramms 394
12« Flash-Programmierung 395
12.1 Erläuterungen zu den Flash-Funktionen und Ming 397
Senden eines Headers an den Browser 399
Erstellen und Konfigurieren eines neuen Flash-Movie-Objekts 399Erzeugen von Flash-Objekten „ 399Hinzufügen der fertigen Objekte zu dem Movie 400Ausgeben der Movies 400
12.2 Ming-Basisklasse: SWFMovie 401
12.3 Arbeiten mit Objekten 403
Erstellung von Formen: Klasse SWFShape() 403Arbeiten mit Texten: SWFText(), SWFTextField(), SWFFont() 407Grafiken einfügen: SWFBitmap() 414Schaltflächen erstellen: SWFButton() 415Filmsequenz erstellen: SWFSprite() 418Anzeige-Objekte: SWFDisplayltem() 420Arbeiten mit Farben: SWFFill(), SWFGradient() 424Formveränderung: SWFMorph() 427Aktionen zuweisen: SWFAction() 428
12.4 Mit Flash Formulare gestalten 434
1 3 * PDF-Funktionen 437
13.1 Allgemeines zu PDF-Dateien 438
13.2 PDF-Dokumente erzeugen 438
Informationen einfügen 439Notizen anzeigen 441
13.3 Texte in PDF-Dateien mit PHP schreiben 441
Text einfügen 441Textgestaltung 443
•Veraltete PDF-Funktionen mit pdf_set_value() ersetzen 444Lesezeichen 446
13.4 Zeichnen in PDF-Dateien 446
Linien zeichnen (pdfj ineto) 447Rechtecke zeichnen (pdf_rect) 448Kreise zeichnen 448Kurven zeichnen 449Farbangaben 450
13.5 Bilder in PDF-Dateien einfügen 451
13.6 Die FPDF-Klasse 452
Ein erstes Beispiel 452Wichtige Funktionen 453Erweiterte Funktionen 456
13.7 Praktisches Beispiel: Briefe online erstellen 458
Die Umsetzung des Briefprojekts 459
1 4 . PEAR 463
14.1 Funktionsweise von PEAR 464
Installation von PEAR 464PEAR-Pakete verwenden 465
14.2 PEAR::DB 466
Unterstützte Datenbanken und Features 466Verbindung zur Datenbank aufnehmen und schließen 467
SQL-Abfragen durchführen 468Vereinfachte Syntax 470Informationen einholen 472Datensätze eindeutig einfügen 474Execute/prepare 474
14.3 PEAR::Mail 475
E-Mails versenden 476E-Mails mit einem Dateianhang versenden : 477
ZZZ-~ ~ _ 1
14.4 XML 478
14.5 XML_SQL2XML 479
Vorbereitungen 479XML-Dateien erzeugen 480Tag-Namen erzeugen 481Arrays hinzufügen 482Mehrere Abfragen gleichzeitig 483
14.6 XMLJree 484Elemente erzeugen 484Elemente löschen 486XML-Dokumente einlesen 487Attribute hinzufügen 489XML-Strukturen als XML-Dateien speichern '. 490Datenbanken auslesen 491
14.7 HTMLJTable 493
Tabellen erzeugen 493Spalten und Reihen hinzufügen 495Tabellenkopf definieren 496
14.8 HTML_Page 498
Seitentitel und Meta-Tags definieren 499Stylesheets und Skripte einbinden 500
1 5 . OOP in PHP 503
15.1 Was bedeutet OOP, welche Vorteile bringt sie? 504
15.2 Programmierkonzepte 505
Vor- und Nachteile der objektorientierten Programmierung 506
15.3 Struktur von OOP in PHP 5 507
Rückgabeverhalten 508
Object Cloning 508Objektdereferenzierung 510Const 510Konstruktoren und Destruktoren 510Final 512Objekte löschen 513Statische Klassenvariablen 513Exeption Handling 514
15.4 Eigene Klassen definieren 514
Hallo, Welt! in OOP 514
15.5 Klassen und Objektfunktionen 516
15.6 Klassen vererben 521
15.7 Eine MySQL-Klasse 522
16« E-Mail-Anwendungen 527
16.1 Allgemeines zu E-Mail-Anwendungen 529
E-Mail unter Unix 530E-Mail unter Windows 531
E-Mail-Status abfragen 531
16.2 E-Mail-Funktion 532
16.3 Die Bibliothek von Heyes '. 536
16.4 Formulare automatisch auslesen 540
16.5 Workshop: ein Newsletter-Skript erstellen 541
1 7 . Entwicklung eines individuellenIntranets 547
17.1 Entwicklung des Konzepts 548
Die Features des Intranets 549
17.2 Die Datenbank 550
Stylesheets 552
17.3 Startseite und Navigation 553
17.4 Mitarbeiterverzeichnis 554
Vorhandene Abteilungen ansehen und neue anlegen 555Eine neue Abteilung anlegen 556Der Mitarbeiterbereich ". 557Einen neuen Mitarbeiter anlegen 560Den Mitarbeiter in die Datenbank eintragen 562Details zu den Mitarbeitern ansehen 563
17.5 To-do-Liste 565
Eine neue Aufgabe definieren 568Die neue Aufgabe speichern 571
Eine Aufgabe löschen 572Den Status einer Aufgabe verändern 573Die Statusänderungen speichern 574Kommentare einfügen 575Kommentare speichern 577Die Kommentare ansehen 578
J
1 8 . Entwicklung eines eigenen CMS 581
18.1 Vorabüberlegungen zum Konzept 582
18.2 Entwurf der Datenbankstruktur 584
Kategorien 584
Artikel 584Die Zugangsdaten 585
18.3 Aufbau eines Administrationssystems 586
Das Frameset 586Stylesheet 586Navigation 587Kategorien ^589Artikel-Navigation 591Einen neuen Artikel eingeben/Artikel bearbeiten 593Artikel speichern 598Artikel administrieren 600Artikel freigeben 603Artikel löschen 605
18.4 Das Webinterface 606
Das Frameset 606Die Navigation 607Artikelvorschau 609Artikel lesen 611
19« Templates in PHP 613
19.1 Grundlegendes zu Templates 614
19.2 FastTemplate 615
Ein erstes Beispiel 616Praktische Anwendung 618Content verteilen 620Tabellen dynamisch erzeugen 622
19.3 Smarty .' 625
Installation 625
Ein erstes Beispiel 626Allgemeine Syntax (für Designer) 627Eingebaute Funktionen 630Eigene Funktionen 631Allgemeine Syntax (für Programmierer) 635Variablen 636Methoden 637Caching 638Workshop: Smarty in der Praxis 640
2 0 . PHP und XML 647
20.1 XML-Grundlagen: Sprachelemente und Syntax 648
20.2 XML-Support in PHP 5 658
20.3 SimpleXML 660
20.4 XSLT 663
Objektbeschreibung: xsltProcessor 666
20.5 DOM API 668
Praktische Beispiele 669Beschreibung von Objekten und Methoden 679
20.6 Simple API für XML (SAX) ! 686
20.7 HTML-Tidy 692
So arbeitet HTML-Tidy 693HTML umwandeln 694Dateien reparieren 695
Dokumente konvertieren 696
2 1 * Parser - Anwendungen mit PHPumsetzen 699
21.1 Parsen als Quelle von Informationen 700
21.2 Bedeutung und Einsatz von RDF/RSS 700
Newsfeeds lesen 701
21.3 Eigene RSS-Dateien erstellen 701
21.4 RDF- und RSS-Dateien auslesen 704
Es geht auch einfacher 705
21.5 RSS und PEAR 707
21.6 Parsen fremder HTML-Seiten 708
Nur Überschriften auslesen 708Nur Meta-Tags auslesen 709Nur den Seitentitel auslesen 710Seiten ohne HTML-Tags auslesen 711Zeilenumbrüche mit PHP ersetzen 712Sonderzeichen umwandeln 714
2 2 . Programmierung eines eigenenWebmailers 715
22.1 Grundlegende POP/IMAP-Funktionen 716
22.2 Entwurf eines Webmailers : 729
22.3 Login 730
22.4 Postfachübersicht 731
22.5 Neue Nachricht erfassen 733
22.6 Detailansicht einer E-Mail 733
22.7 Löschen einer E-Mail 736
22.8 Weiterleiten einer E-Mail 736
22.9 Beantworten einer E-Mail 738
2 3 * Programmierung eines Fotoalbums 739
23.1 Die Features des Fotoalbums 740
23.2 Die Datenbank 741Die Zugangsdaten 742
23.3 Die Seitenstruktur 743Die CSS-Datei 743Die Frameset-Definition 744Die Navigation 745
23.4 Kategorien anlegen 747
23.5 Neue Bilder einfügen 749
23.6 Thumbnails erstellen 753
23.7 Bilder löschen 756
23.8 Bilder ansehen 759
23.9 Details zu den Bildern anzeigen 763
24« Programmierung eines Forums 765
24.1 Entwurf eines Konzepts 766
24.2 Datenbankdesign 767Stylesheets 769Die Zugangsdaten 769
I I
24.3 Neue Foren erstellen 770
24.4 Die Startseite 771
24.5 Einen neuen Beitrag erstellen 773
24.6 Beiträge speichern 775
24.7 Beiträge anzeigen 776
24.8 Auf Beiträge antworten 779
24.9 Antworten speichern 782
24.10 Alle Antworten anzeigen 783
2 5 * Suchmaschinen-Optimierung 787
25.1 Warum überhaupt optimieren? 788
25.2 Unfein: Spam-Methoden 789
Keyword-Tagging 789Unsichtbarer Text 790
Doorway-Pages 790
25.3 Im Zwielicht: Cloaking 791
25.4 Pagerank & Co 793
25.5 Überschätzte Meta-Tags 793Allgemeine Meta-Tags 794Seitenspezifische Meta-Tags 794
25.6 Unterschätzter Seitentitel 795
25.7 Vergessene Image- und Link-Titel 795
25.8 Die Robots.txt 795
25.9 Professionelle Ideen mit mod_rewrite 796
Mod_rewrite-Voraussetzungen 797Der Zusammenhang: .htaccess 797Automatisiert ersetzen 798
25.10 Automatische Seitenanmeldung mit PHP-Skripten 798
25.11 Suchmaschinen - Übersicht 799
Suchmaschinen 800Die wichtigen Verzeichnisse 800
25.12 Links zur Suchmaschinen-Optimierung 801
Anhang 803
Vordefinierte Variablen 803
HTTP Statuscodes 805
Reservierte Wörter in PHP 808
Apache- & PHP-Installations-FAQ 809
Sourceforge 810
Die GPL 812
Impressumpflicht 814
Die Apache-Konfiguration 817
Section 1: Global Environment 817Section 2: Main Server configuration 818Section 3: Virtual Hosts 820Den Apache testen mit ab 821
Schnelleinstieg: eigener Server & Putty 821
Putty schnell einsetzen 823Putty konfigurieren 825Window 826Sessions speichern und laden 827
Quicksyntax 827
Stichwortverzeichnis 843