An der VHS Braunschweig findet ab dem 04.05.2015 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, 04.05. bis Fr, 08.05.15; jeweils von 08.30 - 16.00 Uhr
Prüfung: eine freiwillige Prüfung wurde für Mi., 20.05.2015, 17.00 Uhr koordiniert (aktuell: 2 Interessierte)
Status Erstkorrektur: beide TN haben bestanden - ich gratuliere!
Prüfungsvorbereitung: aktualisierter Lernzielkatalog / Bewertungsraster und die Musterprüfung / Musterlösung für das Modul II "PHP & MySQL" für den "CMS Online Designer 2.0" (Download s. u.)
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., 04.05.15
Montag, 04.05.2015, 08.30 - 16.00 Uhr
- Orientierungsphase, Teilnehmer-Themen, Pausenregelung/Seminarablauf
Cobra-Shop: gesponserte SW für IT-TN bei VHS; Buchempfehlungen: meine "persönliche aktuelle Bibliothek" werde ich Donnerstag im Seminar vorlegen; die digitalen Daten der Woche stehen den TN am Freitag im Netz zur Verfügung - Software- und Grundeinrichtung PCs
Reborn-Card der TN-PCs beachten: wir arbeiten in den BU-Profilen ohne Rücksetzung von Laufwerk C: (Bezeichner: Windows 7 Frei)
Programme: (sind in meinem aktuellem XAMPP-CMSOD in portabler Version bereits eingebunden)
Packer: 7-Zip als Tool zum Packen/Entpacken
Browser: Mozilla Firefox, Chrome, Opera, Safari (IE-Alternativen und Developer-Tools)
Editor: Notepad++, PsPad (multifunktionaler Editor mit Erweiterungsmöglichkeiten / PlugIns)
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 abfragen (request)
Browser-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 Mosaic, 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 auch ein "Server" eingebaut (Link)!
Zusammenspiel: "Kopiermaschine" - Client fragt nach Webdokument - Server bereitet Daten auf und kopiert an Client
WICHTIG: unsere serverseitigen PHP-Dokumente müssen immer über eine http-Url im Browser aufgerufen werden und die Dokumente müssen immer über die Dateiendung php verfügen - AMP - Apache, MySQL, PHP
notwendige dynamische Technikumgebung für serverseitige Skriptsprachen; Beispiele:
Perl, PHP, ASP, JSP, Python, Ruby on Rails
auf Linux-Systemen dann also LAMP, unter Windows als WAMP und unter MacOS als MAMP 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 speziell angepasste Version XAMPP für Windows 1.8.3-4 mit Apache 2.4.9, MySQL 5.6.16, PHP 5.5.11, phpMyAdmin 4.1.12 zur Verfügung
| 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 |
- XAMPP-CMSOD (Inbetriebnahme der bereitgestellten Spezialedition XAMPP-CMSOD)
Selbstentpackendes XAMPP-Archiv (.exe) inC:\xampp-cmsod\...entpacken - so sind keinerlei Konfigurationen vorzunehmen
bei abweichendem "Installationpfad" müsste diesetup_xampp.bateinmalig ausgeführt werden, dann passen aber bestimmte Erweiterungen (Tools, Backup/Restore-Batchdateien) nicht mehr!
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\phpmysql\uebungen
entspricht http://localhost/phpmysql/uebungen/)
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 und dort auch anders konfiguriert; ansonsten sind Standarddokumente mit interner Reihenfolge in Konfigurations des Webservers hinterlegt (z.B. index.php index.html index.htm index.php3 ...) - Notepad++ Tipps - Standardeditor für das Seminar
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 - Emmet (Notepad++ Erweiterung; 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) bereits installiert,
erste Beispiele (ausführlichere ZenCoding-Beispiele: Link, Link)
Tastenkombination für Emmet "Expand Abbreviation - Abkürzungen ausführen/expandieren" konfiguriert mittels Strg + , (Strg in Kombination mit Komma)
| Emmet Abkürzung | Einsatz - Ergebniscode |
| html:5 oder noch kürzer: ! |
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 |
| p*4>lorem | mal schnell 4 Absätze mit Dummy-Text "Lorem Ipsum" |
- 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
Empfehlung: bitte in UTF-8 speichern mit Notepad++ zusammen mit sauberem HTML-Header (meta charset utf-8)
Hinweis zu Joomla-CMS: dort müssen alle Konfigurationsdateien (*.ini) mit UTF-8 ohne BOM gespeichert werden - phpinfo() - (Link php.net) - unser erstes Skript
ein allererstes Testskript als Analyse-Skript mit Aufruf vonphpinfo()ohne Parameter und nach Recherche mit Alt + F1 dann auch mit 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) - 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" - 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 in 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 $), Konstanten werden mit define vereinbart
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 und natürlich PHP_SELF
Aufruf mittels $_SERVER['HTTP_USER_AGENT] - Arrays (erste Annäherung - 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(...) und Zuweisung mittels "=>" - Arrays - 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 im Browser
Automatische Schleifenfunktion für das Handling von Arrays: foreach
verschachtelte Arrays - eine erste Übung - mehr dann morgen...
Di., 05.05.15
Dienstag, 05.05.2015, 08.30 - 16.00 Uhr
- Rekapitulationen (heute - am Dienstag - etwas ausführlicher mit Hilfe des Beitrags zum Montag),
TN-Fragen:
PHP Abkürzung: Personal Home Page Tools (Rasmus Lerdorf), Hypertext Preprocessor; Empfehlung: de.wikipedia.org - Tipp: Quellcode von Notepad++ (inkl. Syntax-Highlighting) nach Word
Erweiterungen - NppExport - Copy all formats to clipboard -- in Word Einfügen (Strg + V)
Zeilennummerierung: in Word fortlaufende Abschnittswechsel einfügen und für den Abschnitt mit dem Quellcode die Zeilennummerierung einschalten - Verschachtelte Arrays
Fortsetzung der Übung zu verschachtelten Arrays und zwei beispielhafte Ausgaben:
1) foreach verschachteln
2) Funktion list nutzen, um Detaill-Array den gewünschten Variablen zuzuweisen
foreach ($laender as $country => $countryinfos) { // mit Befehl list die Variablen hauptstadt, waehrung und sprache zuweisen: list ($hauptstadt, $waehrung, $sprache) = $countryinfos; // einfache Ausgabe von Land, hauptstadt, waehrung: // echo $country, " ", $hauptstadt, " ", $waehrung, "<br />\n"; echo "<tr class=\"row\"> <td class=\"col\">$country</td> <td class=\"col\">$hauptstadt</td> <td class=\"col\">$waehrung</td> <td class=\"col\">$sprache</td> </tr>"; }Die kompletten PHP-Codes wurden den TN zur Verfügung gestellt - 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
kleine Übungen zu if, switch und for (inklusive Verschachtelung ("kleines Einmaleins")
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. - selfphp.de
Bereitstellung der Offline-Dokumentation (*.chm, *.html) für die TN
Sammlung von Online-Doku a la selfhtml (Stefan Münz) von Damir Enseleit und den "Kannengießer"s
eine Super-Alternative zum PHP-Manual und zum Selbstlernen und Nachschlagen abseits von Fachbüchern (mehr am Do) - 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 Hoster - Codes wie de_DE, en_US
Übung: mit Schleife (Kontrollstruktur) "for" - die Wiederholungen der Ausgabenkonstrukte für Monate vereinfachen auf eine Schleife mit einem echo - 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 (Übung: lesen und schreiben von Textdateien)
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 morgen "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) - MySQL (eine erste Annäherung an den Datenbankserver mysqld)
SQL Structured Query Language (viele Dialekte aber gemeinsame Basis), Client-Server Prinzip; Client in Konsole (Eingabeaufforderung)mysqlgezeigt (Kommandozeilentool in cmd; bei XAMPP in XAMPP-Ordner\mysql\bin), verbinden (konnektieren mittelsmysql -l localhost -u root)
Beispielzeilen / Beispielaufrufe in der mysql-Konsole:
SHOW DATABASES; USE cdcol; SHOW TABLES; SELECT * FROM cds;
besser natürlich: Verwaltung mittels:
PhpMyAdmin - bereits in XAMPP unterlocalhost/phpmyadminerreichbar (oder auch 127.0.0.1/phpmyadmin)
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
Mi., 06.05.15
Mittwoch, 06.05.2015, 08.30 - 16.00 Uhr
- Rekapitulationen, TN-Fragen
- 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 eigentlich 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 = Onmehr!
Übergabe der Variablen mittels $_GET['name'] bzw. $_POST['name'] (s. Handbuch Superglobals)
Speziell: Bereinigung von Eingaben mittels Funktion htmlspecialchars;
Formularthemen: siehe auch Captchas und Formular-Validierungen (haben hier keinen Platz)
das aktualisierte selfhtml-Wiki hat gute Infos zu modernen Formulare (HTML5)
Wichtig: sich selbst aufrufende Formulare; Nutzung von PHP_SELF - also$_SERVER['PHP_SELF']nutzen - Diashow (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?n=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; das Skript wurde ausgiebig analysiert
Basierend auf diesem Grundprinzip für "Dynamische serverseitige Webseiten" wurde eine wirkliche Webseite für die TN bereitgestellt- dort dann Umsetzung mit index.php und automatischer Bereitstellung einer Standard-Startseite
URL dyn. Seiten:./index.php?parameter1=xyz¶meter2=abc&dyninhalt=impressum - PHP-Editor Alternativen
Netbeans (basiert auf Eclipse und ist als spezieller Download für HTML5/PHP verfügbar - Link)
Aptana Studio (basiert auf Eclipse, universeller Editor für alle Sprache, als Standalone-Variante oder Ecplipse-PlugIn verfügbar - Link)
Kauf-SW: Zend Studio - die Firma maßgeblich verantwortlich für die PHP-Entwicklung - Link - Funktionen (bzw. auch Prozeduren)
mit Konstruktion function lassen sich benutzerdefinierte Funktionen erstellen
hier eine einfache "Schablone" - wir haben die zugehörigen Übungen durchgeführt
<?php function foo ($arg_1, $arg_2, ..., $arg_n) { echo "Beispielfunktion.\n"; return $retval; } ?>
Zur Erinnerung unsere Funktionen im Seminar: arrayAusgabe, quadriereWert
wir lagern die Funktionen (Prozeduren) in einem Extra-Skript aus und nutzen include (bzw. require) in den PHP-Skripten, wo wir die Funktionen benötigen - Prozedurale vs. Objektorientierte Technik (OOP)
Prozedural: es werden die eingebauten (mysqli_connect, mysqli_query) oder benutzerdefinierten Funktionen (s.o. arrayAusgabe) einzeln programmiert und aufgerufen
OOP (Objekorientierte Programmierung): wir nutzen bestehende Klassen; Beispiele:
Verzeichnisklasse dir (siehe Beispiel-Skript beim Datei-/Ordnerhandling)
Zugriff mit verbesserter MySQLi / PHP-Technik: $dbobjekt = new mysqli ( ... ) ; $dbobjekt->query ()
Empfehlung: OOP ist moderner und effizienter - unser Ziel für die Nutzung von MySQL-DBs mittels PHP
OOP-Vorteile: Wiederverwendbarkeit, Zeitersparnis beim Coden, leichte Erweiterbarkeit
OOP-Nachteile: anfangs verwirrend (viele Begriffe und Techniken), mehr Aufwand als mal schnell eine Funktion zu schreiben
Do., 07.05.15
Donnerstag, 07.05.2015, 08.30 - 16.00 Uhr
- Rekapitulationen, TN-Fragen, Bücher ("Bibliothek")
- Forts. Thema OOP
Einführung mit grafisch orientierten Beispiel (GD-Bibliothek)
Online Portal mit guter Einführung in die OOP-Technik (Link)
und nach einer weiteren Vertiefung zum MySQL-Server dann natürlich objektorientierte mysqli Zugriffe auf unseren DB-Server - OOP-Beispielskripte (Objektorientierte Programmierung / Grafiken / Texte)
besser als prozedurale Techniken (Funktionen, Prozeduren), da man Code intelligent und effektiv weiter nutzen kann
Stichworte: Vererbungen, Klonen, magische Methoden, ...
eine erste Heranführung mit Beispiel-Skripts mit Grafiken (php GD Bibliotthek nutzen)
Signalworte:class,new,__construct(Konstruktor, Beispiel für magische Methode),extendsund Syntax mit "->" und "::"
Hinweis: wieder dt. Handbuch (Manual) nutzen für Erläuterungen der OOP-Techniken (Klassen und Objekte)
class field { public $im; // Eigenschaften (Variablen) der Klasse field public $ortx=0; public $orty=0; public $black; public $white; public $red; public $orange; function __construct($img) { // Konstruktor - Initialisierung ... // magische Methode (s.a. __destruct) } // ende func field } // ende class field class rect extends field { // Vererbung: rect erbt von field function form() { // neue Methode form ... } // ende func form function go($newx, $newy) {// Positionieren der Rechtecke ... } // ende func go } // ende class rect class ball extends rect { // Vererbung: ball erbt von rect function form() { // Eigene Methode form // jetzt einfarbige Kreise 50*50 Pixel mit red ... } // ende func form } // ende class ball $image = imageCreate(300, 300); // 300 mal 300 Pixel Bild im Speicher $rect1 = new rect($image); // neue Instanz rect - dadurch auch Aufruf // des Konstruktors von Klasse field! $rect1->go(200,50); // Rechteck oben Rechts $rect1->go(50,200); // Rechteck unten Rechts $ball1 = new ball($image); // neue Instanz ball for ($x=0, $y=0; $x<300, $y<300; $x+=50, $y+=50) { $ball1->go($x, $y); // Bälle mit Methode go zeichnen } // Erkenntnis: $ball1 nutzt go von Klasse rect
der vollständige Code wurde im Seminar dargestellt und erläutert - die wichtigsten Aufrufe wurden als Tafelbild entwickelt - Bibliothek (Bücher)
Trainer hat beispielhafte Herdt-Skripte (Matchcodes: GPHP54, GPHP54F, GPHP56, MYSQL56A, SQL) und diverse Bücher zu den Themen PHP & MySQL bereitgestellt (siehe Bibliothek auf diesem PCSYS-Portal)
Hinweis auf Buchhandel von "Graff - Braunschweig - graff.de" bis hin zum Terrashop - MySQL - ein RDBMS (Relationales Datenbank Management System)
Client-/Server Technik natürlich; die Relationen bezeichnen die Verbindungen zwischen den Tabellen:Fachbegriff: Normalformen / Normalisierung von DB-Tabellen am Beispiel einer kleinen DB für Bücher nach Beispiel M. Kofler - Praxis mit PhpMyAdmin (Online-Portal)
Umsetzung der Diashow nach "Lubkowitz" in MySQL-Technik (Buch: Webseiten programmieren und gestalten - Das umfassende Handbuch - AmazonLink)
Analyse der Skripte: diashow.php, config.inc.php (Konfigurationsdaten passend setzen und DB-Name bestimmen)
Wichtig: für brauchen die mysqli-Funktionen (das "i" beachten - improved)
Tipp: Breadcrumb ("Brotkrumen") Navigation des rechten Fensters nutzen: Server - DB - Tabelle
Praxis: 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
Online-Hilfe (Link dev.mysql.com Online Handbuch zu 5.6); Datentypen: 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
Über Schaltfläche SQL lassen sich manuell SQL-Kommandos absetzen - OOP (mysqli) mit PHP/MySQL
beispielhafte Verwaltung von "News" nach Beispielen der Online-PHP-Hilfe und der Ausarbeitung durch Dr. Florence Maurice (Website - Amazon)
Konnektion mit Datenbank und Darstellung der OOP-Vorgehensweise gemäß PHP-Online-Tutorial:
<?php $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $city = "Amersfoort"; /* create a prepared statement */ if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { /* bind parameters for markers */ $stmt->bind_param("s", $city); /* execute query */ $stmt->execute(); /* bind result variables */ $stmt->bind_result($district); /* fetch value */ $stmt->fetch(); printf("%s is in district %s\n", $city, $district); /* close statement */ $stmt->close(); } /* close connection */ $mysqli->close(); ?>
die Skripte arbeiten dann die vier unterschiedlichen Nutzungen ab:
1) Datensätze auslesen: SELECT
2) Datenätze akualisieren: UPDATE
3) Datenätze neu erstellen: INSERT INTO
4) Datenätze löschen: DELETE - .. morgen dann die Skripte im Detail ...
Fr., 08.05.15
Freitag, 08.05.2015, 08.30 - 16.00 Uhr
- Rekapitulationen, TN-Fragen, Erinnerung an freiwillige Prüfung (Anmeldung, Koordination der Prüfungsvorbereitung)
- korrigierten Code für Diashow mit MySQL bereit gestellt
Anregung: gerne die Codes für die MySQL-Diashow nacharbeiten; hier haben wir ja zwei Tabellen in einer Verbindung (Relation), wenn wir die Daten nutzen wollen; hier beispielhafte SQL-String mit denen man die Daten aus zwei Tabellen abfragt: (Anm.: wurde im Seminar nicht besprochen!)
SELECT p.title, p.comment, c.name FROM ds_pictures p, ds_categories c WHERE (p.category = 3) AND (p.category = c.id) ORDER BY p.id ASC LIMIT 0,1 SELECT COUNT(*) FROM ds_pictures WHERE category = 1
- OOP mit PHP & MySQL intensiv nachgearbeitet
Musteranwendung "news" - Skripte der Reihe nach analysiert:
db_include.php: DB-Objekt bereitstellen $mysqli = new mysqli (...)
anzeigen.php: $mysqli->prepare mit vollständigem SELECT-String; Methode bind_result
loeschen.php: DELETE-String mit Parametern (?) also brauchen wir Methode bind_param
neu.php: Datensätze einfügen mit INSERT INTO ... VALUES und wieder bind_param
bearbeiten.php: hier sowohl auslesen und dann ändern mit UPDATE ... SET - 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
<?php if (!isset($_COOKIE["cook_1"])) { setcookie("cook_1", "Hallo", time()+10, "", "",0); echo "Cookie wurde gesetzt"; // echo $_COOKIE["cook_1"]; // geht hier nicht! } elseif ($_COOKIE["cook_1"]) { echo "vorhandenes Cookie wurde gelesen: <br>"; echo $_COOKIE["cook_1"],"<br>"; } echo "<pre>"; // ein Server - hier localhost - kann nur seine // eigenen Cookies lesen! print_r($_COOKIE); echo "</pre>"; ?>
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()<?php // Registrierung von Session-Variablen // implizite Initialisierung der Session session_start(); $id = session_id(); $_SESSION['ArtNr']=100101; $_SESSION['BestNr']="999-8762"; echo "implizite Initialisierung der Session: "; echo $id; echo "<br>Artikelnummer: ", $_SESSION['ArtNr']; echo "<br>Bestellnummer: ", $_SESSION['BestNr']; ?> - 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 gzip, 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
Tipp - falls mal sehr große und Hostingseitig Dumps problematisch sind: Skriptsammlung von www.mysqldumper.de - Musterprüfung "PHP & MySQL - Modul II - CMSOD" gezeigt (Prüfungsvorbereitung)
für meine TN wird bereits die aktualisierte CMSOD 2.0 zeitnah bereitgestellt - TN-Unterlagen (umfangreiche digitale "Downloads" über das Schulungsnetz), TN-Bescheinigungen, Feedbackbögen, letzte TN-Fragen
- To-Do nach Seminar:
Inhalte komplettieren (Fr) und Korrektur lesen
TN-Unterlagen als Download bereitstellen
Vielen Dank für Ihre tollen Feedbackbögen und Ihre persönlichen positiven Rückmeldungen zum Seminar.
Ihr Trainer Joe Brandes