An der VHS Braunschweig findet ab dem 03.06.2013 ein Bildungsurlaub zum Thema "Dynamische serverseitige Webseiten mit PHP & MySQL" aus der Zertifikatsreiche "CMS Online Designer" 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.03
Zeiten: Mo, 03.06. bis Fr, 07.06.13; jeweils von 08.30 - 16.00 Uhr
Prüfung: eine freiwillige Prüfung für das Modul II des "CMS Online Designer"-Zertifikats wurde besprochen und festgelegt auf ...
Termin: Mi., 26.06.2013, 17.00 Uhr Raum 2.03 (4 TN - Status Erstkorrektur: erledigt 01.07.2013)
Ich gratuliere allen TN an der Prüfung zum Bestehen! Ihr stolzer Trainer J. Brandes
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 ...
Mo., 03.06.13
Montag, 03.06.2013, 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 konfigurieren (Win + E): Dateiendungen, versteckte und Systemdateienen einblenden - Client-Server-Prinzip für WWW
WWW - World Wide Web Internet "Dienstleistung / Service / engl. Daemon - siehe angehängtes d bei httpd für Apache-SW"
Web-Client: genannt Browser, die über ein Protokoll (http, https) vom Server Daten erfragen (request)
Software: Microsoft Internet Explorer, Google Chrome, Mozilla Firefox, Apple Safari, Opera, ...
Web-Server: "Dienstleister"-Software - Apache ("A Patchy Server" - historisches Wortspiel für alten NCSA Webserver, der durch "Flicken" verbessert und dann eigenständig entwickelt wurde)
Alternative Software: IIS (Internet Information Server von Microsoft); nginx von Firma NGINX, in PHP 5.4 ist ein "Server" eingebaut (Link)!
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 (Bitte nicht in Produktionsumgebungen, sondern nur zu Testzwecken einsetzen)
in Seminar: aktuelle Version 1.8.1 mit Apache 2.4.3, MySQL 5.5.27, PHP 5.4.7, phpMyAdmin 3.5.2.2
Anm.: die Prüfungsumgebungen des CMSOD laufen alle mit Version 1.7.4 (PHP 5.3) - XAMPP (Inbetriebnahme)
XAMPP inC:\xampp\...entpacken - so sind keinerlei Konfigurationen vorzunehmen
Hinweis: beim Entpacken mit 7-Zip nur HauptverzeichnisC:\angeben!
bei abweichender "Installation" muss diesetup_xampp.bateinmalig 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\test(entspricht http://localhost/test/)
Wichtig: keine Umlaute, keine Sonderzeichen, Groß- und Kleinschreibung beachten (also Empfehlung: alles klein), keine Leerzeichen
Bei Anfrage von Verzeichnissen gibt XAMPP ein Inhaltsverzeichnis (Index) zurück - das ist auf Produktionssystem nicht wünschenswert; ansonsten sind Standarddokumente mit interner Reihenfolge in Konfigurations des Webservers hinterlegt (z.B. index.php index.html index.htm index.php3 ...) - phpinfo() - (Link php.net)
ein allererstes Testskript als Analyse-Skript mit Aufruf vonphpinfo()ohne Parameter - Kommentare in PHP
Einzeilig mit //, mehrzeilig mit /* ... */, spezielle Kommentartechniken mit automatischen Dokumentationserstellungen (siehe phpDoc)
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) - Notepad++ Tipps
Cursor in PHP-Technikwort und Online-Hilfe mit Alt + F1 aufrufen
Code-Completion (Codevervollständigung) mit Strg + Leertaste
Zoomfaktor/Schriftanzeigengröße mittels Strg + Rollrad-Maus oder Strg + "+" (oder -) auf Nummernblock
Für sauberes Syntax-Highlighting und Codecompletion benötigt Notepad++ Datei mit gespeichertem Dateiformat
Über Kontextmenü auf PHP-Datei den Editor Notepad++ als Standardprog zum Öffnen eingestellt - Intermezzo:
Zen-Coding (aktuell als Software Emmet) und
Firebug: Erweiterung des Firefox mit AddOn
Installation von Plugin Zen-Coding für Notepad++ (benötigt Python Unterstützung)
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; das werden wird aber nur erst mal ausprobieren und verstehen und dann wieder auf PHP konzentrieren - echo (Sprachkonstrukt zur Übergabe von Strings an Browser - Link php.net)
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; außerdem kann man Texte/String über den Operator "." aneinderheften oder über Kommas einfach nacheinander aufzählen - vordefinierte PHP-Konstanten ("magische" PHP-Konstanten - Link php.net)
__LINE__, __FILE__, PHP_VERSION, PHP_OS - $_SERVER[] (Link php.net)
Array für die Nutzung von Server-Variablen wie HTTP_USER_AGENT, SERVER_NAME oder PHP_SELF
Aufruf mittels $_SERVER['HTTP_USER_AGENT] - Arrays (erste Annäherung - Teil 01 - Funktion array Link php.net)
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")
Di., 04.06.13
Dienstag, 04.06.2013, 08.30 - 16.00 Uhr
- Rekapitulation, TN-Fragen (auch über den Tag verteilte Themen/Nachfragen)
Themen: Wiederholung zu XAMPP und Hinweis auf apachefriends-Webportal mit mehr Infos und Darstellungen zu XAMPP (Link XAMPP Windows);
Diskussion zu Einsatzgründen (Pros / Contras) von CMS-Systemen und die Eigenschaften von Web CMS;
insbesondere: Trennung von Inhalt & Layout/Design gefordert (beispielhafte Website: www.csszengarden.com), Einschätzung zu Selfhtml-Website (Link) und Hinweis auf die Original-Bücher und Downloads von Stefan Münz (Website "Webkompetenz" von Stefan Münz)
Wichtig: in unseren Beispielen häufig klassische/schnelle Formatanweisungen, die dann später mit CSS-Styles und CSS-Dateien umgesetzt werden müssen!
Suchmaschinen: Fachbegriffe SEO (Search Engine Optimization - Suchmaschinenoptimierung), SEF (Search Engine Friendly - Suchmaschinenfreundliche Links: aus index.php?inhalt=impressum wird impressum.html); Alternative Suchmaschinen: Yahoo, BING, Altavista, Metager (Infoportal RRZN Hannover)
Captcha: (Link Wikipedia) Ausnutzung von Formularen als "Spam-Schleuder" unterbinden, Beispielhafte Lösung/Empfehlung: reCAPTCHA (Link) - PHP-Hilfe nutzen
Aufruf der Online-Hilfe von php.net mittels Cursor in PHP-Wort und Alt + F1
Ü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 - Arrays (Teil 02)
Funktionsbeispiele für Arrays: next, list
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, "
"; } echo "
"; } - String-Funktionen (Link php.net)
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 Zeichenketten (Link sprintf php.net)
$anzahl = 5; $ort = 'Baum'; $format = 'Es sind %d Affen auf dem %s'; printf($format, $anzahl, $ort);
htmlspecialchars- 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; das funktioniert auch mit kompletten URL zu Online-Resourcen - Formulare
HTML-Tags:form(action, method),input(type, name), Methoden: POST vs. GET
POST: Übergaben im Hintergrund (unsichtbar), kein Protokollieren im Webserver, größere Datenmengen (nur eigentliche beschränkt durch php-Konfiguration - siehe post_max_size)
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; siehe auch Thema Captchas oben
Mi., 05.06.13
Mittwoch, 05.06.2013, 08.30 - 16.00 Uhr
- Rekapitulation, TN-Fragen
- Wiederholende Übungen zu den folgenden Themen
Arrays: verschachtelte Arrays definieren und auswerten; Ansprache der Werte über die Indizes:$staedte['Japan'][1] -auch an die Nutzung von print_r und var_dump zum analysieren denken
Formulare: sich selbst aufrufende Formulare; Nutzung von $PHP_SELF erzeugt Meldungen - also$_SERVER['PHP_SELF']nutzen - Dateihandling
File-Handle übernehmen mitfopen(Link php.net)und schließen mitfclose(zurückgeben/schließen bitte nicht vergessen!), Unterschiedliche Modi für den Dateizugriff (siehe fopen in Manual); weitere Funktionen:
file (und wieder erhalten wir ein Array!), file_exists (prüft Existenz einer Datei - siehe auch unten Diashow)
fgets (lässt sich automatisch mit while schleifen),
dir (Nutzung einer Verzeichnisklasse in PHP - erster Hinweis auf OOP - Objektorientierte Programmierung mit Aufrufen wie $folder->read() )
Anm.: Dateibehandlung auf WAMP-System sehr wahrscheinlich abweichend von Hostern (Linux mit anderen Datei-/Ordnerberechtigungen und Benutzerkonzept) - Kontrollstrukturen (Link php.net)
Nutzung von Verzweigungen mittels if (bzw. if ... then ... else), Schleifen mittels for und while
Anm: Bedingungen mit > (größer), < (kleiner), <> (ungleich), == (gleich), === (identisch, gleiche Typen), ... (Link Vergleichsoperatoren php.net)
Darstellung in Blockdiagramm nach Nassi-Shneiderman (Link Wikipedia); Verneinungen mit vorgestelltem Ausrufezeichen; Verknüpfung von mehreren Bedingungen mit && (beides muss gleichzeitig erfüllt sein - siehe Logische Operatoren Link php.net)
Hinweis zu Seminar: wir nutzen die Strukturen ohne ausführliche Syntax und Detailerläuterungen - hierzu bitte selber jeweils experimentieren und die Darstellungen der Seminarwoche nachvollziehen. Das PHP-Manual bietet ebenfalls ausführliche Beispiele zu den weiteren wichtigen Kontrollstrukturen (Homework: switch - siehe meine Anmerkungen im Seminar zu tief verschachtelten if-Konstruktionen)
Spezielles Konstrukt:die ('Es geht hier nicht weiter!');// der Ausdruck beendet die Ausführung des Programms - Diashow I (dynamische Website ohne DB-Anbindung)
beispielhaftes Skript nach M. Lubkowitz aus der Internet Professional (2003)
Grundidee: Skriptdiashow.phpliest Steuerdatei (bayern.csv) und ein HTML-Template ein und berechnet und ersetzt Platzhalter im Template
Übernahme der Steuerdaten für Diashow-Datei und Bildnummer mit GET-Technik: diashow.php?fn=bayern.csv&nr=3
genutzte Funktionen:file, implode, explode, list, str_replace
Speziell: Kurzform für if-Struktur$pic_nr = $_GET['nr'] ? $_GET['nr'] : 1;
// Template laden $output_html = implode('',file('template.htm')); // CSV-Datei einlesen $pics = file($_GET['fn']); // Nummer des anzuzeigenden Bildes festlegen $pic_nr = $_GET['nr'] ? $_GET['nr'] : 1; // Bilddatensatz laden list($filename,$description) = explode(';',$pics[$pic_nr-1]);Codeschnippsel aus Diashow; der Skriptablauf wurde im Seminar ausgiebig analysiert
- MySQL (Datenbankserver mysqld)
SQL Structured Query Language (viele Dialekte aber gemeinsame Basis), Client-Server Prinzip; Client in Konsole (Eingabeaufforderung)mysqlgezeigt, besser: Verwaltung mittels
PhpMyAdmin - bereits in XAMPP unterlocalhost/phpmyadminerreichbar (oder auch 127.0.0.1)
Konfigurationsdatei MySQL Server:my.ini(bzw.my.conf)
Hierarchie: Datenbankserver (localhost) - Datenbanken (cdcol) - Tabellen (cds) - Felder (titel, interpret, jahr, id - mit Datensätzen/Records)
Verbindung zu Datenbankserver: Hostname, Benutzername, Passwort - dann Datenbank wählen
Hinweis auf Anzeige von SQL-Kommandos in der Oberfläche für die ausgeführten Aktionen - so lässt sich viel Wissenswertes zur Abfragesprache SQL lernen und aufschnappen; Änderung des Anzeigedesigns; schnelle Navigation über Breadcrumb-Leiste oben
Do., 06.06.13
Donnerstag, 06.06.2013 08.30 - 16.00 Uhr
- Rekapitulation, TN-Fragen
- Praxis mit PhpMyAdmin (Online-Portal)
Umsetzung der Diashow nach "Lubkowitz" in MySQL-Technik (Buch: Webseiten programmieren und gestalten - Das umfassende Handbuch - AmazonLink)
Analyse der zwei Skripte: diashow.php, config.inc.php (Konfigurationsdaten passend setzen und DB-Name bestimmen)
Datenbank diashow anlegen, Tabellen ds_pictures und ds_categories anlegen und Felder mit Eigenschaften ausstatten nach Vorgaben
Nutzung von Prefix "ds_" (für Diashow) um bei weiteren Tabellen anderer DB-Projekte in derselben DB eine saubere Auflistung und Erkennung zu gewährleisten
Datentypen (Link dev.mysql.com Online Handbuch zu 5.1): int (integer), varchar (variable Zeichen), longblob (Binäre Objekt - z.B. Bilder), text (wie memo bei Access), datetime (Datum/Uhrzeit) , Primary Key (PK - Primärschlüssel), AutoIncrement (AI - automatisch hochzählendes Feld)
Indizes: ein Feld indizieren beauftragt die DB eine sortierten Zugriff auf die Tabelle vorzuhalten, damit geht das Suchen und sortierte Ausgeben schneller - ist aber auch immer ein Aufwand und benötigt Speicher
Tabellenformate (Engines) von aktuellen MySQL-DB-Servern: MyISAM, InnoDB (letztere mit DB-Techniken wie Transactions oder Referentieller Integrität; Hinweis bei manchen CMS gezeigt)
Dateien der MySQL-Datenbanken (bei XAMPP Windows): C:\xampp\mysql\data\diashow - Prinzip Dynamische Webseite
nach Vorbild "Diashows" - Kurzform: dynamische Positionen berechnen und in HTML-Template ersetzen lassen
Beispielprogrammierung verteilt; kleine Fingerübung (Programmierung) aber voll funktionsfähige Prinzipdarstellung einer Dynamischen Webseitenauslieferung (inklusive Navigation und Auswahl aus zwei HTML/CSS-Templates) mittels PHP und Beiträgen/Artikeln in Unterordnerstruktur - Diashow II (die mysql-Version)
Umsetzung und Endung der Konfigurationsdatei als .php-Datei beachten, sonst rutschen die Zugangsdaten zum Server in den Browser (Body oder HTML-Code)
Prozedurale Zugriffe auf die Datenbank, d.h. wir rufen für jede Aktion eine eigene PHP-MySQL-Funktion auf:
mysql_connect($host, $uid, $pwd) // Verbindung zum DB-Server mysql_select_db($db) // Auswahl (use) Datenbank mysql_query($sql) // Abfrage an DB senden
Analyse der Skriptzeilen mit Break-Point (Unterbrechungen im Skriptablauf mittels einfacher echo/print_r/die PHP-Zeilen
Im Diashow-Skript wird dann Funktion mysql_fetch_object genutzt - eine gute Darstellung mit prozeduraler MySQL Technik (ab morgen dann objektorientierte "verbesserte" MySQLI Technik) finden Sie in der PHP-Hilfe unter diesem Link - SQL (Structured Query Language - Online Dokumentation zu MySQL unter dev.mysql.com/doc)
In unseren PHP Skripten erstellen wir meist dynamische Strings, die dann mittels geeigneter PHP-MySQL-Aufrufe oder PHP-MySQLI-Objekte (siehe morgen) mit der DB genutzt werden; die vier wichtigen Grundfähigkeiten: Datensätze lesen, ändern, löschen, erstellen
verschiedene einfache Beispiele direkt in phpMyAdmin (über Schaltfläche SQL) direkt eingegeben und ausprobiert (Hinweis: bitte bei richtiger DB sein!)
Analyse der wichtigsten SQL-Kommandos aus der Diashow (morgen dann mehr...)
SELECT p.title, p.comment, c.name FROM ds_pictures p, ds_categories c WHERE (p.category = 1) and (p.category = c.id)Experimente ergeben wichtige Bedingung mit WHERE bestehend aus p.category=1 (bitte die Show mit der Nummer 1 auslesen) und gleichzeitig auch die Bedingung, dass die Ergebnisse in der Tabelle ds_categories im Feld "id" auch diese Nummer haben müssen; sonst ergeben sich "mutierte" Ergebnisse (Beispiel: in ds_pictures entsprechen 2 Datensätze der Bedingung category=1; aber wir haben drei Kategorien in Tabelle ds_categories - dann hätten wir 2 mal 3 gleich 6 Datensätze in unserem Ergebnis -> wir brauchen die Verbindung mit der Bedingung p.category=c.id !
- Cookies und Sessions (Link Cookies - Link Sessions auf php.net Online-Doku)
Cookies: Server legen Text/Infoseiten auf Client-Seite ab; Einsatzbeispiel: Infos zu Warenkorb, Merkzettel & Co; ID einer Session hinterlegen, Verwaltung mittels Superglobal$_COOKIE, Befehl (Link php.net):setcookie(); jeder Browser legt eigene Cookie-Verwaltung an; Beim Firefox erhalten Sie aktuell über die Einstellungen - Register Datenschutz - Link Cookies eine Übersicht, beim MS Internet Explorer findet man die Cookie-Textdateien in der Ordnerstruktur c:\Users\username\AppData\Roaming\Microsoft\Windows\Cookies
Sessions werden serverseitig verwaltet (siehe Infos bei phpinfo - session; Anmerkungen zu session.name - PHPSESSID bitte nicht verwechseln mit einer Session-ID), XAMPP--Session-Speicher-Pfad (session.save_path) aufC:\xampp\tmp, Verwaltung mittels Superglobal$_SESSION, Befehle:session_start(), session_destroy, $id = session_id() - Verteilung von Ausdrucken zu Übungen und Techniken
Fr., 07.06.13
Freitag, 07.06.2013, 08.30 - 16.00 Uhr
- Rekapitulation, TN-Fragen
Prüfung (Termin festgelegt: Mi., 26.06.2013, 17.00 Uhr Raum 2.03 - Musterprüfung s. u.) - Schwerpunkt: OOP (Objektorientierte Programmierung mit Anwendungsbeispiel "Kontakteverwaltung" nach C. Wenz)
erste Hinführung mittels Grafikausgaben (Code-Änderungen für __contstruct)
im Gegensatz zu prozeduralen Lösungen (einzelne Funktionen) hier effektivere Programmierungen und Nutzungen (z. B. Vererbungen) von Code, Eingeführt mit PHP 4 und verbessert/verändert mit PHP 5.x
Begriffe:new, class, extends, static, public, private, protected, function
Magische Methoden (Link php.net Hilfe - spezielle Bezeichner)__constructfür Kontstruktor und__destructfür Destruktor)
Vererbung von Eigenschaften (Variablen) und Methoden (s. Funktionen) mittelsextends(Elternklasse parent), Direktaufrufe mit::, Erzeugen neuer Instanzen mittels new, eigene Klasse mit$this, Aufruf von Eigenschaften/Methoden mit->
Empfehlungen: Handbuch PHP Kapitel Sprachreferenz - Klassen und Objekte (Link php.net) und bei Online/Offline-Portal selfphp.de Praxisbuch Kap. OOP - Kontakteverwaltung (Dyn. Anbindung MySQL-DB mittels PHP-OOP-Technik mysqli; C. Wenz Artikel in Internet Magazin 2008)
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 der Tabelle kontakt)
Daten auslesen:index.php(SQL:select)
Daten ändern:bearbeiten.php(SQL:update)
OOP/mysqli-Technik (prepared Statements): $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/Ausgaben: $db->error, Ausnahmebahandlung mittryundcatch(engl.: Exceptions)
Import des Tabellen-Dumpskontakte.sqlin die manuell erstellte DB kontakte
Empfehlung: Analyse der Skripte und Verinnerlichung der "Best Practises" (php.net - Hilfe zu prepare und Co)
Tipp: für das Verständnis erzeugter Objekte im Code einfach mal zwischendurch die Objekte mittels print_r (oder var_dump) in einem pre-Tag ausgeben und so analysieren, ggf. plus einem die("Testausgabe");
Hinweis auf Online-Portal mit Einführungen und Infos (Selbstlernportal www.selfphp.de mit Praxisbuch)
Programmierung der Beispielanwendung Kontakteverwaltung mit der API MySQLi stattMySQL; wichtig da ext/mysql ab PHP 5.5 deprecated; beachten das "i" macht den Unterschied (i wie improved - verbessert) - MySQL Dumps (Backups für Datenbanken / Tabellen - Importieren / Exportieren)
mit PhpMyAdmin DBs /Tabellen per Exportieren und Importieren Dateien mit und ohne Kompression (sql, 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 (upload_max_size, post_max_size), Laufzeit der PHP-Skripte (max_execution_time) für das Komprimieren und Dumpen Lösung: z.B. Skriptsammlung von www.mysqldumper.de - Kalender (Übung)
Datum- und Uhrzeitfunktionen:mktime, strftime, date
Setzen der Länderumgebung mittelssetlocale(LC_ALL, "deu");Alternativ: ita, fra, ... (Anm.: auf Windows anders als auf Linux-Systemen: Codes de_DE, en_US)
Übung/Hausaufgab: mit Schleife (Kontrollstruktur) "for" die Wiederholungen der Ausgabenkonstrukte für Monate vereinfachen auf eine Schleife - AMP - der XAMPP mit Konfigurationsdateien und Technik (Ports)
der Kreis der Seminarwoche schließt sich; Infosite auf Portal Apachefriends zu technischen Konfigurationen (Link); Erinnerung an wichtigste Konfigurationen in der php.ini; Tipp für Verbesserung bei Apache "Crashs" unter Windows: Eintrag der Zeile "ThreadStackSize 8388608" (Link) - Bereitstellung von umfangreichen Info-Materialien für TN (inklusive Musterprüfung),
Hinweis auf Linksammlung zum CMSOD, "Bibliothek" des Trainers für Bücher, Zeitschriften und Selbstlernmaterialien wie Herdt-Skripte - Tools der Woche (Wiederholung und Zusammenstellung)
Editor der Seminar-Woche: Notepad++ (als nicht installierbare Variante verfügbar, Hinweis auf PlugIns s. Emett/Zengarden, ...)
Alternative Editoren: PsPad, Synwrite, UltraEdit ($);
Alternative IDE (Integrated Development Envirenments - Entwicklungsumgebungen): Eclipse for PHP, Netbeans, Aptana Studio, Zend Studio ($)
MySQL-Client der Seminar-Woche: phpMyAdmin (die verbreitete Lösung bei Webhostern)
Alternative Clients: Heidmysql (nur für Windows); Oracle Workbench (Zusammenfassung vieler MySQL-Tools); mysql Befehlszeile (;-) - Prüfungsvorbereitung
Musterprüfung durcharbeiten, Lernzielkatalog <- Roter Faden (siehe Downloads) - TN-Unterlagen und -Bescheinigungen, Feedbackbögen, letzte TN-Fragen
- ToDo-Lists nach dem Seminar:
für Teilnehmer an Prüfung: Coding trainieren / Musterprüfung / Websites studieren
für Trainer: Beispiele der Woche als Downloads nachbereiten (erl.), OOP-Beispiel Kontakteverwaltung neu aufbereiten und ausführlich kommentieren
Ihr Trainer Joe Brandes


