• XAMPP CMSOD 7.2.8XAMPP CMSOD 7.2.8

An der VHS Braunschweig findet ab dem 13.05.2019 ein Bildungsurlaub zum Thema "Dynamische serverseitige Webseiten mit PHP & MySQL" aus der Zertifikatsreihe "CMS Online Designer (VHS)" 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, 13.05. bis Fr, 17.05.19; jeweils von 08.30 - 16.00 Uhr
Freiwillige Prüfung: eine freiwillige Prüfung wird mit den Interessierten im Seminar koordiniert
Termin: Mi., 29.05.2019; 18.00 - 20.00 Uhr; Raum 2.11 (aktuell 2 Interessierte)

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 ...

Tag 01

Montag, 13.05.2019, 08.30 - 16.00 Uhr

Allgemeine Infos / Intro

  • Orientierungsphase
  • Ablaufplanung Seminar: Pausenzeiten, Anfangs-/Endzeiten
  • Kurzdarstellung "CMS Online Designer  (VHS)"
  • Cobra-Shop mit Software für VHS-Schulungsteilnehmer

Windows-Umgebung konfigurieren

Bei der VHS Braunschweig sind entsprechende Windows Profile zur Nutzung vorinstalliert:
Windows 10 BU beim Starten auswählen!

Ansicht für den Standard-Dateimanager Window Explorer (Win + E) einstellen:

Windows Einstellungen - Dateierweiterungen einblenden
Anzeige der Dateiendungen mit Windows Explorer (Win + E);
Windows Vista / 7 / 8 / 10: Organisieren - Ordner- und Suchoptionen - Register Ansicht ...
Alternativ bei Windows XP: Menü Extras - Ordneroptionen
Grund: Dateien heißen bild.jpg oder bild.jpeg oder bild.JPG - wir müssen das genau wissen!

Software für CMSOD-Seminare: (siehe auch Beitrag Toolsammlung auf diesem Portal)
Anm.: die Programme sind ggf. schon installiert oder werden bereitgestellt!

  • XAMPP für Windows (Link)
    wird maßgeschneidert von Trainer J. Brandes bereitgestellt oder die TN nutzen eine aktuelle Apachefriends.org-Version
  • Notepad++ (Link)
    Texteditor (auch für Konfigurationsdateien oder auch PHP / HTML / CSS / JS / TypoScript)
    Tipp: bitte 32-Bit-Version installieren, wenn man die Plugins/Erweiterungen von Notepad++ nutzen möchte
    Siehe auch Alternative: Microsoft Visual Studio Code (Link)
  • 7-Zip (Link)
    Packer / Entpacker

Client-Server-Prinzip (WWW)

WWW - World Wide Web: Internet "Dienstleistung / Service / engl. Daemon - siehe angehängtes "d" bei httpd für Apache-Server-Software"

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 Web-Server-Software: IIS (Internet Information Server von Microsoft); nginx von Firma NGINX, LIGHTTPD, ab PHP 5.4 ist in der Skriptsprache PHP 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 sollten immer über die Dateiendung *.php verfügen.

Serverumgebung "WAMP"

  • LAMPPLAMPP

XAMPP für Windows - Seminar-Version: XAMPP 7.2.8 mit PHP 7.2.8

X - Betriebssysteme Linux (L), Windows (W), MacOS (M) oder Sun Solaris;
A - Apache (Webserver),
M - MariaDB / MySQL (Datenbankserver),
P - PHP (serverseitige Skriptsprache)
P - Projekt;

bei Hostern: klassisches LAMP-System (Linux - Apache - MySQL/MariaDB - PHP)
oder auch mal als WAMPP mit einer Windows Server Betriebssystem Basis und dem IIS (Internet Information Server) als Webserver und dem MSSQL-Server als Datenbankserver

Hier eine kleine Übersicht / Zusammenfassung zur genutzten AMP-Umgebung:

AMP A - Apache M - MySQL / MariaDB
P - PHP
Technik Web-Server Datenbank-Server serverseitige Skriptsprache
Web (URL) httpd.apache.org
(Projekt Apache Foundation)
www.mysql.com
(bzw. .de)
mariadb.org
www.php.net
(bzw. de.php.net)
Konfigurationen httpd.conf my.ini
(bzw. my.cnf)
php.ini
XAMPP Versionen 2.4.34 10.1.34-MariaDB
mit PhpMyAdmin 4.7.0
7.2.8

Im Seminar werden einfache Konfigurationsbeispiele dargestellt.

XAMPP-CMSOD installieren

Vorgehensweise im  "Windows"-Seminar (XAMPP-Server  für Windows):

Ich stelle als Trainer ein fertiges selbstentpackendes XAMPP-7z-Archiv bereit, das bereits für die CMS Joomla, TYPO3 und die anderen CMSOD-Seminare vorkonfiguriert ist.

Archivname: xampp-cmsod-TEILNEHMER-20180824.exe
MD5-Prüfsumme: 4A1B634170BB3A585147B3A25C388B64

Tipp für MD5-Prüfsumme in PowerShell: (Anm.: hier Aufruf im Ordner des Archivs)

$a = Get-FileHash -Path .\xampp-cmsod-TEILNEHMER-20180824.exe -Algorithm MD5
$a.Hash

Das Archiv wird nur bei Notwendigkeit (siehe zuletzt PHP-Version 7.2 für TYPO v9) aktualisiert.
Die eingebauten Techniken (s.u.a. PortableApps, ...) können selber aktualisiert werden!

XAMPP-CMSOD bereitstellen - Kurzanleitung:

  • XAMPP-CMSODXAMPP-CMSOD
  1. XAMPP-Archiv auf TN-PC kopieren über Netzwerkfreigabe
    (oder von bereitgestellter Trainer-CD)
  2. Selbstentpackendes 7z-Archiv mit Doppelklick "öffnen/entpacken"
  3. Zielordner: C:\xampp-cmsod angebeben
    Anm.: Entpacken in Zielpfad  C:\xampp-cmsod  ist wichtig!
    Grund: alle eingebauten CMSOD-Techniken und Tools auf dieses lokale Verzeichnis optimiert wurden.
    Tipp: eigene XAMPP-Testumgebungen kann man dann einfach in anderen Verzeichnissen wie C:\xampp unterbringen.
  4. Starten / Doppelklicken  xampp-control.exe (Kontrollcenter) und
  5. Starten der nötigen Server mit Hilfe des Kontrollcenters:
    → Apache Webserver und
    → MySQL Datenbankserver per Schaltflächen "Starten" im Kontrollcenter
    Anm.: die Nachfragen der Windows-Firewall bei den Dienste-Starts können bestätigt werden, falls wir Zugriffe auf unsere Testinstallationen über das Netzwerk wünschen.

Die Aktionen zum Starten Webservice Apache und Datenbankserver MySQL (bzw. MariaDB) sollten wir täglich (also jeweils bei Bedarf) durchführen.
Empfehlung: von einer automatischen Bereitstellung des XAMPP-Server über (automatisch startende) Services (Dienste) rate ich ab!

Jetzt kann man mit Browser / Webclient Ihrer Wahl die Adresse localhost öffnen und die Entwicklungsumgebung testen / nutzen.

Hinweis: portable Firefox (s. PortableApps Anwendungen) nutzen keinen Browser-Cache und sie können einen installierten und einen portablen Firefox nicht gleichzeitig nutzen!

Die vorbereitete Umgebung in einer kleinen Übersicht:

TechnikInfoBemerkung
XAMPP C:\xampp-cmsod\ Basispfad des XAMPP-CMSOD
Web-Dokumente C:\xampp-cmsod\htdocs\phpmysql\... mit Unterordnerstrukturen
Apache C:\xampp-cmsod\apache\conf\httpd.conf Konfigurationsdatei Webserver
PHP C:\xampp-cmsod\php\php.ini Konfigurationsdatei PHP

Für Technik- und CMSOD-Zertifikat-Interessierte befindet sich unter
(URL) http: //localhost/cmsod-overview  eine Website mit Infos rund um den CMSOD
und die genutzten Techniken und Konfigurationen.

php.ini - Konfiguration für PHP

Erinnerung an Analyse der PHP/Apache-Umgebung mittels phpinfo() ;
hier kann auch der genaue Pfad zur genutzten (geladenen) php.ini gecheckt werden! 

Firma Zend maßgeblich für PHP Entwicklung, Zend bietet auch Profi-Lösungen für PHP-Techniken an.

Konfigurationen angesprochen: z. B. post_max_size , memory_limit  , ...

Konfiguration für PHP-Fehler

Eigenes "Kapitel" in der php.ini für "Error handling und logging" (ca. ab Zeile 400 der php.ini) mit ausführlichen Erläuterungen für Konfigurationen und Kombinationen.

Hier die Hauptkonfigurationen für die PHP-Fehlerbehandlungen:

error_reporting (Auswahl der Meldungen)

error_reporting = E_ALL  (als Voreinstellung XAMPP-CMSOD)

unterschiedliche Vorschläge für Entwicklungs- (Development) und Produktions-Server

typische Konfigurationen: (hier mit den Anmerkungen aus der php.ini)
E_ALL (Show all errors, warnings and notices including coding standards.)
E_ALL & ~E_NOTICE (Show all errors, except for notices)
E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.)
E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)

Konfiguration nach Einsatzumgebungen:
Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED  
Development Value: E_ALL   
Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT  

display_errors (Ein-/Ausschalten der Meldungen)

display_errors = Off   (als Voreinstellung XAMPP-CMSOD)

Übung:
umschalten von Off auf On , damit wir die Reaktionen auf "Tippfehler" in unseren Codes überhaupt deuten können

Wichtig: die neue php.ini muss neu in Webserver-Technik geladen werden - also: Apache restarten über XAMPP-Konfiguration

Web-Dokumente-Ordner

Erkenntnis:
XAMPP-Verzeichnis: c:\xampp-cmsod\htdocs (entspricht der Request-URL: http://localhost/)

Übungsordner  C:\xampp-cmsod\htdocs\phpmysql\uebungen
URL http://localhost/phpmysql/uebungen

Bitte erstellen Sie sich im Dateimanager (Windows Explorer - Win + E) und in Ihrem Browser die nötigen Favoriten (Bookmarks / Verknüpfungen / Schnellzugriffe), um die Aufrufen der URLs und das Auffinden der PHP-Dokumente zu beschleunigen.

Wichtige Empfehlungen:
keine Umlaute, keine Sonderzeichen, Groß- und Kleinschreibung beachten (also Empfehlung: alles klein schreiben), keine Leerzeichen!

Bei Anfrage von Verzeichnissen (ohne Webdokument) gibt XAMPP ein Inhaltsverzeichnis (Index) zurück!
Standarddokumente sind mit Reihenfolge in Konfigurationsdatei httpd.conf des Webservers hinterlegt (z.B. index.php index.html index.htm index.php3 ...)
Das ist auf Produktionssystemen (also beim Live-Hosting) nicht gewünscht und entsprechend dort auch anders konfiguriert.

Notepad++

Tipps - Standardeditor für das Seminar
Anm.: in XAMPP-CMSOD PortableApps eingebaut oder lokal installiert - bitte 32-Bit-Variante nutzen wegen PlugIns

Hilfe PHP: 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 (Menü Sprachen)
Tipp: Über Kontextmenü auf PHP-Datei den portablen Editor Notepad++ als Standardprogramm zum Öffnen einstellen
Pfade zu Notepad++ Software:
C:\xampp-cmsod\_tools\_portable\PortableApps\Notepad++Portable\Notepad++Portable.exe
oder natürlich den in Windows installierten Notepad++-Programme-Pfad!

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 (bzw. UTF-8 ohne BOM) speichern mit Notepad++ ;
gerne zusammen mit sauberem HTML-Header (<meta charset="utf-8">)

Hinweis zu CMS Joomla: dort sollten alle Konfigurationsdateien (*.ini) unbedingt mit UTF-8 ohne BOM gespeichert werden

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 uns dann wieder auf PHP konzentrieren.

Anm.: in vielen Beispielen werden zur schnellen Verdeutlichung direkte Styles in HTML verdrahtet - also ohne saubere CSS Stylings;
das muss natürlich später sauber gemäß der Techniken aus "HTML & CSS" codiert werden!

Für das Einfügen von PHP beschreibt das PHP-Handbuch unterschiedliche, technische Möglichkeiten. Auszug aus der PHP-Hilfe: "...Es gibt vier unterschiedliche Paare öffnender und schließender Tags, die in PHP verwendet werden können.
Empfehlung: <?php ?>

Die Einbindung mit <script>-Tag ist mit PHP7 nicht mehr gewünscht.
Die anderen Varianten sind Short-Tags und ASP-Tags, die über das php.ini-Konfigurationsfile ein- und ausgeschaltet werden können. ..." (Link)
Tipp (Anm.: später im Seminar...) für komplettes HTML5-Gerüst:  html:5  (dann Strg + , ← Tastenkombination mit Strg und Komma; Erkl.: Erweiterung Emmet in Notepad++)

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)

PHP-Status und -Infos

Version und Konfigurationen ermitteln - phpinfo() - unser erstes Skript (Link php.net)

Ein kleines Skript erledigt die Arbeit

View source
  1. <?php
  2.     // Kommentar: Wir wollen die PHP-Server-Konfiguration auslesen!
  3.     phpinfo();
  4. ?>
Achten Sie bei Ausdrücken/Anweisungen in Skriptsprachen generell auf das hier auch abschließende "; (Semikolon)

PHP Sprachkonstrukte (Einstieg)

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 (im String) ausgewertet1

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 / Strings über den Operator "." aneinderheften oder über Kommas einfach nacheinander aufzählen.

Alternative: print  - mit dieser Funktion kann man auch gleichzeitig Zuweisungen erstellen:
$var = print("Text");   // Zuweisung und Ausgabe - print arbeitet auch ohne Klammern

date (Datumsfunktionen - 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

Funktion zum Erstellen von Datumswert: mktime   (Link php.net - bitte die Reihenfolge Monat, Tag beachten!)
Hinweis: Datentyp DATETIME Formatierung mittels Formatierungsstring "Y-m-d H:i:s"; später für MySQL-Datenbank wichtig!

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 Zuweisungen wie class=\"styling\" 

Vordef. PHP-Konstanten und Superglobals

Stichwort: "magische" PHP-Konstanten - Link php.net)
__LINE__, __FILE__, PHP_VERSION, PHP_OS
Nutzung für "Debugging" und Analyse von PHP-Skripten

$_SERVER[...] (Link php.net)
technisch: Superglobales Array für die Nutzung von Server-Variablen
wie HTTP_USER_AGENT, SERVER_NAME und natürlich PHP_SELF
Aufruf mittels $_SERVER['PHP_SELF']  (wichtig für dynamische Website - Hauptseite ruft sich selbst immer wieder auf...)

Arrays

(erste Annäherung - Funktion array Link php.net)

2-dimensionale Tabellen mit Spalte für Index (engl. index) und Spalte für Inhalt / Wert (engl. value)

bei nummerischen Arrays laufen die Indizes von 0, 1, 2, ...
bei assoziativen Arrays (Hash-Tabellen) werden Begriffe / Bezeichner für die Indizes genutzt

Definition von Array mit Hilfe von PHP-Aufruf array(...) und Zuweisung mittels "=>"

Arrayfunktionen - array() - foreach() - Beispiele 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 (im Quellcode immer gut lesbar)

Automatische Schleifenfunktion für das Handling von Arrays: foreach 
Arrays sind nur 2-dimensional (nur 2 Spalten) können aber auch noch verschachtelt werden!

Erste Übung verteilt - mehr hierzu dann morgen...

 

Wichtige Anmerkung des Trainers zu den "Stylings" in den PHP-Codes:
Es wird häufig einfaches (physikalisches) HTML-Styling direkt in den Tags verwendet, statt sauberer CSS-Klassen und Definitionen.
Das geschieht, um die PHP-Codes einfach und übersichtlich zu halten.
Später bitte natürlich saubere und professionelle Trennung von Layout (HTML-Struktur) und Styling (CSS) wie auf csszengarden.com ;-)

Bei umfangreicheren Codes wurde den TN der jeweilige Code "fertig" zur Verfügung / zum Testen und Anpassen bereitgestellt.

 

  • localhost - 127.0.0.1localhost - 127.0.0.1
  • FehlermeldungenFehlermeldungen
  • php - Browser - htmlphp - Browser - html
  • HilfeHilfe
  • Arrays: list()Arrays: list()
  • Arrays: print_r, foreachArrays: print_r, foreach

 

Tag 02

Dienstag, 14.05.2019, 08.30 - 16.00 Uhr

Ausführliche Rekapitulation zu Tag 01 (!), TN-Fragen

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-Dokumentationen

Verschachtelte Arrays

Arrays (hier in PHP ja nur 2-dimensional / 2-spaltig) lassen sich gerne verschachteln

Übung:

LänderHauptstadtWährungSprache
Deutschland Berlin Euro deutsch
Japan Tokio Yen japanisch
England London Pfund englisch

Fortsetzung der Übung zu verschachtelten Arrays und Ausgaben mit unterschiedlichen Techniken möglich:
1) foreach verschachteln (nur bei vielen Dimensionen nötig)
2) Funktion list nutzen, um aus dem Detaill-Array die gewünschten Variablen mit Funktion list  zuzuweisen

View source
  1. foreach ($laender as $country => $countryinfos) {
  2.     // mit Befehl list die Variablen hauptstadt, waehrung und sprache zuweisen:
  3.     list ($hauptstadt, $waehrung, $sprache) = $countryinfos;
  4.     // einfache Ausgabe von Land, Hauptstadt, Währung:
  5.     // echo $country, " ", $hauptstadt, " ", $waehrung, "<br>\n";
  6.     echo "<tr class=\"row\">
  7.             <td class=\"col\">$country</td>
  8.             <td class=\"col\">$hauptstadt</td>
  9.             <td class=\"col\">$waehrung</td>
  10.             <td class=\"col\">$sprache</td>
  11.         </tr>";
  12. }
Anm.: wichtige Grundtechniken für weitere Anwendungen mit PHP und später Datenbanktechnik (MySQL/MariaDB).

Übung zu verschachtelten Arrays
mit Tabelle zum CMSOD:

ModulModulnameAnmerkungen
I HTML & CSS statische Webseiten
II PHP & MysQL dynamische serverseitige Skripttechnik  + Datenbank
IIIa Joomla! Content Management System
IIIb TYPO3 Content Management System

Anlehnung (Copy & Paste ;-) an Code für "Länder"!

Kontrollstrukturen

(Link php.net) Nutzung von

Verzweigungen mittels if (bzw. if ... then ... else) und switch,

Schleifen mittels for, foreach und while bzw. do...while (Abbruchbedingungen am Anfang bzw. am Ende)

Verschachtelungen von for-Schleifen

View source
  1. // 1-mal-1 mit verschachtelten Schleifen
  2. echo "<table border=\"1\">";
  3.  
  4. for ($i = 1; $i <= 10; $i++) {
  5.     echo "<tr class=\"klasse4reihe\">";
  6.     for ($j = 1; $j <= 10; $j++) {
  7.         $ergebnis = $i * $j;
  8.         echo "<td>$ergebnis</td>";
  9.     }
  10.     echo "</tr>";
  11. }
  12.  
  13. echo "</table>";
Auszug aus komplettem Skript - ebenfalls Lösungen mit richtigem CSS diskutiert/verteilt.

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)

Zusatzinfo: Logische Funktionen gettype() , empty() , is_null() , isset()  
und Nutzung von Vergleichen mit = , ==  und === als tabellarische Übersicht (Link Ausdruck / Funktionen php.net)

Darstellung von Logik und Kontrollstrukturen in Blockdiagrammen 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.
Tipp: Das PHP-Manual bietet ausreichende Beispiele zu den wichtigsten Kontrollstrukturen (hier gerne "copy & paste" nutzen)

String-Funktionen

(Link php.net)

addslashes, stripslashes - Anführungszeichen sequenzieren (sonst Datenbank-Probleme möglich)
explode, implode - Auseinanderbauen und zusammensetzen von Zeichenketten
substring, str_replace - Beispiele für Zeichenkettenmanipulierung
Anm.: siehe auch str_replace für Grundprinzip dynamischer Websites in Folgeübungen
print, printf, sprintf - Ausgabe formatierter, intelligenter Zeichenketten (Link sprintf php.net)

View source
  1. $anzahl = 5;
  2. $ort = 'Baum';
  3. $format = 'Es sind %d Affen auf dem %s';
  4. sprintf($format, $anzahl, $ort);
htmlspecialchars - macht aus Tags - also spitzen Klammern die HTML-Sonderzeichen und "entschärft" somit Textketten mit solchem Code, siehe spätere Formular-Behandlung (Validierung) bei kompletten und umfangreichen PHP-Lösungen
nl2br - gibt Texte inklusive Zeilenumbrüchen an Browser
rawurlencode - ersetzt in Strings für URLs die Leer- und Sonderzeichen (wichtig für GET)
get_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 mit fopen (Link php.net) und
schließen mit fclose (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 Dynamische Website "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 und Ordnerberechtigungen auf Winddows-AMP-System (WAMP) abweichend von Hostern (dort: LAMP); Grund: Linux mit anderen Datei-/Ordnerberechtigungen und Benutzerkonzept

 

MySQL (Teil I)

... eine erste Annäherung an den Datenbankserver mysqld

technisch: RDBMS - Relationales Datenbank Management System

Erläuterungen zu den Normalformen mit Hilfe von Auszug aus MySQL-Buch von M. Kofler
Plan: DB für Bücher macht aus einer ersten Rohtabelle eine Anordnung (also: in Relationen befindliche 4 Tabellen!)
Ziel: Vermeidung von Inkonsistenzen und Redundanzen

Historie MySQL: Entwickelt von Firma "MySQL AB" (heute MySQL bei Oracle),
Aktuelle Alternative zu MySQL von Ur-Entwickler Michael Widenius ist MariaDB (Namensgebungen nach Töchtern My und Maria)
Freie MySQL-Variante für Entwickler und Tester unter dem Namen "MySQL Community Edition"
Infoportale MySQL: International - Deutsches Portal - Dokumentation
Infoportal MariaDB: International - Learn MariaDB  (im XAMPP ist seit geraumer Zeit MariaDB eingebaut!)  
SQL Structured Query Language (viele Dialekte aber gemeinsame Basis)

Client-Server Prinzip; Client in Konsole (Eingabeaufforderung)  mysql  gezeigt MySQL-Kommandozeilentools in cmd (Eingabeaufforderung) oder PowerShell
Client-Tools bei XAMPP in XAMPP-Ordner c:\xampp-cmsod\mysql\bin  ,
verbinden / konnektieren mittels  mysql -h localhost -u root -p   (beim XAMPP kann man localhost weglassen)

Beispielzeilen / Beispielaufrufe in der mysql-Konsole

View source
  1. SHOW DATABASES;
  2. USE mysql;
  3. SHOW TABLES;
  4. SHOW FIELDS FROM USER;
  5. SELECT * FROM USER;
  6. SELECT Host, USER, Password FROM USER;
MySQL-Konsole mit quit verlassen!

Verwaltung mittels diverser "Clients" möglich:
1) php-Skripte mit Modul/Schnittstelle mysqli (das letzte "i" steht für improved / verbessert
2) phpMyAdmin - eine PHP-Skriptsammlung für dei Administration von MySQL-Datenbankservern
Übungen mit phpMyAdmin: Datenbank "books" (noch ohne Tabellen)
erste Tests mit SQL-Befehlen über die Oberfläche von phpMyAdmin
3) Kommandozeile/Shell mit Tool mysql (siehe Ordner C:\xampp-cmsod\mysql\bin  - Anm.: bin für Binaries, also ausführbare Programme)
4) Spezialprogramme zur DB-Verwaltung (z.B. MySQL Workbench - Link)

Nötige Zugangsdaten zur Konnektion (DB-Connection) zum Datenbankserver:
(hier: Infos für den Zugriff auf eine Datenbank bei unserem XAMPP-CMSOD)

InformationXAMPP-CMSODHoster (z.B. 1und1 - Vorgaben)
Datenbankserver localhost dbxy255.1und1.com
Benutzername root dbuserxy255-1
Passwort NULL
bzw. leerer String
*******************
Anm.: lang, hochkomplex, ...
Datenbank books
Anm.: nach Wunsch
dbuserxy255

Für die Techniken beim Hoster ist immer zu bedenken, dass Sie dort nur eingeschränkte Berechtigungen an Ihren Datenbanken erhalten:

  • oft keine Datenbanken mit Namen nach Ihrer Wahl
  • oft kein Rücksichern/Recovern kompletter Datenbanken, sondern nur auf Tabellenebene!

CRUD - Create, Read, Update, Delete

die grundlegenden Datenbankoperationen (Wikipedia-Link)

CRUDBeschreibungSQL-Kommandos 
Create Erstellen neuer Datensätze
Erstellen neue Datenbank
Erstellen neue Tabelle
INSERT INTO ...
CREATE DATABASE ...
CREATE TABLE ...
Read Lesen / Auslesen von Datensätzen SELECT ... FROM ... WHERE ...
Update Aktualisieren von Datensätzen UPDATE ...
Delete Löschen von Datensätzen
Löschen einer Datenbank
Löschen einer Tabelle
DELETE ... FROM ... WHERE ...
DROP DATABASE ...
DROP TABLE ...

Diese Grundoperationen wollen wir durch entsprechende PHP-Skripte umsetzen lassen.

 

  • Arrays: verschachteltArrays: verschachtelt
  • PHP Hilfe - CHMPHP Hilfe - CHM
  • SchleifenSchleifen
  • htmlspecialchars()htmlspecialchars()
  • DateihandlingDateihandling
  • MySQL-ClientsMySQL-Clients

 

Tag 03

Mittwoch, 15.05.2019, 08.30 - 16.00 Uhr

nochmals "ordentliche" Rekapitulation, TN-Fragen

Aus den folgenden Formularen benötigen wir die Methode GET für die Grundkonzepte dynamischer Webseiten:
per URL die Auslieferung von Seiteninhalten dynamisch steuern ....

Formulare

HTML-Tags:

  • form (äußeres Formulartag; Attribute: action, method)
  • Methoden: POST vs. GET im Vergleich
  • input (Eingabefeld; Attribute: type, name)

Zur Info stelle ich beispielhafte Formular-Websites zur Verfügung. Zur Erinnerung: Seminarkonzentration auf PHP und nicht auf die HTML-Techniken; hier: form-Tags.

POST-Methode

Übergaben im Hintergrund (unsichtbar), kein Protokollieren im Webserver, größere Datenmengen (beschränkt durch php-Konfiguration - siehe post_max_size)

GET-Methode

Daten lassen sich als URL speichern (Bookmark, Link)

Seit PHP 5.3 keine übergebenen Variablen "wie selbstverständlich" (also global!) über einfachen Variablennamen verfügbar: es gibt keine sicherheitstechnisch fragliche PHP-Konfiguration  register_globals = On  mehr!

Übergabe der Variablen also immer mittels der superglobalen Arrays $_GET['name'] bzw. $_POST['name']
(s. PHP Handbuch zu Superglobals)

Speziell: Bereinigung von Eingaben mittels Funktion  htmlspecialchars;

Formularthemen:
siehe auch Captchas und Formular-Validierungen (haben hier keinen Platz - siehe dazu auch Seminar "HTML & CSS")
das aktualisierte selfhtml-Wiki hat gute Infos zu modernen Formularen (HTML5)

Wichtig / Praxis: sich selbst aufrufende Formulare
Nutzung von PHP_SELF im superglobalen Array $_SERVER - also $_SERVER['PHP_SELF'] nutzen

Dynamische Webseiten

Beispiel: Diashow (dynamische Website ohne DB-Anbindung)

beispielhaftes Skript nach M. Lubkowitz aus der Internet Pro
Anm.: Jahrgang 2003 - aber thematisch / technisch immer noch passend!

Grundidee: Skript diashow.php bzw. index.php liest Steuerdatei (bayern.csv) und ein HTML-Template (template.htm) ein und berechnet und ersetzt Platzhalter im Template mit der PHP-Funktion str_replace 

Ü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-then-else-Struktur  $pic_nr = $_GET['nr'] ? $_GET['nr'] : 1;

Coeschnippsel aus Diashow; das Skript wurde ausgiebig analysiert und getestet

View source
  1. // Template laden
  2. $output_html = implode('', file('template.htm'));
  3. // CSV-Datei einlesen - ergibt Array $pics
  4. $pics = file($_GET['fn']);
  5. // Nummer des anzuzeigenden Bildes festlegen (Kurzschreibweise if):
  6. $pic_nr = $_GET['nr'] ? $_GET['nr'] : 1;
  7. // hier die LANGE Schreibweise mit if-then-else:
  8. if ($_GET['nr']) {
  9.     $pic_nr = $_GET['nr'];
  10. } else {
  11.     $pic_nr = 1;
  12. }
  13. // Bilddatensatz laden - Dateiname / Beschreibung zuordnen aus $pics
  14. list($filename, $description) = explode(';', $pics[$pic_nr-1]);
Die verschiedenen Codeteile immer wieder auch per eingebundenen Testzeilen (siehe echo , print_r , die )genauer betrachtet und analysiert.

Beispiel: Blog-Website

Basierend auf diesem Grundprinzip für "Dynamische serverseitige Webseiten" wurde eine wirkliche Webseite für die TN bereitgestellt (Projektordner dyn-web).

Dort dann Umsetzung mit automatischer Bereitstellung einer Standard-Startseite index.php mit Vorgabe der Startparameter, falls in URL keine GET-Variablen übergeben werden! Desweiteren wird eine professionelle Bereitstellung von Menüstrukturen ausgelagert und per include  im Hauptskript bereitgestellt! Solche Basistechniken werden wir in weiteren Übungen genauer kennenlernen.

URL dyn. Seiten - das Grundprinzip dynamischer Webseiten:
./index.php?parameter1=xyz&parameter2=abc&dyninhalt=impressum      

Anm.: Prinzip wurde auch beispielhaft mit Joomla-CMS gezeigt.

phpMyAdmin

der DeFacto-Standard für die "manuelle" Nutzung von MySQL-Datenbankservern

bereits in XAMPP unter localhost/phpmyadmin erreichbar (oder natürlich auch 127.0.0.1/phpmyadmin)
Konfigurationsdatei für MySQL Datenbankserver: my.ini (bzw. my.conf)

Hierarchie: (siehe Breadcrumb/Brotkrumen-Navigations-Leiste oben in phpMyAdmin)

Übung mit Datenbankserver (localhost)

  • Datenbank (books)
  • Tabellen (author, title, rel_author_title, publisher)
    erstellt wurden die Tabellen title und publisher 
  • Tabellenstrukturen nach Entwurfsvorlage "Kofler" im Seminar mit TN
    mit Datensätzen / Records / Inhalten gefüllt (Einfügen)

db tables title publisher entwurf

Insbesondere Hinweis auf Struktur-Ansicht mit MySQL-Datentypen (int, bigint, varchar) und Eigenschaften

  • Auto Increment AI,
  • Primärschlüssel / Primary Key PK

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 ist möglich; schnelle Navigation über Breadcrumb-Leiste oben

Übungen (teilweise auch in den Folgetagen): Erstellen / Datensätze / Exportieren / Importieren
einer Datenbank books nach Vorbild "MySQL - Kofler - Normalformen"

das MySQL-Client Tool zum Exportieren: mysqldump  (Imports mittels mysql )
Automatisierung auf Linux/Unix mittels Cron-Jobs (termingeplanten automatischen Ausführungen)
Analyse / Ansicht der SQL-Import-Datei mit geeignetem Editor (Notepad++ nutzen - keine Windows Editoren wie Notepad oder Wordpad)

  • Formular - POSTFormular - POST
  • $_SERVER['PHP_SELF']$_SERVER['PHP_SELF']
  • Dynamische DiashowDynamische Diashow
  • Dynamische WebsiteDynamische Website
  • Tabelle definierenTabelle definieren
  • Tabelle anzeigenTabelle anzeigen

 

Tag 04

Donnerstag, 16.05.2019, 08.30 - 16.00 Uhr

Rekapitulation, TN-Fragen, freiwilliger Prüfungstermin
Zeiten Freitag koordinieren

To-Do-List Do:

  • Forts. Übungen DB-Tabellen (books) mit PhpMyAdmin (DB-Dumps)
  • Funktionen (prozedurale Techniken)
  • Auslagerung von Funktionalität oder Konfigurationen per include/require
  • Programmierbeispiel für PHP/MySQLi (Gästebuch)
  • Einführung OOP (!)
  • ...schauen wir mal... ;-)

Als Trainer bringe ich auch immer mal eine kleine Bibliothek mit in das Seminar...

Bibliothek (Bücher)

Als Trainer habe ich heute diverse Bücher zu den Themen PHP & MySQL bereitgestellt
(siehe auch Bibliothek auf diesem Info-Portal)
Hinweis auf Buchhandel von "Graff - Braunschweig - graff.de" bis hin zum Terrashop und Verlag "Rheinwerk-Verlag (früher: Galileo-Verlag)

Übungen SQL

Forts. der Datenbankübungen zur Datenbank books:
Erstellen und Inhalte für die Tabellen author und rel_title_author  mit PhpMyAdmin

phpMyAdmin - SQL Tests
Forts. DB-Technik... ausgiebige Tests beginnend mit einfachen SELECT-Strings

View source
  1. SELECT * FROM publisher
  2. SELECT publisher FROM publisher
  3.  
  4. SELECT * FROM title
  5. SELECT titleId, title FROM title
  6.  
  7. SELECT * FROM title WHERE (YEAR = 2017)
  8. SELECT * FROM title WHERE (YEAR > 2014)
Abfragen an mehreren Tabellen:
Problem mit "Permutationen":
aus 4 Titeln (Tabelle title - Bücher) und 3 Verlagen (Tabelle Publisher) werden 3*4=12 Ergebnisdatensätze!
View source
  1. SELECT title.titleId, title.title, title.publisherId,
  2.         title.YEAR, publisher.publisherId, publisher.publisher
  3.     FROM title, publisher
  4.  
  5. SELECT t.titleId, t.title, t.publisherId, t.YEAR,
  6.         p.publisherId, p.publisher
  7.     FROM title t, publisher p
Abfragen mit Filter (WHERE) für Datensätze mit gleicher publisherId:
Dadurch werden die passenden Bücher-Verlage Kombinationen aus den 2 Tabellen selektiert!
View source
  1. SELECT t.titleId, t.title, t.YEAR,
  2.         p.publisherId, p.publisher
  3.     FROM title t, publisher p
  4.     WHERE (t.publisherId = p.publisherId)
  5.     
  6. SELECT t.titleId, t.title, t.YEAR,
  7.         p.publisherId, p.publisher
  8.     FROM title t, publisher p
  9.     WHERE (t.publisherId = p.publisherId)    
  10.     ORDER BY t.titleId ASC    
  11.     
  12. SELECT t.titleId, t.title, t.YEAR,
  13.         p.publisherId, p.publisher
  14.     FROM title t, publisher p
  15.     WHERE (t.publisherId = p.publisherId)    
  16.     ORDER BY t.titleId DESC
  17.     
  18. SELECT t.titleId, t.title, t.YEAR,
  19.         p.publisherId, p.publisher
  20.     FROM title t, publisher p
  21.     WHERE (t.publisherId = p.publisherId)
  22.         AND (t.YEAR = 2017)
  23.     ORDER BY t.titleId DESC
  24.     
  25. SELECT t.titleId, t.title, t.YEAR,
  26.         p.publisherId, p.publisher
  27.     FROM title t, publisher p
  28.     WHERE (t.publisherId = p.publisherId)    
  29.     ORDER BY t.titleId DESC
  30.     LIMIT 3
Abschließende Tests mit Bearbeiten (UPDATE) und Löschen (DELETE) von Datensätzen.
Bitte für die passenden SQL-Befehle meine CRUD-Übersicht nutzen.

MySQL Dumps (Backups für Datenbanken / Tabellen - Importieren / Exportieren; Ebenen beachten!)
mit PhpMyAdmin DBs /Tabellen per Exportieren und Importieren
erzeugt Dateien mit und ohne Kompression: sql, zip gzip, bz2

Anm. zur Praxis beim Hosting:
beachten Sie, dass die meisten Hoster nicht das Zurücksichern (importieren) ganzer Datenbanken erlauben, daher sollten Sie zumeist die Tabellen "dumpen" und nicht die kompletten Datenbanken!

Probleme / PHP-Techniken (siehe php.ini - die PHP-Konfigurationsdatei):
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 hostingseitige Dumps problematisch sind (Menge der Daten bzw. Zeit):
Tool für "Problemfälle" siehe www.mysqldumper.de

Übung:  Datensätze Exportieren / Importieren
Datenbank books nach Vorbild "MySQL - Kofler - Normalformen"

In PhpMyAdmin mittels Schaltflächen Exportieren / Importieren beispielhafte Sicherungen und Wiederherstellungen
Hinweis zu Konsole (cmd, PowerShell): das MySQL-Client Tool zum Exportieren: mysqldump  (Imports mittels mysql )

Automatisierung auf Linux/Unix mittels Cron-Jobs (termingeplanten automatischen Ausführungen)
Analyse / Ansicht der SQL-Import-Datei mit geeignetem Editor (Notepad++ nutzen - bitte keine Windows Editoren wie Notepad oder Wordpad)
Insbesondere Hinweis auf Struktur-Ansicht mit MySQL-Datentypen (int, bigint, varchar) und Eigenschaften (Auto Increment AI, Primärschlüssel / Primary Key PK)

PHP & MySQL Projekte (lokal und beim Hoster)
Hosting Beispiele und Preise (1und1, Strato, Hosteurope), Webspeicher (GB), Anzahl Datenbanken
Spez. TYPO3-Hoster und -Agenturen: JWeiland, Mittwald

Erinnerung: PHP/MySQL-Projekte bestehen aus zwei technischen Bestandteilen:

  1. Projekt-Webordner: Webserver htdocs Verzeichnis(-struktur)
    kann beim Hoster leicht per (S)FTP genutzt/gesichert werden
  2. Projekt-Datenbank und deren Tabellen (Struktur + Daten)
    hier helfen jetzt MySQL-Dumps (Importe / Exporte)

In manchen Techniken (siehe z.B. CMS) gibt es dann auch Tools/Erweiterungen, die die Sicherungen komplett in einem Rutsch erledigen.

Funktionen

bzw. auch technisch: Prozeduren

Mit Konstruktion function lassen sich benutzerdefinierte Funktionen erstellen.

hier zwei einfache "Schablonen" - wir haben die zugehörigen Übungen im Seminar durchgeführt

View source
  1. function arrayAusgabe ($arr) {
  2.     // Ausgabe mit print_r
  3.     echo "<pre>";
  4.     print_r ($arr);
  5.     echo "</pre>";
  6. };
  7. function quadriereWert ($val) {
  8.     // Quadrat berechnen:
  9.     $quadrat = $val * $val;
  10.     return $quadrat;
  11. };
Zur Erinnerung: unsere Funktionen im Seminar: arrayAusgabe, quadriereWert 

include - require

... externe Dateien einbinden / inkludieren

Wir lagern die Funktionen (Prozeduren) in ein Extra-Skript aus und nutzen include (dt.: einfügen von externem Code; oder auch include_once) bzw. require (einfügen/benötigen oder auch require_once) in den PHP-Skripten, wo wir die Funktionen benötigen; so braucht man den Code nur einmal zu pflegen und zu warten und kann ihn mehrfach verwenden!

Sichtbarkeit von Variablen: $quadrat ist nur in function quadriereWert verfügbar - nicht im Hauptskript!
Hinweis auf PHP-Konstrukt global und das Superglobale (wortwörtliche) Array $GLOBALS[...]  (Beachten: kein Unterstrich) 

Prozedurale vs. Objektorientierte Technik (OOP)

hier eine kurze Gegenüberstellung:

Prozedural es werden die eingebauten (mysqli_connect, mysqli_query ) oder benutzerdefinierten Funktionen (s.o. arrayAusgabe) einzeln programmiert und aufgerufen
OOP wir nutzen bestehende oder selbst definierte Klassen und Objekte
modern, effizient, wiederverwertbarer Code - erspart Zeit

Beispiel für in PHP eingebaute Klassen:
Verzeichnisklasse dir (siehe Beispiel-Skript beim Datei- / Ordnerhandling)

MySQLi - Zugriff mit (verbesserter) MySQLi / PHP-Technik:
$dbobjekt = new mysqli ( ... ) ; $dbobjekt->query();

Empfehlung: OOP ist moderner und effizienter - also letztlich unser Ziel für die Nutzung von MySQL-Datenbanken mittels PHP/MySQLi

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

Wir fangen mit der "übersichtlicheren / direkteren" Programmierung mittels prozeduraler MySQLi-PHP-Technik an ...

Gästebuch mit PHP / MySQLi

Praxisbeispiel aus "PHP 7 und MySQL - Das umfassende Handbuch" (Autoren Hauser, Wenz); Rheinwerk-Verlag

ausführliche Darstellung der Basisskripte (prozedurale MySQLi-Technik)
Skripte befinden sich bei den digitalen Unterlagen zum Buch

OOP-Beispielskripte (Teil I)

... Objektorientierte Programmierungen am Beispiel von Grafiken / Texten

Übungen mit Beispielcode, der den Teilnehmern zur Verfügung gestellt und kommentiert wird

Einführung mit Beispiel basierend auf Grafik-Bibliothek (GD-Bibliothek):
"Grüne Wiese" (Objekt von Klasse field) mit "Torstangen" (rect) und Bällen (ball); PHP erstellt PNG-Grafik
Anm.: wir können mit PHP also auch Grafiken erstellen!

Alternativ: Textbasiertes Skript mit Klassen "Einzeller" und "Mehrzeller

 

  • DB Dump - ExportierenDB Dump - Exportieren
  • SQL Dump DateiSQL Dump Datei
  • DB Dump - ImportierenDB Dump - Importieren
  • SQL SELECTSQL SELECT
  • PHP IncludesPHP Includes
  • OOP GrafikbeispielOOP Grafikbeispiel

 

Tag 05

Freitag, 17.05.2019, 08.30 - 16.00 Uhr

Rekapitulation, TN-Fragen
Orga für freiwillige Prüfung im Modul PHP & MySQL

OOP-Beispielskripte (Teil II)

... Forts. der Übungen und Analysen zu Objektorientierten Programmierungen (OOP) am Beispiel von Grafiken / Texten

Skripte zum Thema aus Tag 04 analysiert... Themenschwerpunkte - Grundtechniken von OOP verstehen:

  • Klassen definieren mit class  
  • Eigenschaften (siehe public  bzw. klassisch/früher var ) und
    Methoden (siehe function ) für Klassen definieren
  • Magische Methode __construct()   nutzen
  • Vererbungen mit extends 
  • Statische Methoden klassenname::methode()   
    bzw. Statische Eigenschaften klassenname::var  nutzen

statische methoden 800px

Mit "Haltepunkten" (siehe print_r() , die() ) die Beispielskripte nachanalysiert

OOP-Tutorials

php.net - Klassen und Objekte Online Hilfe (Link)

Peter Kropff - Infoportal über diverse Online-Techniken (Link - Beispieldateien downloadbar)

Serie zu "OOP in PHP" - Ab-Heute-Programmieren - Infoportal HTML, CSS, JS:

Teil 1 - Grundlagen (Link)
Objekte werden mit Hilfe von Klassen definiert;
Klassen besitzen Eigenschaften (Attribute / Variablen) und Methoden (Funktionen)

Teil 2 - Klassen und Objekte (Link)
Klasse definieren mit class ;
Sichtbarkeit Variablen mit public , private
Methoden mit function ; aktuelles Objekt mit $this->  Operator;
neue Objekte ("Instanzen") erzeugt man mit new ;
Eigenschaften/Methoden für Objekt dann wieder mit -> Operator nutzen

Teil 3 - Eigenschaften, Methoden und Sichtbarkeiten (Link)
Eigenschaften mit public oder private  deklarieren (Sichtbarkeiten)
Anm.: in alten PHP-Codes statt public der Begriff var
public  -  Eigenschaften/Methoden überall verfügbar; Standard falls keine Sichtbarkeit definiert wird
private  -  Zugriff nur in der eigenen Klasse
protected  -  eine Mischung aus public/private: die Sichtbarkeit nur in eigener und den Kindklassen (siehe Vererbung)

Teil 5 - Hilfsfunktionen (Link)
class_exists()  -  prüft, ob eine entsprechende Klasse existiert
method_exists()  -  prüft ob Methode (Funktion) existiert
property_exists()  -  prüft, ob eine Eigenschaft (Variable) existiert
get_class() , get_parent_class()  -  bitte selbst recherchieren (Selbststudium/Vertiefung)

Teil 6 - Magische Methoden (Link)
__construct()  -  Konstruktor (früher: function mit gleichem Namen wie Klasse)
wird automatisch bei Objekterzeugung (new) ausgeführt
__destruct()  -  Destruktor; wird automatisch bei Objektlöschung (z.B. mit unset $objekt) ausgeführt
weitere magische Methoden: __get() , __set()  (Getter/Setter-Methoden)

Teil 8 - Vererbung Grundlagen (Link)
bestehende Klasse für neue Klasse nutzen: class auto extends fahrzeug ;
das spart dann richtig Arbeit und bringt Schwung in die Programmierung

OOP mit PHP / MySQLi

MySQL Datenbanken mit PHP - die objektorientierte Nutzung basiert auf Basisklassen
mysqli , mysqli_result  und mysqli_stmt  (Gesamtübersicht zu Technik MySQLi auf php.net)

Beispielhafte Praxis mit Datenbank "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:
Technik: Prepared Statements - wir nutzen also die Klasse mysqli_stmt  

Vorteil dieser "vorbereitenden" Kommunikation zwischen PHP und MySQL:

  • sicherere Verbindung und Abwicklung von Aktionen mit Datenbankserver
  • Gültigkeit (Validierung) vor Übertragung an den Datenbankserver
  • Abfragestruktur getrennt von den Parametern für die gewünschten Aktionen (SQL-Strings)
  • Geschwindigkeitszuwachs bei aufeinanderfolgenden gleichartigen Aktionen

Hier jetzt beispielhafter Code aus PHP-Online-Hilfe:

View source
  1. <?php
  2. $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
  3. /* check connection - errno Error Code - error Error String*/
  4. if (mysqli_connect_errno()) {
  5. printf("Connect failed: %s\n", mysqli_connect_error());
  6. exit(); // Alternative zu die(..);
  7. }
  8.  
  9.  
  10. $city = "Amersfoort";
  11.  
  12.  
  13. /* create a prepared statement */
  14. if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
  15. /* bind parameters for markers */
  16. $stmt->bind_param("s", $city);
  17. /* execute query */
  18. $stmt->execute();
  19. /* bind result variables */
  20. $stmt->bind_result($district);
  21. /* fetch value */
  22. $stmt->fetch();
  23. printf("%s is in district %s\n", $city, $district);
  24. /* close statement */
  25. $stmt->close();
  26. }
  27.  
  28.  
  29. /* close connection */
  30. $mysqli->close();
  31. ?>
Vergleichen Sie die Code-Bausteine mit unserem Praxisbeispiel zu PHP / MySQLi / Prepared Statement / OOP
und erkennen Sie "die Vorlage / das Praxisbeispiel"!

crud oop prep stmt 800px

Zuordnungen der Lösungen zu den Grundoperationen:

  • Erstellen neuer Datensätze: neu.php  
  • Auslesen der Datensätze:anzeigen.php 
  • Aktualisieren von Datensätzen: bearbeiten.php  
  • Löschen von Datensatz:loeschen.php 

Unterstützt wird das Praxisbeispiel durch:

  • Konnektion zum Datenbankserver / zur Datenbank:
    db_daten_aktuell.php  
  • SQL-Dumps (nach manuellem Erstellen der Datenbank news ):
    tabelle_aktuell_erstellen.sql , tabelle_aktuell_daten.sql  

Gesamtübersicht über die MySQLi Klassen auf der php.net-Seite (Link)
Eigener Beitrag auf diesem Infoportal zu PHP/MySQLi/Prepared Statement/OOP Technikumsetzung inkl. komplettem Beispielcode

 

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 und löst diese Verwaltung unterschiedlich (Mozilla Firefox: eingebaute DB sqlite; Microsoft Internet Explorer: Ordner für klassische Textdateien);

View source
  1. <?php
  2. if (!isset($_COOKIE["cook_1"])) {
  3. setcookie("cook_1", "Hallo", time()+10, "", "",0);
  4. echo "Cookie wurde gesetzt";
  5. // echo $_COOKIE["cook_1"]; // geht hier nicht!
  6. }
  7. elseif ($_COOKIE["cook_1"]) {
  8. echo "vorhandenes Cookie wurde gelesen: <br>";
  9. echo $_COOKIE["cook_1"],"<br>";
  10. }
  11.     
  12. echo "<pre>";
  13. // ein Server - hier localhost - kann nur seine
  14. // eigenen Cookies lesen!
  15. print_r($_COOKIE);
  16. echo "</pre>";
  17. ?>
Beim Firefox erhalten Sie über die Einstellungen - Register Datenschutz - Link Cookies eine Übersicht

Sessions: werden auf Server 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) auf C:\xampp\tmp
Verwaltung mittels Superglobal $_SESSION,

View source
  1. <?php // Registrierung von Session-Variablen
  2. // implizite Initialisierung der Session
  3. session_start();
  4. $id = session_id();
  5. $_SESSION['ArtNr']=100101;
  6. $_SESSION['BestNr']="999-8762";
  7. echo "implizite Initialisierung der Session: ";
  8. echo $id;
  9. echo "<br>Artikelnummer: ", $_SESSION['ArtNr'];
  10. echo "<br>Bestellnummer: ", $_SESSION['BestNr'];
  11. ?>
Befehle: session_start(), session_destroy, $id = session_id() für Prüfung wichtig!

 

Nach dem Seminar...

... ist vor dem Seminar / der Prüfung - ein paar Vorschläge zur Kursnachbereitung / Prüfungsvorbereitung:

  • Lehrgangsinhalte (diesen Beitrag) nachvollziehen
  • Übungen wiederholen und nach eigenen Ideen variieren
  • Manuelles Erstellen der MySQL-Datenbank books nach Anleitung "Kofler / Seminar"
  • OOP-Beispiele "Prepared Statements" wiederholen
    Anm: eigener Beitrag zum Thema OOP auf diesem Portal
  • Musterprüfung durcharbeiten

Hinweis: Musterlösungen nur Vorschlag! Auch abweichende Lösungen sehr wohl denkbar!

Dokumente und Unterlagen für TN

XAMPP-Versionen (Wochenanfang - Seminarende Trainer-XAMPP),
Screenshots der Seminartage (Bildergalerie/Diashow der Seminarwoche)
und Ordner-/Dateistrukturen + DBs mit Backup-Skripts

Die XAMPP-Ordner lassen sich auch komplett als selbstentpackendes 7z-Archiv sichern. Die Trainer-Version wird den TN ebenfalls als "Digitale Seminarunterlage" bereitgestellt.

xampp 7z archiv 800px

Hinweis: vor dem Archivieren bitte erst alle Zugriffe und Dienste beenden.

 

Feedbackbögen, TN-Bescheinigungen, letzte Fragen

 

... Screenshots zum Seminartag folgen ...

 

 

Ihr Trainer Joe Brandes

  Privates

... zu Joe Brandes

Sie finden auf dieser Seite - als auch auf meiner privaten Visitenkarte joe-brandes.de einige Hintergrundinformationen zu mir und meinem Background.
Natürlich stellt die IT einen Schwerpunkt in meinem Leben dar - aber eben nicht nur ...

joe brandes 600px

Private Visitenkarte / Technik: HTML & CSS /
  joe-brandes.de

  Jobs

... IT-Trainer & Dozent

Ich erarbeite und konzipiere seit über 20 Jahren IT-Seminare und -Konzepte. Hierfür stehen der "PC-Systembetreuer / FITSN" und der "CMS Online Designer / CMSOD". Ich stehe Ihnen gerne als Ansprechpartner für Ihre Fragen rund um diese und andere IT-Themen zur Verfügung!

becss 600px

BECSS Visitenkarte / Technik: HTML & CSS /
  becss.de

  Hobby

... Snooker & more

Wer einmal zum Snookerqueue gegriffen hat, der wird es wohl nicht wieder weglegen. Und ich spiele auch immer wieder gerne eine Partie Billard mit den Kumpels und Vereinskameraden. Der Verein freut sich über jeden, der einmal in unserem schicken Vereinsheim vorbeischauen möchte.

bsb 2011 600px

Billard Sport BS / Joomla 3.x /
  billard-bs.de

PC Systembetreuer ist J. Brandes - IT seit über 35 Jahren - Technik: Joomla 3.4+, Bootstrap 3.3.4 und "Knowledge"

© 2019 - Websitedesign und Layout seit 07/2015 - Impressum - Datenschutzerklärung
Nach oben