An der VHS Braunschweig findet ab dem 11.06.2012 ein Bildungsurlaub zum Thema "Dynamische serverseitige Webseiten mit PHP & MySQL" statt. Anhand praktischer Beispiele wollen wir uns die aktuellen Techniken rund um PHP-Skripte und MySQL-Datenbanken erarbeiten.
Ort: Heydenstraße 2, VHS Braunschweig, Raum 2.11 (geändert!)
Zeiten: Mo, 11.06. bis Fr, 15.06.12; jeweils von 08.30 - 16.00 Uhr
Prüfung: Mi, 20.06.2012, 17.00 Uhr, Raum 2.11 (aktuell 2 TN - AWP04)
Status Erstkorrektur: erledigt - 21.06.2012 - ich gratuliere zu den bestandenen Prüfungen
Wir wünschen - wie immer - viel Spaß und Erfolg bei unseren Seminaren.
Ihr Trainer Joe Brandes - hier folgt unser "Roter Faden" für die Woche ...
Montag, 11.06.2012, 08.30 - 16.00 Uhr
- Orientierungsphase, Teilnehmer-Themen, Pausenregelung/Seminarablauf
Cobra-Shop: gesponserte SW für IT-TN bei VHS - Software- und Grundeinrichtung PCs
Packer: 7-Zip als Tool zum Packen/Entpacken
Browser: Mozilla Firefox, Chrome, Opera, Safari (IE-Alternativen und Developer-Tools)
Editor: Notepad++, PsPad (multifunktionaler Editor - PlugIn-Übersicht und Downloads)
Explorer (Win + E): Dateiendungen, versteckte und Systemdateienen einblenden - Client-Server-Prinzip für WWW
WWW - World Wide Web Internet "Dienstleistung"
Web-Client: genannt Browser, die über ein Protokoll (http, https) vom Server Daten erfragen (request)
Web-Server: "Dienstleister"-Software - Apache ("A Patchy Server" Wortspiel), IIS (Internet Information Server von Microsoft)
Zusammenspiel: "Kopiermaschine" - Client fragt nach Webdokument - Server bereitet Daten auf und kopiert an Client - AMP - Apache, MySQL, PHP
notwendige dynamische Technikumgebung für serverseitige Skriptsprachen (Perl, PHP, ASP, JSP, Python, Ruby on Rails, ...); auf Linux-Systemen dann also LAMP und Windows als WAMP bezeichnet
Anm.: rein statische Webseiten (HTML + CSS + JS) kämen testseitig auch ohne Server aus!
Empfehlung: XAMPP (hier aktuell: Version 1.7.7 mit Apache 2.2.21, MySQL 5.5.16, PHP 5.3.8, phpMyAdmin 3.4.5) - Webserver Apache mit PHP
1) als Apache-Modul - PHP wurde in Apache integriert
2) als CGI (common gateway interface) - PHP Interpreter liegt als "Programm-Lösung" in extra Verzeichnis - XAMPP (Inbetriebnahme)
landet XAMPP inC:\xampp\...so sind keinerlei Konfigurationen vorzunehmen
Hinweis: beim Entpacken mit 7-Zip nur HauptverzeichnisC:\angeben!
bei abweichender "Installation" muss die setup_xampp.bat einmalig ausgeführt werden
Start der Dienste Apache und MySQL über das XAMPP Control Center (xampp-control.exe)
Meldungen der Windows 7 Firewall betreffen nur die Zugriffe vom Netz (außerhalb localhost) - Web-Dokumente-Ordner
XAMPP-Verzeichnis: c:\xampp\htdocs (entspricht der Request-URL: http://localhost/)
Übungsordner: c:\xampp\htdocs\uebungen (entspricht http://localhost/uebungen/)
Wichtig: keine Umlaute, keine Sonderzeichen, Groß- und Kleinschreibung beachten (also Empfehlung: alles klein), keine Leerzeichen - Kommentare in PHP
Einzeilig mit //, mehrzeilig mit /* ... */
Nutzen zum Auskommentieren von Zeilen - also Testzwecken - oder natürlich der Erläuterung von Code im Skript (wichtig für spätere Nachvollziehbarkeit und Analyse/Anpassung) - Intermezzo: Zen-Coding
Installation von Plugin Zen-Coding für Notepad++
erste Beispiele (ausführlichere Beispiele: Link, Link)
html:5 (Strg+Alt+Enter) erzeugt komplettes HTML5-Gerüst
html:xt - erzeugt XHTML 1.0 transitional - Mischung von HTML und PHP
letztendlich wollen wir natürlich komplette Webseiten an den Client ausliefern - also benötigen wir HTML-Gerüste und bringen dort unsere PHP-Skriptzeilen unter - echo
Ausgabe von Text und Variablen (beginnen immer mit $)
bei Verwendung von doppelten Anführungszeichen (double quotes) werden integrierte Variablen in der Ausgabe ausgewertet
die einfachen Anführungszeichen (single quotes) erlauben die Verschachtelung mit doppelten Anführungszeichen (siehe HTML-Code class="top" oder ähnliche Syntax - vordefinierte PHP-Konstanten ("magische" PHP-Konstanten)
__LINE__, __FILE__, PHP_VERSION, PHP_OS - Informationsportale
Apache Webserver - Apache Software Foundation mit Projekt HTTP Webserver (httpd - d für daemon als Unix/Linux Fachbegriff für Hintergrunddienst/Service)
PHP - serverseitige Skriptsprache
Übung: Bereitstellung der PHP-Hilfe als CHM-Datei - wichtig: CHM-Dateien müssen seit Windows XP SP2 erst bei Kontextmenü "zugelassen" werden
Link zu deutschen PHP-Dokus
Dienstag, 12.06.2012, 08.30 - 16.00 Uhr
- Rekapitulation, TN-Fragen,
Interesse und Planung freiwillige Prüfung - PHP-Hilfe nutzen
Aufruf der Online-Hilfe von php.net mittels Cursor in PHP-Wort und Alt + F1
Hilfe für PHP in Notepad++ mittels PlugIn "Language Help" nachrüsten
(Install-Problem für PlugIn nachrecherchieren - Übungen "Trainer"
durchnummerierte Übungen über das Netz bereit gestellt, erste Probleme der "alten" Skripte unter der modernen PHP-Umgebung 5.3.8 analysiert
Anm. Übungen 001 - 006:
Datumsfunktion date(), Kommentare, Funktionen mit function, Klammern (Runde / Geschweifte), Präkrement, Postkrement, Zuweisung by value und by reference ($a = &$b), Datentypen (settype, gettype), NULL, S_SERVER[], __LINE__, __FILE__, PHP_VERSION, PHP_OS, TRUE, FALSE, $GLOBALS - Superglobale Arrays
$_SERVER, S_COOKIE, $_GET, $_POST, S_SESSION, $GLOBALS
früher: $SERVER_NAME oder Array HTTP_SERVER_VARS
heute: $_SERVER['SERVER_NAME'] - Notice: (Anzeigen im Browser)
Anmerkungen des PHP-Parsers gemäß eingestelltem Fehler/Nachrichten-Levels in der php.ini
error_reporting = E_ALL | E_STRICT (Development Value - gewechselt mit)
error_reporting = E_ALL & ~E_NOTICE (Default Value) - Gültigkeit / Sichtbarkeit von Variablen
Tests mit Variablen innerhalb / außerhalb von Funktionen und dem Superglobalen Array $GLOBALS, Variablen-Deklarationen: public, private, global, protected
Anm.: keine Vertiefung der technischen Backgrounds! - Arrays
2-dimensionale Tabellen mit Spalte für Index und Spalte für Inhalt/Wert, bei numerischen Arrays laufen die Indizes von 0,1,2,... ,bei assoziativen Arrays (Hash) werden Begriffe/Bezeichner möglich, Definition von Array mit Hilfe von PHP-Aufruf array(...), Zuweisungen mittels "=>"
Beispiel (assoz. A.):$arr = array( "Nr" => 12345, "Name" => "Meier", ...)
Beispiel (num. A.):$arr2 = array( "Auto", "Bahn", "Fahrrad")
Arrays mittelsprint_roder auchvar_dumpmit pre-Tag ausgeben, damit sie besser lesbar werden.
Ausgabe mit PHP-Befehlforeach(mehrdimensionale Arrays mittels Verschachtelungen von Arrays)
// Ausgabe der Datensätze mit verschachtelten Arrays foreach($kontakt as $kk => $details) { foreach($details as $k => $elem) { echo $kk, ": ", $k, ": ", $elem, "<br>"; } echo "<br>"; } - String-Funktionen (012, 013)
addslashes, stripslashes- Anführungszeichen sequenzieren (sonst DB-Probleme möglich)explode, implode- Auseinanderbauen und zusammensetzen von Zeichenkettensubstring- Beispiel für Zeichenkettenmanipulierung (siehe auch morgen str_replace)print, printf, sprintf- Ausgabe formatierter, intelligenter Zeichenkettenhtmlspecialchars- macht aus Tags - also spitzen Klammern die HTML-Sonderzeichen und "entschärft" somit Textketten, siehe später Formular-Behandlungrawurlencode- ersetzt in Strings für URLs die Leer- und Sonderzeichenget_meta_tags- liest META-Daten aus head von HTML-Dokumenten aus
Mittwoch, 13.06.2012, 08.30 - 16.00 Uhr
- Rekap, TN-Fragen (s. nä. Punkt)
- .htaccess und mod_rewrite
Die Datei .htaccess als Apache "Steuer-/Konfigurationsdatei" (Alternativ:IIS mit web.config)
Einsatzbeispiele:
1) zusammen mit .htpasswd für "Geschützte Verzeichnisse"
2) zusammen mit mod_rewrite (Apache-Modul) für Suchmaschinenfreundliche (SEF) bzw. Suchmaschinenoptimierte (SEO) URLs
3) manuelle Änderung von PHP-Konfiguration (siehe Spalte Local Value von phpinfo), wird bei Hostern wenig und selten zugelassen
Anm.: Dateien mit . (Punkt) am Anfang lassen sich mit Windows schwer erstellen - besser direkt per Editor erzeugen und speichern - Funktionen (prozedurale Lösungen)
Beispiele mit Mittelwert und Fakultät (rekursive Funktion), Übergaben mittels Wert und mittels Referenz, Übung zeigt Anmerkungen für Var-Übergaben (PHP-Parameter:allow_call_time_pass_reference)
Anm.: Umstellung der PHP-Umgebung auf "Produktions-Niveau" und PHP 5.3 Deklarationen (umfangreichere Beispiele!) gemäß aktueller Literatur und Help-Manual PHP (.chm-Datei) - Hosting
Shared Hosting - Standard-Angebote der üblichen Hoster (1und1, Strato, ...), ein Server wird vielen Kunden mit derselben Konfigurationsumgebung und Technik zur Verfügung gestellt! Meist Linux-Betriebssystem - vereinzelt auch Windows
Server - als Virtual Server (also Virtuelle Machinen) oder Root-Server (auch Dedicated Server), Bereitstellung einer eigenen Maschine mit den verschiedenen Servern (Web-, DB-, ...), müssen vom Kunden eigenverantwortlich konfiguriert und aktualisiert werden! - Dateihandling
File-Handle übernehmen mitfopenund schließen mitfclose(zurückgeben/schließen bitte nicht vergessen!), Unterschiedliche Modi für den Dateizugriff (siehe fopen in Manual)
Anm.: Dateibehandlung auf WAMP-System sehr wahrscheinlich abweichend von Hostern (Linux mit anderen Datei-/Ordnerberechtigungen und Benutzerkonzept) - Formulare
HTML-Tags:form(action, method),input(type, name), Methoden: POST vs. GET
POST: Übergaben im Hintergrund (unsichtbar), kein Protokollieren im Webserver
GET: Daten lassen sich als URL speichern (Bookmark, Link)
seit PHP 5.3 keine übergebenen Variablen "wie selbstverständlich" (also global!) verfügbar
es gibt bitte keine PHP-Konfigurationregister_globals = Onmehr!
Übergabe der Variablen mittels $_GET['name'] bzw. $_POST['name'] (s.o. Superglobals)
Speziell: Bereinigung von Eingaben mittels Funktion htmlspecialchars - Diashow I (dynamische Website ohne DB-Anbindung)
beispielhaftes Skript nach M. Lubkowitz aus der Internet Professional
Grundidee: Skriptdiashow.phpliest Steuerdatei (bayern.csv) und ein HTML-Template ein und berechnet und ersetzt Platzhalter im Template
genutzte Funktionen:file, implode, explode, list, str_replace
Speziell: Kurzform für if-Struktur$pic_nr = $_GET['nr'] ? $_GET['nr'] : 1; - Kalender (Übung)
Datum- und Uhrzeitfunktionen:mktime, strftime, date
Setzen der Länderumgebung mittelssetlocale(LC_ALL, "German_Germany");
(Anm.: auf Windows anders als auf Linux-Systemen)
Übung mit Schleife (Kontrollstruktur) for
Donnerstag, 14.06.2012, 08.30 - 16.00 Uhr
- Rekap, TN-Fragen, Prüfung (Anmeldung im Netz notwendig - Kursnummer AWP04)
- MySQL (Datenbankserver mysqld)
SQL Structured Query Language (viele Dialekte aber gemeinsame Basis), Client-Server Prinzip; Client in Konsolemysqlgezeigt, besser: Verwaltung mittels PhpMyAdmin - bereits in XAMPP unterlocalhost/phpmyadminerreichbar, Konfigurationsdatei:my.ini(bzw.my.conf)
Hierarchie: Datenbankserver - Datenbanken - Tabellen - Felder
Verbindung zu Datenbankserver: Hostname, Benutzername, Passwort - dann Datenbank wählen
Integration in PHP mittels mysql-Bibliothek (siehe php.ini) bzw. mysqli (improved - verbesserte Zugriffstechnik: mehr Speed, Sicherheit, Fehlerbehandlungen und OOP-Techniken viel umfangreicher) - Praxis mit PhpMyAdmin
Datenbank anlegen, Tabellen anlegen und Felder mit Eigenschaften ausstatten
Datentypen: int (integer), varchar (variable Zeichen), longblob (Binäre Objekt - z.B. Bilder), text (wie memo bei Access), datetime (Datum/Uhrzeit), Import von SQL-Dump (SQL-Sicherungsdatei), Primary Key (PK - Primärschlüssel), AutoIncrement (AI - automatisch hochzählendes Feld) - Diashow II (jetzt: Dynamische Website mit MySQL-Anbindung)
DB und Tabellen mit Feldern erstellt, Konfigurations-Include-Skript angepasst (wichtig: als PHP-Skript schreiben und mit .php auf Server legen!), alte Servervariable$SELF_PHPgegen$_SERVER['SELF_PHP']getauscht - SQL-Query
Tests direkt mit PhpMyAdmin möglich, dort werden die SQL-Codes direkt angegeben und sind auch dort einfügbar; Beispiel SQL-String aus Diashow mit MySQL:
SELECT p.title, p.comment, c.name FROM ds_pictures p, ds_categories c WHERE (p.category = '.$show_nr.') AND (p.category = c.id) ORDER BY p.id ASC LIMIT '.($pic_nr-1).',1 - Datenbanktheorie
Normalisierung für Tabellen - Erstellung von Normalformen, Relationen zwischen Tabellen (RDBM - Relationales DB Management), Ziel: Vermeidung von Redundanzen bei der Eingabe und Inkonsistenzen im Datenbestand, Beispiel: Büchertabellen nach M. Kofler - OOP (Objekt Orientierte Programmierung)
im Gegensatz zu prozeduralen Lösungen (einzelne Funktionen) hier effektivere Programmierungen und Nutzungen von Code, Eingeführt mit PHP 4 und verbessert/verändert mit PHP 5.x
Begriffe:new, class, extends, var, static, public, protected, function
spezielle Bezeichner__constructfür Kontstruktor und__destructfür Destruktor)
Vererbung von Eigenschaften und Methoden (s. Funktionen) mittelsextends(Elternklasse parent), Direktaufrufe mit::, Erzeugen neuer Instanzen mittels new, eigene Klasse mit$this, Aufruf von Eigenschaften/Methoden mit->
Empfehlung: Handbuch PHP Kapitel Sprachreferenz - Klassen und Objekte - Kontakverwaltung I (Dyn. Anbindung MySQL-DB mittels PHP-OOP-Technik mysqli)
Einführung in ein Standard-Beispiel (Best Practise) einer PHP/OOP/mysqli-Lösung, Bereitstellung der Grundskripte und Erläuterung der Bereitstellung der notwendigen DB und Tabelle (SQL-Dump-Import)
Ziel: Anlegen (insert), Ändern (update), Auslesen (select) und Löschen (delete) von Datensätzen
Freitag, 15.06.2012, 08.30 - 16.00 Uhr
- Rekap, TN-Fragen
- Kontaktverwaltung II (Forts. Übung und Vertiefung der Techniken mysqli/OOP)
Daten auslesen:index.php(SQL:select
Daten ändern:bearbeiten.php(SQL:update
OOP/mysqli-Technik: $sql=db->prepare, $sql->bind_param, $sql->execute
Daten einfügen:neu.php(SQL:insert
Daten löschen:loeschen.php(SQL:delete
mit Abfrage zur Sicherung des Löschvorgangs
Fehlerbehandlung: $db->error, Ausnahmebahandlung mittryundcatch(engl.: Exceptions)
Import des Tabellen-Dumpskontakte.sqlin die manuell erstellte DB kontakte
Verbesserung: Abfangen leerer Formularfelder mit Bedingung !empty($_POST['vorname'])
Empfehlung: Analyse der Skripte und Verinnerlichung der "Best Pracitses"
Tipp: für das Verständnis erzeugter Objekte im Code einfach mal zwischendurch die Objekte mittels print_r in einem pre-Tag ausgeben und so analysieren, ggf. plus einem die("Testausgabe"); - Cookies und Sessions
Server legen Text/Infoseiten auf Client-Seite ab; Einsatzbeispiel: Infos zu Warenkorb, Merkzettel & Co; ID einer Session hinterlegen, Verwaltung mittels Superglobal$_SESSION, Befehl:setcookie(); jeder Browser legt eigene Cookie-Verwaltung an
Sessions werden serverseitig verwaltet (siehe Infos bei phpinfo - session), XAMPP--Session-Speicher-Pfad (session.save_path) aufC:\xampp\tmp, Verwaltung mittels Superglobal$_SESSION, Befehle:session_start(), session_destroy - MySQL Dumps (Backups für Datenbanken / Tabellen)
mit PhpMyAdmin DBs /Tabellen per Exportieren und Importieren Dateien mit und ohne Kompression (zip, bz2), Hierarchie beachten: Datenbankserver - Datenbank - Tabellen, Optionen beim Export, SQL-Export-Datei analysiert und SQL-Befehle analysiert:create database, create table, insert into...
Anm.: beachten Sie, dass die meisten Hoster nicht das zurücksichern (importieren) ganzer Datenbanken erlauben, dann sollten Sie auf Tabellen-Ebene "dumpen"
Probleme: Beschränkung der Dump-Größe, Laufzeit der PHP-Skripte für das Komprimieren und Dumpen (max_execution_time) - Lösung: z.B. Skriptsammlung von www.mysqldumper.de - MySQL-Tool Workbench
von MySQL/AB (heute Oracle): MySQL Workbench (vormals MySQL Administrator) für die Profi-Verwaltung von einem oder auch vielen MySQL-Servern; Anm: benötigt den MySQL-Server als Dienst und verlangt die Installation von MS Visual C und das aktuellste MS Dot.Net-Framework - Profesionelle Editoren
die kostenlosen Varianten basieren meist auf Eclipse: Aptana Studio, NetBeans
Kaufvariante: Zend Studio
Debugging: XDebug, Zend Debugger (für professionelle Entwicklungen) - Prüfungsvorbereitung
Musterprüfung, Lernzielkatalog <- Roter Faden - letzte TN-Fragen, Seminarunterlagen/BU-Sammlung für TN, Feedback-Bögen, TN-Unterlagen
- Download für LZK/BWR und Musterprüfung bereitgestellt:
Vielen Dank für die positiven Feedbacks und Ihre Frage nach weitergehenden Folgeseminaren (bitte Mail an mich, damit wir das gut organisieren können - Danke)
Ihr Trainer Joe Brandes