An der VHS Braunschweig findet ab dem 02.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.11
Zeiten: Mo, 02.06. bis Fr, 06.06.14; jeweils von 08.30 - 16.00 Uhr
Prüfung: eine freiwillige Prüfung für das Modul II des "CMS Online Designer"-Zertifikats wird mit den TN absprochen
Termin: 09.07.2014, 18.00 Uhr, Raum 2.11 - 2 TN letztendlich mit Prüfungen - ich gratuliere beiden zu weiteren bestandenen Prüfungen im Rahmen unseres CMS Online Designer Zertifikats
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., 02.06.14
Montag, 02.06.2014, 08.30 - 16.00 Uhr
- Orientierungsphase, Teilnehmer-Themen, Pausenregelung/Seminarablauf
Cobra-Shop: gesponserte SW für IT-TN bei VHS; Buchempfehlung: Hinweis und ggf. Koordination von Buchbestellung - Software- und Grundeinrichtung PCs
Reborn-Card der TN-PCs beachten: wir arbeiten in den BU-Profilen ohne Rücksetzung von Laufwerk C:
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 nicht mehr Ausblenden lassen (gerne auch: 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: ich stelle meinen Teilnehmern (TN) eine aktuelle Version 1.8.3-4 mit Apache 2.4.9, MySQL 5.6.16, PHP 5.5.11, phpMyAdmin 4.1.12
Anm.: die momentanen Prüfungsumgebungen des CMSOD laufen alle mit Version 1.7.4 (PHP 5.3) - XAMPP (Inbetriebnahme der Spezialedition für den CMSOD)
Selbstentpackendes XAMPP-Archiv (.exe) inC:\xampp-cmsod\...
entpacken - so sind keinerlei Konfigurationen vorzunehmen
bei abweichendem "Installationpfad" muss diesetup_xampp.bat
einmalig ausgeführt werden
Start der Dienste Apache und MySQL über das XAMPP Control Center (xampp-control.exe in xampp-cmsod-Ordner)
Meldungen der Windows 7 Firewall betreffen nur die Zugriffe vom Netz (außerhalb localhost) - Web-Dokumente-Ordner
XAMPP-Verzeichnis: c:\xampp-cmsod\htdocs (entspricht der Request-URL: http://localhost/)
Übungsordner:C:\xampp-cmsod\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 - PHP-Hilfe nutzen
Aufruf der Online-Hilfe von PHP-Webportal 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 - 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 - date (Datumsfunktion - Link php.net)
Recherche mit PHP-Hilfe; Übung mit Augabe (echo) des aktuellen Datums in der Form "2014-06-02"
$heute = date("Y-m-d"); // gibt das gewünschte Datum und Format aus
Hinweis: DATETIME Formatierung mittels Formatierungsstring "Y-m-d H:i:s"; später für MySQL-Datenbank wichtig! - $_SERVER[] (Link php.net)
Superglobales 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(...)
Di., 03.06.14
Dienstag, 03.06.2014, 08.30 - 16.00 Uhr
- Rekapitulation, TN-Fragen
- AMP (eine Wiederholung und technische Vertiefung)
Kombinationen mit L - Linux (klassisches LAMP-System), W - Windows oder M - MacOS
Wichtig: im Internet (bei Ihrem Hoster) finden Sie "immer" LAMP-Systeme vor
beim Begriff "Server" immer gleich auch an "Client" denken (siehe Client-/Server-Prinzip - eine Kopiermaschine)
Infos zum XAMPP für Windows System: siehe Textdokumente im XAMPP-Hauptordner und auf www.apachefriends.org
Empfehlung: für Textdokumente besser Notepad++ als Standardeditor einrichten (statt Windows Notepad - Editor)
AMP | A - Apache | M - MySQL | P - PHP |
Technik | Web-Server | Datenbank-Server | serverseitige Skriptsprache |
Web (URL) | httpd.apache.org (Projekt Apache Foundation) |
www.mysql.com (bzw. .de) |
www.php.net (bzw. de.php.net) |
Konfigurationen | httpd.conf | my.ini (bzw. my.cnf) |
php.ini |
- Zeichencodierungen
die IT-Systeme kennen nur 0 und 1, also verwendet man "Tabellen", die 0/1-Kombinationen dann Zeichen zuordnen
Beispiele: ASCII, ANSI, ISO-8859, UTF-8 (und andere UTF-Varianten; auch als Unicode bezeichnet); nur in 7 Bit also den ersten 128 Zeichen sind diese "Nachschlagetabellen" gleich - dann gibt es Abweichungen; Beispiel unter Windows gezeigt: mit Windows Notepad (ANSI) Datei mit deutschen Umlauten erstellt und dann in der Eingabeaufforderung (cmd-Befehl type - ASCII) angezeigt - Emmet (Notepad++ aufrüsten; Website: www.emmet.io ;früher: Zen Coding)
die ultimative Unterstützung für das HTML-Editieren, Verfügbar für nahezu alle Editoren, Emmet-Syntax (Link)
Notepad++: Plugin Emmet - inkl. Python (Erweiterung) installiert, erste Beispiele (ausführlichere ZenCoding-Beispiele: Link, Link)
Tastenkombination für Emmet "Expand Abbreviation - Abkürzungen ausführen/expandieren" konfiguriert mittels Menü Ausführen - Shortcut ändern auf "Umschalten + Alt + Enter" (die Standardkombinatino erzeugt neue Zeile oberhalb)
Emmet Abkürzung | Einsatz - Ergebniscode |
html:5 | erzeugt komplettes HTML5-Gerüst inklusive richtigen Charactersettings "UTF-8" per meta-Tag |
html:xt | erzeugt XHTML 1.0 transitional |
ul>li*5 ul>li.stil*5 ul>li.stil-$$*5 |
erzeugt verschiedene unsortierte Listen! das funktioniert natürlich auch mit ol-Tags (sortierte Listen) |
table>.row*3>.col*5 | erzeugt Tabellengerüst mit 3 Zeilen und 5 Spalten inklusive Klasse "row" für tr-Tags und Klasse "col" für td-Tags |
- Arrays (Praxis - Teil 02)
Praktische Beispiel und Übungen:
Beispiel (assoziatives Array):$arr = array( "Nr" => 12345, "Name" => "Meier", ...)
Beispiel (nummerisches Array):$arr2 = array( "Auto", "Bahn", "Fahrrad")
Definierten Wert mit Klammerschreibungen: $arr['Nr'] bzw. $arr2[2]
Funktion count($arr) ergibt die Anzahl von Werten im Array
Neuen Wert in nummerischem Array einfügen: $arr[] = "Flugzeug"
Ausgabe (zu Testzwecken) von Arrays mit Funktionen print_r und var_dump (Tipp: Einschachtelung in pre-Tags für formatierte Ausgabe)
Automatische Schleifenfunktion für das Handling von Arrays: foreach
Zuweisung von Werten aus Arrays zu eigenen Variablen: list ( $a, $b, $c) = $arr
Mehrdimensioale Array mittels Verschachtelung von Array - dann mittels $laender ['Deutschland'] [0] - Escape-Sequenzen (Link php.net)
Kennungen im PHP-Code für Spezialformate und Nutzung von sonst unerlaubten Zeichen
\n - Zeilenumbruch (im Quellcode)
\t - Tabulatorsprung (im Quellcode)
\" - Nutzung von doppelten Anführungszeichen; z.B. für Zuweisungnen wie class = "styling" - Kontrollstrukturen (Link php.net)
Nutzung von Verzweigungen mittels if (bzw. if ... then ... else) und switch,
Schleifen mittels for und while bzw. do...while, Verschachtelungen von for-Schleifen
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.
Mi., 04.06.14
Mittwoch, 04.06.2014, 08.30 - 16.00 Uhr
- Rekapitulation, TN-Fragen
- Browser-Analyse für HTML, CSS, JS
beim Microsoft Internet Explorer mittels F12 Aufruf der Entwicklertool
bei "fast" allen anderen Browsern mittels "Umschalten + Strg + I" den Code Inspektor aktivieren
Tipp: beim Firefox das Add-On Firebug und dessen Techniken nutzen - include vs require
Einfügen von externen PHP-Skripten (siehe auch Ordern wie /inc oder auch /lib) zum wiederholten Verwenden
bei require ist ein erfolgreiches Einbinden zwingend nötig, sonst bricht das Skript ab!
Anm.: von beiden gibt es auch die Varianten include_once bzw. require_once - 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: dort - also beim Hoste - Codes wie de_DE, en_US
Übung: mit Schleife (Kontrollstruktur) "for" die Wiederholungen der Ausgabenkonstrukte für Monate vereinfachen auf eine Schleife - String-Funktionen (Link php.net)
addslashes, stripslashes
- Anführungszeichen sequenzieren (sonst DB-Probleme möglich)explode, implode
- Auseinanderbauen und zusammensetzen von Zeichenkettensubstring, str_replace
- Beispiele für Zeichenkettenmanipulierung (siehe auch str_replace für Diashow / dynamische Websites)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-Behandlungnl2br
- gibt Texte inklusive Zeilenumbrüchen an Browserrawurlencode
- 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 - 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) - 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 keine PHP-Konfigurationregister_globals = On
mehr!
Übergabe der Variablen mittels $_GET['name'] bzw. $_POST['name'] (s. Handbuch Superglobals)
Speziell: Bereinigung von Eingaben mittels Funktion htmlspecialchars;
siehe auch Thema Captchas und Formular-Validierungen (haben hier keinen Platz)
Wichtig: sich selbst aufrufende Formulare; Nutzung von PHP_SELF - also$_SERVER['PHP_SELF']
nutzen - Diashow I (dynamische Website ohne DB-Anbindung)
beispielhaftes Skript nach M. Lubkowitz aus der Internet Professional (2003)
Grundidee: Skriptdiashow.php
liest 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;
odeschnippsel aus Diashow; der Skriptablauf wird morgen ausgiebig analysiert
// 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]);
C - MySQL (Datenbankserver mysqld)
SQL Structured Query Language (viele Dialekte aber gemeinsame Basis), Client-Server Prinzip; Client in Konsole (Eingabeaufforderung)mysql
gezeigt (Kommandozeilentool in cmd; bei XAMPP in XAMPP-Ordner\mysql\bin), Beispielzeilen:
SHOW DATABASES; USE cdcol; SHOW TABLES; SELECT * FROM cds;
besser natürlich: Verwaltung mittels:
PhpMyAdmin - bereits in XAMPP unterlocalhost/phpmyadmin
erreichbar (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., 05.06.14
Donnerstag, 05.06.2014, 08.30 - 16.00 Uhr
- Rekapitulation, TN-Fragen
- Diashow II (die mysql-Version)
ausführliche (zeilenweise) Erläuterungen des Quellcodes und der genutzten PHP-Techniken (file, implode, list, explode, str_replace, Arraytechniken)
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
Analyse der Skriptzeilen mit Break-Point (Unterbrechungen im Skriptablauf mittels einfacher echo/print_r/die PHP-Zeilen
Wichtig: in diesem in die Jahre gekommenen Skripte werden "Depracated"-Funktionen genutzt - besser die mysqli (mysql improved) benutzen - Fehleranzeigen (php.ini konfigurieren)
Anzeige von Fehlern per php.ini (Zeile 552: display_errrors = Off) auf "Aus" stellen und nicht vergessen den Webserver neu zu starten, um die geänderte Konfiguration neu einlesen zu lassen
Kontrolle mittels Anzeige einer phpinfo.php (XAMPP z.B.: localhost/phpinfo.php)
weitere erwähnenswerte Konfigurationswerte:
Server API: Apache Handler - alternativ Lösungen als Ausführungen von PHP in CGI-Schnittstellen (Programmverzeichniss - Common Gateway Interfaces bzw. FastCGI)
Loaded Configuration File: Pfad und Name der PHP-Konfiguraitonsdatei (hier: C:\xampp-cmsod\php\php.ini)
Loaded Modules: Module für den Apache - besonders erwähnt mod_rewrite (später für gute URLS: SEF)
Core (PHP): max_execution_time
allgemein: alle Rubriken zur Kontrolle nutzen - Beispiel: mysqli gecheckt; Session (siehe session.save_path s.u.) - Datenbankzugriff
DB konnektieren; nötige Infos: Servername (hostname), Benutzer (username), Passwort; DB auswählen
DB Hierarchien: DB Server - Datenbank - Tabellen - Felder/Spalten mit Inhalten
meist: Bereistellung der Zugangsdaten mittels include-Datei (bitte immer als php-Datei speichern) - Operatoren
Logische Operatoren (Link): and, or, && (beide müssen true sein), ! (nicht - bzw. verneinen)
Vergleichsoperatoren (Link - für Bedingungen): == (oder sogar ===), <> (ungleich), <=, >= (kleiner/größer gleich) - 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
Dateien der MySQL-Datenbanken (bei XAMPP Windows): C:\xampp\mysql\data\diashow - 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()
- OOP (Objektorientierte Programmierung - Teil I)
besser als prozedurale Techniken (Funktionen, Prozeduren), da man Code intelligent und effektiv weiter nutzen kann (Stichwort: Vererbungen)
eine erste Heranführung mit Beispiel-Skripts mit Grafiken (php GD Bibliotthek)
Signalworte:class
,new
,__construct
(Konstruktor),extends
und Syntax mit "->" und "::"
Hinweis: wieder dt. Handbuch (Manual) nutzen für Erläuterungen der OOP-Techniken (Klassen und Objekte)
Fr., 06.06.14
Freitag, 06.06.2014, 08.30 - 16.00 Uhr
- Rekapitulation, TN-Fragen (Hr. H.: Hosting - Datenbank?)
- To-Do für Freitag (Tag 05):
DBs sichern (Export / Import) per DB-Dumps,
OOP erläutern (Beispieldoks - Grafik und Text basiert),
Schwerpuntkt: vollständiges Skript "Kontaktverwaltung" mit moderner php/mysqli/OOP Technik,
Musterprüfung, ... - PHP & MySQL Projekte
Hosting Beispiele und Preise (1und1, Strato), Webspeicher (GB), Anzahl Datenbanken
Projekte bestehen aus zwei technischen Bestandteilen:
1) Webserver htdocs Verzeichnis(-struktur) - kann beim Hoster leicht per FTP genutzt werden
2) Datenbank und deren Tabellen (Struktur + Daten) - hier helfen jetzt Dumps: - 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 - 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)__construct
für Kontstruktor und__destruct
fü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 mittry
undcatch
(engl.: Exceptions)
Import des Tabellen-Dumpskontakte.sql
in 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) - ...tbc...
- 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
- To-Do nach Seminar:
TN-Unterlagen als Download bereitstellen
Vielen Dank für Ihr gutes Feedback und Ihr Interesse an unseren Prüfungen und weiteren Seminaren!
Ihr Trainer Joe Brandes