An der VHS Braunschweig findet ab dem 28.02.2022 ein Bildungsurlaub zum Thema "Dynamische serverseitige Webseiten mit PHP & MySQL" aus der Zertifikatsreihe "CMS Online Designer" statt.

php pexels 2703458 800px

[Pic: pexels-pixabay-270348 -  Php Screengrab - License CC0]

Anhand praktischer Beispiele wollen wir uns die aktuellen Techniken rund um PHP-Skripte und MySQL-Datenbanken erarbeiten.

Ort: BIZ WF, Raum MacOS
Zeiten: Mo, 28.02. bis Fr, 04.03.22; jeweils von 08.00 - 15.30 Uhr

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

Intro

Allgemeine Infos / Intro

  • Orientierungsphase
  • Hinweise zu Corona Regeln
  • Ablaufplanung Seminar:
    Pausenzeiten, Anfangs-/Endzeiten
  • Kurzdarstellung "CMS Online Designer"
    Freiwillige Prüfung möglich in Absprache mit interessierten Teilnehmern
  • Cobra-Shop mit Software für VHS-Schulungsteilnehmer

Roter Faden

Diesen Begriff hört man in meinen Seminaren häufiger ;-). Gemeint ist hier: Das grundsätzliche Verständnis der fraglichen IT-Techniken. Am Besten gleich so, dass man auch nach einer Zeit ohne Beschäftigung mit diesen Techniken sehr schnell wieder in Fahrt kommt.

Unter einem roten Faden versteht man ein Grundmotiv, einen leitenden Gedanken, einen Weg oder auch eine Richtlinie. „Etwas zieht sich wie ein roter Faden durch etwas“ bedeutet beispielsweise, dass man darin eine durchgehende Struktur oder ein Ziel erkennen kann.

Quelle: Wikipedia - Roter Faden

Eine sehr grundsätzliche Erfahrung in der IT ist, dass sich natürlich die IT modernisiert. ABER: keine Entwicklergemeinschaft setzt sich dauernd hin und erfindet das Rad neu. Wir werden uns also erarbeiten, wie WordPress tickt und dann profitieren wir einfach mal ein paar Jahrzehnte davon ;-).

Die Themen im Groben:

  • PHP Entwicklungsumgebung (Installation und -Betrieb)
    in windowsbasierter Serverumgebung XAMPP-CMSOD
  • PHP Programmierungen (Einstieg)
    Syntax und Strukturen, Arrays, Funktionen, OOP, Interaktionen
  • Datenbanken MySQL/MariaDB (Dynamische Webprojekte mit Datenbanken)
    die Datenbank per PHP anbinden, nutzen und administrieren

Und natürlich schauen wir vor Allem auch, das wir Ihre Topics im Seminar klären.

Quellen - Infos durch J. Brandes

Wichtig: Lassen Sie sich zu Beginn des Seminars nicht von der Fülle an Infos in diesem Seminarbeitrag erschlagen. Es handelt sich auch um viel Zusatzinfos und Infos zu unserer Entwicklungsumgebung XAMPP-CMSOD, die sich im Laufe des Seminars immer wieder mal nachschlagen/nutzen lassen.

Die Inhalte der Seminarewoche sind auch nicht nur bereits über die Seminartage/Seminarabschnitte aufbereitet, sondern ebenfalls oft mit Zusatzinfos versehen. Und natürlich ergeben sich ja nach Seminarverlauf leichte Abweichungen. Am Ende des Seminars sind dann alle Infos der Seminarwoche für Sie komplett.

 

Win10

Wir müssen unsere Arbeitsplatzrechner optimal für die Umsetzungen mit Content Management Systemen (oder auch anderen Online-Techniken) vorbereiten.

Windows-Umgebung konfigurieren

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

Windows Einstellungen - Dateierweiterungen einblenden
Anzeige der Dateiendungen mit Windows Explorer;
Windows Vista / 7 / 8 / 10: Organisieren - Ordner- und Suchoptionen - Register Ansicht ...

Grund für die Konfiguration: Dateien heißen bild.jpg oder bild.jpeg oder bild.JPG - wir müssen das genau wissen!

Software für Seminar

Hier folgt eine beispielhafte Auflistung. Die Programme lassen sich einzeln manuell installieren oder man nutzt Software-Installer wie Chocolatey (s.u.).

  • Browser: (s.a. Chromium-basierte Browser Chrome, Edge, ...)
    Mozilla Firefox  (Mozilla Firefox Link)
    Grund für diverse Browseralternativen:
    separate Browser für CMS Verwaltung (Backend, Dashboard) und Website (Frontend) oder Design/Layout-Tests
  • 7-Zip (7-Zip Link)
    Packer / Entpacker - Microsofts eigene Zipper-Technik ist zu langsam/ineffizient
  • Visual Studio Code (MS VS Code Link)
    Profi-Tool aus dem Hause Microsoft für verschiedene Betriebssysteme
    Anm.: auch ohne Admin-Rechte installierbar (User-Installer)
  • Notepad++ (NP++ Link)
    Texteditor (für Skripte, Konfigurationsdateien oder auch HTML/CSS/JS)
    Empfehlung: 32-Bit-Variante installieren für volle Kompatibilität zu allen NP++ Plugins
  • Git (Git Link)
    Software Versionierung - über Git kann man sehr einfach komplette Umgebungen und Techniken versionieren / bereitstellen (klonen)
  • Zeal (Zeal Link)
    Docsets (Manuals) für Techniken wie PHP, MySQL oder auch HTML, CSS und Co
    Warnung: da können schnell mal 5 bis 10 GiB an Daten auf der "Platte" landen!
  • PowerToys (MS PowerToys - Github Link, Dokumentation PowerToys)
    Diverse kleinere/größere Helferlein:
    Bildoptimierungen/Verkleinerungen, Farbwähler, Vorschau auf SVG im Explorer, Dateien umbenennen, Fenstermanager (Fancy Zones), ...

Die Software wird von mir auch oft schon fertig lokal zum Installieren verteilt, um Zeit zu sparen.

Bei häufigeren Einrichtungen von Entwicklungsumgebungen möchte man das gerne noch effizienter gestalten.
Das führt uns zum Paketmanagement mit Chocolatey unter Windows.

Chocolatey.org

Profitipp: Chocolatey zur Installation der gewünschten Tools

Schnellanleitung Softwareinstallationen mit Chocolatey Paketmanagement
Anm.: wir entscheiden uns für die systemweite Nutzung der Installationen!

Das bedeutet, dass wir die PowerShell (Konsole) für Chocolatey Befehle immer mit Adminrechten nutzen.

{code lang:powershell showtitle:false lines:false hidden:false}# PowerShell vorbereiten: (ggf. schon auf Trainingssystemen konfiguriert)
# ======================================================================
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 
Get-ExecutionPolicy # ergibt RemoteSigned

# Chocolatey bereitstellen: (ggf. schon auf Trainingssystemen installiert)
# ======================================================================
# in Admin-PowerShell Copy&Paste von Chocolatey Seite
# https://chocolatey.org/install
# einfach die Copy&Paste Zeile mit Maus anklicken und in der
# PowerShell Konsole mit rechter Maus wieder einfügen
# ======================================================================
# hier die fragliche Installzeile für die Admin-PowerShell
# Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
# die Chocolatey Install Seite zeigt auch, wie man die install.ps1 einfach
# manuell herunterladen kann, um diese vorher zu inspizieren!
# ======================================================================
# Chocolatey nutzen/testen
# ======================================================================
choco version
choco list --local-only       # oder kurz: choco list -l
# Alle Packages für Chocolatey online recherchieren:
# https://community.chocolatey.org/packages
# ======================================================================
# Chocolatey CMSOD Installationen:
# Wichtig: Admin-PowerShell nutzen
# ======================================================================
# Browser (mindestens 2 Browser für Entwicklungsumgebungen nötig)
# ======================================================================
choco install -y firefox
choco install -y chromium
# oder auch ungoogled-chromium (!)
# choco install -y opera  # hat aktuell leichte Fehlermeldungen
# ======================================================================
# Tools: Editor, Zipper, Windows Werkzeuge, Git
# ======================================================================
choco install -y notepadplusplus --x86
choco install -y vscode
choco install -y 7zip
choco install -y powertoys
choco install -y git
choco install -y riot
choco install -y zeal 
# ======================================================================
# Experten-Tools für Websiteentwicklungen (siehe SASS und Co)
# ======================================================================
choco install -y nodejs
choco install -y python3{/code}

Der Clou: die gesamte gewünschte Software ließe sich auch mit einem Einzeiler installieren (oder natürlich automatisch per Skript).

Und natürlich installiert man sich nur die wirklich benötigte Software.
Für die Softwareverwaltung reichen dann einfache Befehle  
choco /? | choco outdated | choco list | choco list -l | choco install | choco install /? | choco upgrade swname | choco upgrade all ... mit der Windows PowerShell.

Client-/Server-Umgebung

Fachbegriff: Client/Server
Ein Server bietet (als Software) eine Dienstleistung (einen Service) an. Diesen Dienst nutzen wir mittels eines passenden Clients. Der Client fungiert als Zugriffssoftware für den gewünschten Dienst.

Übersichtstabelle:

Dienste Server Client
World Wide Web (WWW)
Apache
Microsoft IIS
Nginx
lightpd
Mozilla Firefox
Chromium, bzw. Chromium-basierte Browser:
MS Edge, Google Chrome
Vivaldi (Opera-basiert), ...
Datenbankserver (DB)

MariaDB
MySQL
PostgreSQL
MSSQL

PhpMyAdmin (PHP-basierte Skriptsammlung)
Konsolenanwendung mysql für den Zugriff per Teminal
eigene PHP-Skripte
GUIs: HeidiSQL, MySQL Workbench, ...

Im Seminar werden Konfigurationsbeispiele dargestellt.

Die Verbindung zwischen den beiden Seiten wird meist durch eine Netzwerkverbindung realisiert und befindet sich also dann auf unterschiedlichen physikalischen Rechnern.

Server

Wir erarbeiten unsere Projekte lokal an unserem Windows-System. Die nötigen Services (Webserver und Datenbankserver) laufen also lokal auf unseren Entwicklungsrechnern mit Windows!

XAMPP für Windows (Xampp Apachefriends.org Link - bitte nicht manuell von apachefriendes.org downloaden! Der XAMPP für das Seminar wird maßgeschneidert von Trainer J. Brandes als XAMPP-CMSOD bereitgestellt!

Die gesamte Serverumgebung ist also bereits fix & fertig vorbereitet und muss lediglich per Doppelklick in Ordner C:\xampp-cmsod entpackt werden. Die ausführliche Anleitung folgt im Abschnitt WAMP (Akronym: Windows Apache MySQL/MariaDB PHP).

Client

Die Clientseite ist in Gänze (wieder) unser Windows Betriebssystem und die unterschiedlichen Programme für Web- und Datenbankserver.

(OPTIONAL) Windows hosts Datei  

Anm.: der Einsatz von hosts-Technik(en) ist normalerweise nur in den CMSOD TYPO3-Seminaren zwingend von Nöten.

Aber vielleicht möchten wir diese Technik (Anm.: sehr nah am späteren Hosting) auch mit anderen Sites umsetzen.

Es fehlen hierzu auf der Client-Seite noch wenige Zusatzkonfigurationen, damit wir unsere Projekte auch mit sauberen URLs nutzen können.

WICHTIG: Die folgenden Konfigurationen bitte mit Adminrechten umsetzen (Windows - Als Administrator ausführen / Benutzerkontensteuerung/UAC)

Hinweis: beispielhafte hosts-Datei wird von Trainer verteilt - bzw. hier als abgespecktes Beispiel für eigene Anwendungen!
Pfad für etc-Hosts Datei auf Windows Systemen:  C:\Windows\System32\drivers\etc\hosts  

Einträge für die gewünschten VHosts erstellen:{code lang:bash showtitle:false lines:false hidden:false}# den lokalen CMSOD-XAMPP per Domainname ansprechen können:
127.0.0.1 cmsod.local www.cmsod.local

# Konfigurationen - hier:
# Beispiele für wordpress Site
# -------------------------------------------------
# Domain: wordpress-demo.local
# Alias: www.wordpress-demo.local
# Webserver: C:\xampp-cmsod\htdocs\typo3\www.wordpress-demo.local
# Datenbank: wordpress_demo
# Einsatz: eine Umsetzung wie für das TYPO3-Seminar bzw. beim Hoster hier auch für WordPress
127.0.0.1 wordpress-demo.local www.wordpress-demo.local
# am Besten auch gleich für weitere Seminarseite den VHost eintragen:
127.0.0.1 wordpress-seminar.local www.wordpress-seminar.local{/code}Diese virtuellen Hosts (VHosts) müssen dann noch auf Serverseite (Apache Webserver) entsprechend passend konfiguriert sein! Siehe C:\xampp-cmsod\apache\conf\extra\httpd-vhosts.conf

Kommen wir jetzt zu den nötigen Schritten und Anleitungen für die Inbetriebnahme unserer Serverumgebung XAMPP-CMSOD.

 

WAMP

Serverumgebung: WAMP - Windows AMP

  • LAMPPLAMPP

XAMPP für Windows
maßgeschneiderte Seminar-Version basierend auf XAMPP 7.4.14 mit PHP 7.4.14

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

Bei Hostern: klassisches LAMP-System (Linux - Apache - MySQL/MariaDB - PHP)

Alternative Windows: als WAMPP mit einer Windows Server Betriebssystem Basis und dem IIS (Internet Information Server) als Webserver und dem MSSQL-Server als Datenbankserver

XAMPP-CMSOD installieren / entpacken

Vorgehensweise im "Windows-basierten" Seminar mit XAMPP-CMSOD-Server  für Windows:

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

Infos zum (aktuellen) XAMPP-CMSOD für meine Seminare:

Archivname: xampp-cmsod-40-7.4.14-TEILNEHMER-20210124-1454.exe
SHA256-Prüfsumme: 3EFADF0076BBC0F2700335D6FBEE56AFE8DFBF8A8B2AE9BE419DE82B267BFBD0

Die Prüfsummen können in der PowerShell evaluiert werden.
Tipp: Umschalten-Taste und Rechte Maus im Ordner zeigt PowerShell im Kontextmenü - Aufruf im Ordner des Archivs:

$a = Get-FileHash -Path .\xampp-cmsod-40-7.4.14-TEILNEHMER-...exe -Algorithm SHA256
$a.Hash

Das Trainer-XAMPP-Archiv wird nur bei Notwendigkeit (siehe PHP-Version 7.4 zuletzt notwendig für TYPO3 v11) aktualisiert.
Die eingebauten Techniken (s.u. Grafiktools, ...) könnten auch selber aktualisiert werden.

Installation XAMPP-CMSOD

Hier folgt die Kurzanleitung für die Bereitstellung (Installation bedeutet hier ja einfaches Entpacken in Zielordner) und Nutzung unserer XAMPP-CMSOD Serverumgebung.

Schritte für die Inbetriebnahme de XAMPP-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 wurden auf dieses lokale Verzeichnis optimiert.
    Tipp: eigene XAMPP-Testumgebungen kann man dann einfach in anderen Verzeichnissen wie Standardpfad C:\xampp unterbringen.
  4. Starten / Doppelklicken  xampp-control.exe (Kontrollcenter)
  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 abgebrochen werden, da wir keine Zugriffe auf unsere lokalen 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 dringlichst ab!
  6. Browser / Webclient - Starten eines Browsers Ihrer Wahl mit Adresse localhost  
    Hinweis 1: manche Browser verlangen bei solchen URLs die komplette Angabe inklusive http:// in der Adresseneingabezeile.
    Hinweis 2: portable Programme wie Firefox (s. PortableApps.com Portal) nutzen keinen Browser-Cache! 
    Mann kann einen installierten und einen portablen Firefox nicht gleichzeitig nutzen!

Hier mal eine Übersicht nach dem "Auspacken/Installieren":

xampp cmsod darstellung 2021

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

"Frisches Windows" ggf. mit Error bei Xampp-Nutzung

Bei Tests auf frischen Windows 10 Installationen (1909 bzw.19H2, 2004/20H1, 20H2, 21H1) wird ggf. ein Fehler beim Starten des XAMPP Controlcenter (xampp-control.exe) angezeigt:
"httpd.exe - Systemfehler (...Code kann nicht fortgesetzt werden, da VCRUNTIME140.dll nicht gefunden ...)" 
Die nervigen Fehler-Popups müssen dann erst einmal mit mehrfachen ESC weggeklickt werden.

vcruntime fehler xampp 800px

Es muss die "Microsoft Visual C++ Redistributable für Visual Studio 2015, 2017 und 2019" Laufzeitumgebung installiert werden. Die nötige Installationsdatei (aktuell: VC_redist.x64.exe in Version 14.29.30037.0) kann leicht mit Suche nach "vc_redist.x64 2019" gefunden werden und muss mit Adminrechten installiert werden (Neustart empfohlen).

 

(OPTIONAL) VHosts (wie z.B. für CMS-Installationen)

Hinweis: beispielhafte httpd-vhosts-Datei ist bereits in dem vorbereitetem XAMPP-CMSOD vorhanden!

VHost-Konfigurationsdatei für den Apache: C:\xampp-cmsod\apache\conf\extra\httpd-vhosts.conf  

Jetzt noch einen nötigen Eintrag für die gewünschte VHost-Domain  www.wordpress-demo.local  bereitstellen:
Tipp: Vorlage des VHost-Abschnitts für www.wordpress-demo.local kopieren und anpassen für eigene Projekte {code lang:html5 showtitle:false lines:false hidden:false}<VirtualHost *:80>
ServerAdmin webmaster @ cmsod.local
DocumentRoot "C:/xampp-cmsod/htdocs/typo3/www.wordpress-demo.local"
ServerName wordpress-demo.local
ServerAlias www.wordpress-demo.local
     ...
</VirtualHost>{/code}Anm.: hier nicht alle Zeilen dargestellt; die Kommentarzeilen wurden weggelassen.

Infos zum CMSOD XAMPP

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.

Und schon kann es losgehen...

 

Tag 01

Montag, 28.02.2022, 08.00 - 15.30 Uhr

Allgemeine Infos / Intro

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

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 (Request) - Server bereitet Daten gemäß Request auf und übermittelt 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.4.14 mit PHP 7.4.14

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.46 10.4.17-MariaDB
mit PhpMyAdmin 5.0.4
7.4.14

Im Seminar werden Konfigurationsbeispiele dargestellt.

php.ini - Konfiguration für PHP

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

Die Firma Zend ist maßgeblich beteiligt an der PHP Entwicklung. Zend bietet auch diverse Profi-Lösungen für PHP-Techniken an.

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

Konfiguration für PHP-Fehler

Eigenes "Kapitel" / eigener Abschnitt (engl.: section) in der php.ini für "Error handling und logging" (ca. ab Zeile 410 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 mögliche Voreinstellung in XAMPP)

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)

Übersicht aus php.ini :  {code lang:ini showtitle:false lines:false hidden:false}; Error Level Constants:
; E_ALL - All errors and warnings (includes E_STRICT as of PHP 5.4.0)
; E_ERROR - fatal run-time errors
; E_RECOVERABLE_ERROR - almost fatal run-time errors
; E_WARNING - run-time warnings (non-fatal errors)
; E_PARSE - compile-time parse errors
; E_NOTICE - run-time notices (these are warnings which often result
; from a bug in your code, but it's possible that it was
; intentional (e.g., using an uninitialized variable and
; relying on the fact it is automatically initialized to an
; empty string)
; E_STRICT - run-time notices, enable to have PHP suggest changes
; to your code which will ensure the best interoperability
; and forward compatibility of your code
; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
; initial startup
; E_COMPILE_ERROR - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR - user-generated error message
; E_USER_WARNING - user-generated warning message
; E_USER_NOTICE - user-generated notice message
; E_DEPRECATED - warn about code that will not work in future versions
; of PHP
; E_USER_DEPRECATED - user-generated deprecation warnings
;
; Common Values:
; 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)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL

; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development, but
; it could be very dangerous in production environments. Depending on the code
; which is triggering the error, sensitive information could potentially leak
; out of your application such as database usernames and passwords or worse.
; For production environments, we recommend logging errors rather than
; sending them to STDOUT.
; Possible Values:
; Off = Do not display any errors
; stderr = Display errors to STDERR (affects only CGI/CLI binaries!)
; On or stdout = Display errors to STDOUT
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/display-errors
display_errors = Off{/code}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  

Die "Zahlencodes" für die Error-Einstellungen lassen sich nachschlagen: https://www.php.net/manual/de/errorfunc.constants.php  

Weitere Schalter für die PHP-Fehlerausgaben und -Behandlungen:

display_errors (Ein-/Ausschalten der Meldungen)

display_errors = Off   (als Voreinstellung XAMPP-CMSOD)

Für PHP-Programmierungen und Übungen: PHP Fehler einsschalten
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-Kontrollcenter!

Web-Dokumente-Ordner

Erkenntnis / Zuordnung:
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 für das Arbeiten mit PHP-Dokumenten:

  • keine Umlaute
  • keine Sonderzeichen
  • Groß- und Kleinschreibung beachten (also Empfehlung: erst einmal 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.

Editor für PHP

Hier gibt es eine Vielzahl an Möglichkeiten und Alternativen. Eine Auswahl sollte sich an folgenden Kriterien orientieren:

  • Verfügbarkeit für diverse Betriebssysteme
  • Kosten
  • OpenSource
  • Lizenz
  • Ausbaufähigkeit / Erweiterbarkeit
  • Dokumentation

Für meine CMSOD-Seminare entscheiden wir uns für die folgenden Editoren.

Visual Studio Code

... von Microsoft für alle Plattformen (Betriebssysteme) als Einstieg in das professionelle Code-Editing verfügbar gemacht und bitte nicht mit der kostenpflichtigen Software Visual Studio verwechseln.

Die Software wird als OpenSource auf Github (https://github.com/microsoft/vscode) entwickelt und steht unter der MIT-Lizenz zur Verfügung.

Seit geraumer Zeit nutze ich also in Seminaren den Visual Studio Code von Microsoft. Ein kleiner Nachteil liegt in der Professionalität also Mächtigkeit des Editors. Aber wir haben ja auch genügend Zeit ihn besser kennen zu lernen und die Vorteile überwiegen deutlich.

Wer keine Lust auf Software direkt von Microsoft hat, kann einfach zur Telemetrie-freien Variante Codium greifen. Denn die Software ist ja grundsätzlich OpenSource und man kann völlig frei über die Codebasis verfügen, was im Projekt Codium eben auch getan wird.

Die Telemetrie-Funktionen (engl. telemetry - als Suchbegriff) lassen sich allerdings auch einfach schnell über die Konfigurationen des Editors ( Strg + , ) suchen, finden und deaktivieren.

Anm.: in Seminaren tendiere ich zum Einsatz von Code (statt Codium), da wir bei Code mit weniger Problemen (bzw. Umwegen) bei Erweiterungen und Einrichtungen zu kämpfen haben.

Notepad++

... der Klassiker für das kostenlose Editing auf Windows Betriebssystemen.

Tipps für einen weiteren Editor für das Seminar - z.B. für Copy & Paste Zeug aus Hilfen/Browsern, ...
Anm.: bitte 32-Bit-Variante nutzen wegen PlugIns / Kompatibilitäten

Hilfe in 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)

Zeichencodierungen

Die IT-Systeme kennen nur 0 und 1, also verwenden Softwaresysteme "Tabellen", die 0/1-Kombinationen dann Zeichen zuordnen.

Beispiele:

  • ASCII
  • ANSI
  • ISO-8859
  • UTF-8 (und andere UTF-Varianten; auch als Unicode bezeichnet)

Nur bis 7 Bit also den ersten 128 Zeichen sind diese "Nachschlagetabellen" identisch.

Empfehlung: bitte in UTF-8 (bzw. UTF-8 ohne BOM) speichern mit empfohlenen Editoren - gerne dann später in Dokumenten 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 sauber verlinkte exteren 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 unterschiedliche Paare öffnender und schließender Tags, die in PHP verwendet werden können.

Empfehlung: <?php ... ?>

Eine Ausnahme bilden reine PHP-Skripte ohne HTML-Tagging: hier sollte man nur den Anfang der PHP-Deklaration <?php .. nutzen und das Schließen mit ?>  einfach weglassen.
Grund: in einer solchen Datei können nachfolgende Leerzeilen zu Problemen werden

Die Einbindung mit <script>-Tag oder über ASP-Tags ist mit Einführung von PHP7 nicht mehr gewünscht! (Link)

Tipp (Anm.: später im Seminar...) für komplettes HTML5-Gerüst: beginne Dokument mit  html:5  und Tab  (Tabulator)
Hinweis Notepad++: Kombination für Emmet konfigurierbar z.B.  Strg + , ← Tastenkombination mit Strg und Komma; Erkl.: Erweiterung Emmet in Notepad++

Kommentare in PHP

Einzeilig mit // , mehrzeilig mit /* ... */ 

In professionellen PHP-Frameworks werden spezielle Kommentartechniken mit automatischen Dokumentationserstellungen genutzt (siehe phpDoc).

Wir nutzen das Auskommentieren von Zeilen zu Testzwecken (Code aktivieren/deaktivieren) - oder natürlich zur Erläuterung von Code im Skript (wichtig für spätere Nachvollziehbarkeit und Analyse / Anpassung)

PHP-Status und -Infos

Version und Konfiguration unserer Umgebung ermitteln mit phpinfo() - unser erstes Skript (Link php.net)

Ein kleines Skript erledigt die Arbeit{code lang:php showtitle:false lines:true hidden:false}<?php
    // Kommentar: Wir wollen die PHP-Server-Konfiguration auslesen!
    phpinfo();
?>{/code}Achten Sie bei Ausdrücken/Anweisungen in Skriptsprachen generell auf das hier auch abschließende ;  (Semikolon)

Ein bisschen Hintergrund zum technischen Begriff Ausdruck:
man könnte sich vorstellen, dass man den gesamten Code auch einfach mal auf eine Zeile schreibt und dann die einzelne Logik (oder auch Schleifen, Verzweigungen) immer noch definiert/erkennbar sein müssten.

PHP Sprachkonstrukte (Einstieg)

Texte ausgeben

echo (Sprachkonstrukt zur Übergabe von Strings an Browser - Link php.net)

Nutzung: Ausgabe von Text und Variablen (Variablen beginnen immer mit $)

Konstanten werden mit define vereinbart.

Technik zu Anführungszeichen:

  • Bei Verwendung von doppelten Anführungszeichen (double quotes) werden integrierte Variablen in der Ausgabe (im String) ausgewertet!
  • Die einfachen Anführungszeichen (single quotes) erlauben die Verschachtelung mit doppelten Anführungszeichen (siehe HTML-Code class="top").

Außerdem kann man Texte / Strings über den Operator .  (String-Operator Punkt) 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

Datum / Uhrzeit

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

mktime  (Funktion zum Erstellen von Datumswert 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\" 

Gerade mit \n und \t lassen sich saubere Quellcode erzeugen. In Zeiten von Browser-internen Code-Inspektoren sicherlich nicht mehr ganz so wichtig, aber es sollte an dieser Stelle auf jeden Fall genannt werden.

Vordef. PHP-Konstanten und Superglobals

Magische PHP-Konstanten - Link php.net)

  • __LINE__
  • __FILE__
  • PHP_VERSION
  • PHP_OS

Einsatzzweck: Nutzung für "Debugging" und Analyse von PHP-Skripten

Supergloballe Arrays - eine erste Annäherung mit ...

$_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)

Bei PHP-Arrays handelt e sich um 2-dimensionale Tabellen mit

  • Spalte für Index (engl. index) und
  • Spalte für Inhalt / Wert (engl. value)

arrays 800px

Nummerische vs. Assoziative Arrays:

  • 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 (Anm.: im Quellcode ist Array 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!

 

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 wird den TN der jeweilige Code "fertig" zur Verfügung / zum Testen und Anpassen bereitgestellt.

 

Screnshots aus Seminarvorwoche: (die TN erhalten die gesamte Screenshotsammlung der Woche - über 1000 Screenshots)

  • PHP CodePHP Code
  • Script Hallo WeltScript Hallo Welt
  • PHP KommentarePHP Kommentare
  • VS Code - CompletionVS Code - Completion
  • ZealZeal
  • Array - foreachArray - foreach

Screenshots aus Seminarvorwoche:

  • 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, 01.03.2022, 08.00 - 15.30 Uhr

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

PHP-Hilfen nutzen

Aufruf der Online-Hilfe von PHP-Webportal php.net. Hilfen im PHP-Editor nutzen.
Übung: Bereitstellung der PHP-Hilfe als CHM-Datei - wichtig: CHM-Dateien müssen seit Windows XP SP2 erst in Kontextmenü "zugelassen" werden.

Link zu (auch deutschen) PHP-Dokumentationen - hier der Direktlink zum deutschen PHP-Dokuportal 

In den letzten Jahren haben Entwickler auf ihren Plattformen immer mehr Werkzeuge integriert, um die jeweiligen Dokumentation flexibel nutzbar zu machen.

Zeal

Eine dieser Entwicklungen ist die Software Zeal (für Windows, MacOS, Linux). Mit der Software Zeal hat man Zugriff auf sogenannte Docsets. Hierbei handelt es sich einfach nur um einen entsprechend technisch verfügbar gemachte Variante der Dokumentation. Die PHP Dokumentation lässt sich hiermit offline über Zeal verfügbar machen. Die Amtssprache von Zeal ist Englisch.

Es gibt auch Erweiterungen für VS Code, um direkt aus PHP-Dokumenten Zugriff auf die Nachschlagelisten der jeweiligen Docsets zu erhalten.

Verschachtelte Arrays

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

arrays verschachtelt 800px

Ü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{code lang:php showtitle:false lines:true hidden:false}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, Währung:
    // 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>";
}{/code}Anm.: das sind wichtige Grundtechniken für weitere Anwendungen mit PHP und später der Anbindung an Datenbanktechnik (MySQL/MariaDB).

Übung zu verschachtelten Arrays

Tabelle zum CMSOD Specialist:

ModulModulnameAnmerkungen
I HTML & CSS statische Webseiten
II PHP & MysQL dynamische serverseitige Skripttechnik  + Datenbank
III 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{code lang:php showtitle:false lines:true hidden:false}// 1-mal-1 mit verschachtelten Schleifen
echo "<table border=\"1\">";

for ($i = 1; $i <= 10; $i++) {
    echo "<tr class=\"klasse4reihe\">";
    for ($j = 1; $j <= 10; $j++) {
        $ergebnis = $i * $j;
        echo "<td>$ergebnis</td>";
    }
    echo "</tr>";
}

echo "</table>";{/code}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){code lang:php showtitle:false lines:true hidden:false}$anzahl = 5;
$ort = 'Baum';
$format = 'Es sind %d Affen auf dem %s';
sprintf($format, $anzahl, $ort);{/code}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 Windows-AMP-System (WAMP) abweichend von Hostern (dort: LAMP)
Grund: Linux mit anderen Datei-/Ordnerberechtigungen und anderem Benutzerkonzept

 

MySQL (Teil I)

... eine erste Annäherung an den Datenbankserver

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  - 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{code lang:sql showtitle:false lines:true hidden:false}SHOW DATABASES;
USE mysql;
SHOW TABLES;
SHOW FIELDS FROM user;
SELECT * FROM user;
SELECT Host, User, Password FROM user;{/code}MySQL-Konsole mit quit verlassen!

Verwaltung mittels diverser "Clients" möglich:

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

Nötige Zugangsdaten zur Datenbank-Verbindung (DB-Connection zum Datenbankserver)

Hier: Infos für den Zugriff auf eine Datenbank bei unserem XAMPP-CMSOD im Vergleich zu Hoster-DB

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!

Das Arbeiten mit Datenbanken und deren Tabellen lässt sich auf vier grundsätzliche Techniken konzentrieren...

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 werden wir durch entsprechende PHP-Skripte umsetzen lassen.

 

Screnshots aus Seminarvorwoche: (die TN erhalten die gesamte Screenshotsammlung der Woche - über 1000 Screenshots)

  • Display Errors ONDisplay Errors ON
  • Arrays - verschachteltArrays - verschachtelt
  • Arrays - AusgabenArrays - Ausgaben
  • Hilfen: online vs. ZealHilfen: online vs. Zeal
  • DB Books entwerfenDB Books entwerfen
  • TabellenstrukturTabellenstruktur

Screenshots aus Seminarvorwoche:

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

 

Tag 03

Mittwoch, 02.03.2022, 08.00 - 15.30 Uhr

nochmals "ordentliche" Rekapitulation, TN-Fragen

Aus den folgenden Formularen benötigen wir die Methode GET für die Grundkonzepte dynamischer Webseiten: per URL wird dann die Auslieferung von Seiteninhalten dynamisch gesteuert.
Wir erhalten dann Dynamische Webseiten!

Formulare

Die Nutzung und Auswertung von HTML-Formularen mit PHP hat die große Annahme von PHP in der Online-Entwicklergemeinschaft maßgeblich mit begründet.

HTML-Tags für Formulare (Formulartags und Styling siehe Seminar HTML & CSS):

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

forms 800px

Zur Erinnerung: Seminarkonzentration auf PHP und nicht auf die HTML-Techniken.

POST-Methode

Eigenschaften:

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

GET-Methode

Daten aus Formulare werden per URL übergeben und lassen sich als Favoriten speichern (Bookmark, Link)

Seit PHP 5.3 keine übergebenen Variablen "wie selbstverständlich" (also global!) über einfachen Variablennamen verfügbar! Man hat die sicherheitstechnisch fragliche PHP-Konfiguration  register_globals = On  entfernt!

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

Speziell: Bereinigung von Eingaben mittels Funktion  htmlspecialchars - dann werden auch erst einmal irgendwelche JavaScript-Codes entschärft.

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:

Die sich selbst aufrufenden Formulare (bzw. allgemein PHP Dateien) mit Hilfe von Superglobal $_SERVER - also $_SERVER['PHP_SELF'] nutzen.

Dynamische Webseiten

Für das Verständnis zu "Dynamischen Websites" eignen sich einfach und kompakte Beispiele am Besten. Und wir lassen natürlich auch erst einmal die Dat

Beispiel 01 - Diashow

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

Spezielle Kurzschreibweise für if-then-else-Struktur  $pic_nr = $_GET['nr'] ? $_GET['nr'] : 1;

Coeschnippsel aus Diashow - das Skript ausgiebig analysieren und testen{code lang:php showtitle:false lines:true hidden:false}// Template laden
$output_html = implode('', file('template.htm'));
// CSV-Datei einlesen - ergibt Array $pics
$pics = file($_GET['fn']);
// Nummer des anzuzeigenden Bildes festlegen (Kurzschreibweise if):
$pic_nr = $_GET['nr'] ? $_GET['nr'] : 1;
// hier die LANGE Schreibweise mit if-then-else:
if ($_GET['nr']) {
    $pic_nr = $_GET['nr'];
} else {
    $pic_nr = 1;
}
// Bilddatensatz laden - Dateiname / Beschreibung zuordnen aus $pics
list($filename, $description) = explode(';', $pics[$pic_nr-1]);{/code}Die verschiedenen Codeteile immer wieder auch per eingebundenen Testzeilen (siehe echo , print_r , die ) genauer betrachten und analysieren.

Beispiel 02 - 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 kann man auch beispielhaft mit Joomla-CMS zeigen, wenn man die automatische Auslieferung von Suchmaschinenfreundlichen URLs (SEF) deaktiviert.

phpMyAdmin

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

Die PHP-basierte Toolsammlung für DB-Server ist 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 in phpMyAdmin Dashboard beachten: (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

Eine Änderung des Anzeigedesigns ist möglich - schnelle Navigation über Breadcrumb-Leiste oben beachten.

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

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)

Screnshots aus Seminarvorwoche: (die TN erhalten die gesamte Screenshotsammlung der Woche - über 1000 Screenshots)

  • htmlspecialchars()htmlspecialchars()
  • SuperglobalsSuperglobals
  • CMS BeispielCMS Beispiel
  • file() - php.net Hilfefile() - php.net Hilfe
  • Git BeispielGit Beispiel
  • Dynamische WebsiteDynamische Website

Screenshots aus Seminarvorwoche:

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

 

Tag 04

Donnerstag, 03.03.2022, 08.00 - 15.30 Uhr

Rekapitulation, TN-Fragen

 

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

Bibliothek (Bücher)

Als Trainer diskutiere ich diverse Bücher zu den Themen PHP & MySQL (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)

SQL Übungen

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

db auhor rel entwurf 800px

phpMyAdmin - SQL Tests
Forts. DB-Technik... ausgiebige Tests beginnend mit einfachen SELECT-Strings{code lang:sql showtitle:false lines:true hidden:false}select * from publisher
select publisher from publisher

select * from title
select titleId, title from title

select * from title where (year = 2017)
select * from title where (year > 2014){/code}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! {code lang:sql showtitle:false lines:true hidden:false}select title.titleId, title.title, title.publisherId,
        title.year, publisher.publisherId, publisher.publisher
    from title, publisher

select t.titleId, t.title, t.publisherId, t.year,
        p.publisherId, p.publisher
    from title t, publisher p{/code}Abfragen mit Filter (WHERE) für Datensätze mit gleicher publisherId:
Dadurch werden die passenden Bücher-Verlage Kombinationen aus den 2 Tabellen selektiert!{code lang:sql showtitle:false lines:true hidden:false}select t.titleId, t.title, t.year,
        p.publisherId, p.publisher
    from title t, publisher p
    where (t.publisherId = p.publisherId)
    
select t.titleId, t.title, t.year,
        p.publisherId, p.publisher
    from title t, publisher p
    where (t.publisherId = p.publisherId)    
    order by t.titleId asc    
    
select t.titleId, t.title, t.year,
        p.publisherId, p.publisher
    from title t, publisher p
    where (t.publisherId = p.publisherId)    
    order by t.titleId desc
    
select t.titleId, t.title, t.year,
        p.publisherId, p.publisher
    from title t, publisher p
    where (t.publisherId = p.publisherId)
        and (t.year = 2017)
    order by t.titleId desc
    
select t.titleId, t.title, t.year,
        p.publisherId, p.publisher
    from title t, publisher p
    where (t.publisherId = p.publisherId)    
    order by t.titleId desc
    limit 3{/code}Abschließende Tests mit Bearbeiten (UPDATE) und Löschen (DELETE) von Datensätzen.
Bitte für die passenden SQL-Befehle die CRUD-Übersicht nutzen.

MySQL Dumps

Backups für Datenbanken / Tabellen bedeutet technisch Importieren / Exportieren

Mit PhpMyAdmin werden also komplette DBs oder Tabellen per Exportieren gesichert und über Importieren wiederhergestellt.
Hierbei können Dateien mit und ohne Kompression erzeugt werden: sql, zip gzip, bz2

Anm. zur Praxis beim Hosting:
beachten Sie, dass die meisten Hoster das Zurücksichern (importieren) ganzer Datenbanken nicht 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 z.B. 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 Prozeduren

Mit Konstruktion function lassen sich benutzerdefinierte Funktionen erstellen.

hier zwei einfache "Schablonen" - die zugehörigen Übungen im Seminar{code lang:php showtitle:false lines:true hidden:false}function arrayAusgabe ($arr) {
    // Ausgabe mit print_r
    echo "<pre>";
    print_r ($arr);
    echo "</pre>";
};
function quadriereWert ($val) {
    // Quadrat berechnen:
    $quadrat = $val * $val;
    return $quadrat;
};{/code}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: hier kein Unterstrich bei Superglobal) 

Prozedurale vs. Objektorientierte Technik (OOP)

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
Nachteil: Einarbeitung, Aufwand

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

 

... mehr Beispiele und Code für die TN im Seminar

 

Screnshots aus Seminarvorwoche: (die TN erhalten die gesamte Screenshotsammlung der Woche - über 1000 Screenshots)

  • OOP 101OOP 101
  • OOP TextbeispielOOP Textbeispiel
  • Daten eingebenDaten eingeben
  • SELECT mit 2 TabellenSELECT mit 2 Tabellen
  • CookiesCookies
  • SessionsSessions

Screenshots aus Seminarvorwoche:

  • 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, 04.03.2022, 08.00 - 15.30 Uhr

Rekapitulation, TN-Fragen

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

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:
Achtung: mit viel Werbung in den Seiten

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:{code lang:php showtitle:false lines:true hidden:false}<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection - errno Error Code - error Error String*/
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit(); // Alternative zu die(..);
}

$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();
?>{/code}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 (siehe CRUD):

  • 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); {code lang:php showtitle:false lines:true hidden:false}<?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>";
?>{/code}Beim Firefox erhalten Sie über die Einstellungen - Register Datenschutz & Sicherheit - Cookies und Website Daten eine Übersicht mittels Daten verwalten... .

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, {code lang:php showtitle:false lines:true hidden:false}<?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'];
?>{/code}Befehle: session_start(), session_destroy, $id = session_id() sind für die Prüfung wichtig und ein sehr effizienter Punktebringer!

 

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

Meinen / unseren Teilnehmern übergebe ich zu Seminarende diverse Unterlagen:

  • XAMPP-Versionen (Wochenanfang - Seminarende Trainer-XAMPP)
  • Screenshots der Seminartage (Bildergalerie/Diashow der Seminarwoche
    hier: ca. 1200 Screenshots!
  • Ordner-/Dateistrukturen + DBs mit Backup-Skripts

In 2021 habe ich die Unterlagenstrukturen für das "PHP & MySQL" Seminar auf ein öffentliches Git-Repo umgestellt.

Gitlab Repo

Seit 2021 sind meine Unterlagen als öffentliches Gitlab Repo verfügbar:

https://gitlab.com/joebrandes/cmsod-phpmysql

Dort lassen sich die Daten herunterladen (als Zip) oder natürlich mit Git clonen (Software für Kommandozeile nötig).
Anm.: das Gitlab Repo wird nach dem Seminar weiter gepflegt und aktualisiert! Gerne einfach vorbeischauen und nach der letzten Aktualisierung Ausschau halten.

XAMPP-CMSOD komplett

Die XAMPP-Ordner lassen sich auch komplett als selbstentpackendes 7z-Archiv sichern.

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

xampp 7z archiv 800px

Die Trainer-Version kann den TN ebenfalls als "Digitale Seminarunterlage" bereitgestellt werden.

 

Feedbackbögen, TN-Bescheinigungen, letzte Fragen

 

Screnshots aus Seminarvorwoche: (die TN erhalten die gesamte Screenshotsammlung der Woche - über 1000 Screenshots)

  • DB Connection OOPDB Connection OOP
  • phpMyAdmin - ImportphpMyAdmin - Import
  • Import MeldungenImport Meldungen
  • phpMyAdmin - HosterphpMyAdmin - Hoster
  • Backup - RestoreBackup - Restore
  • phpMyAdmin - ExportphpMyAdmin - Export

Screenshots aus Seminarvorwoche:

  • OOP - GrafikbeispielOOP - Grafikbeispiel
  • OOP - TextbeispielOOP - Textbeispiel
  • Prepared StatementsPrepared Statements
  • Datensatz LöschenDatensatz Löschen
  • CookiesCookies
  • SessionsSessions

 

VS Code

Visual Studio Code

Da wir in den Trainings seit circa 2020 den Microsoft Visual Studio Code Editor immer mehr nutzen, will ich der Installation und Nutzung im Rahmen der CMSOD Seminare auch einen Platz widmen.

Themes

Oder besser gesagt: Light Themes, da über die meisten Beamer die von mir bevorzugten "Dark Themes" nicht gut lesbar/erkennbar sind.

Die Trainiees sollen natürlich auch gerne Feedback zur Erkennbarkeit des Codes am Beamer geben. Meistens ergibt sich die Nutzung von Light Themes für VS Code nach folgendem Ranking:

  1. Atom One Light
  2. Github Light
  3. Brackets Light Pro

atom one light 800px
Theme: Atom One Light

Hier die Dark Themes in einem persönlichen Ranking:

  1. Dracula
  2. Nord
  3. Night Owl
  4. Gruvbox
  5. One Dark Pro
  6. Github Dark
  7. Cobalt2
  8. One Monokai

dracula 800pxTheme Dracula

Aber wie gesagt: das lässt sich auch schnell im Seminar mit den Trainees für die gegebenen Seminarraummöglichkeiten abstimmen.

Icon Theme

Für die bessere Darstellung von Icons für Dateien und Ordner benutze ich gerne das Material Icon Theme.

PHP Debuggen mit Xdebug

Für das Debuggen von PHP nutzt man gerne Xdebug (Link: https://xdebug.org/ ) für die unterschiedlichsten Server-Plattformen. Aktuell (Februar 2022) sind die dort angebotenen Xdebug Bibliotheken aber nicht mehr direkt für einen XAMPP-CMSOD (PHP 7.4.14) nutzbar: man verlangt hier mindestens PHP 7.4.20 - und dafür werde ich die XAMPP-CMSOD Entwicklungsumgebung nicht aktualisieren. Das passiert erst wieder für PHP 8!

Wir nehmen einfach die vorhandene XAMPP-interne C:\xampp-cmsod\php\ext\php_xdebug.dll (Version 2 statt den aktuellen Versionen 3 von Xdebug).

Wir sollten das "Puffern" über die PHP-Konfiguration output_buffering ausschalten/kontrollieren und am Ende unserer php.ini folgenden Code anfügen:

...
output_buffering = Off
...

[XDebug]
zend_extension = "c:\xampp-cmsod\php\ext\php_xdebug.dll"
;zend_extension = "c:\xampp-cmsod\php\ext\php_xdebug-2.9.7-7.4-vc15-x86_64.dll"
xdebug.remote_autostart = 1
xdebug.profiler_append = 0
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "c:\xampp-cmsod\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.remote_log = "c:\xampp-cmsod\tmp\xdebug.txt"
xdebug.remote_port = 9000
xdebug.trace_output_dir = "c:\xampp-cmsod\tmp"
;36000 = 10h
xdebug.remote_cookie_expire_time = 36000

Anleitungen für die Konfigruation von Xdebug siehe z.B. siehe Installing Xdebug for XAMPP · GitHub - man achte hier vor Allem auf die richtigen Pfade (C:\xampp-cmsod) und den richtigen Port (9000).

Nach der Änderung der php.ini musser der Apache neu gestartet werden! Man kann die Xdebug-Umgebung über die phpinfo-Seite überprüfen oder über die Konsole per php -v Befehl.

Die Ausgabe von Fehlern (errors), Nachrichten (notices) und Warnungen (warnings) im Browserbody erhält mit Xdebug auch andere und besser erkennbare Styles und mehr und detailliertere Infos zu unseren Code-Problemen.

Die Konfiguration für aktuelle Xdebug Version 3 ist kürzer und übersichtlicher.

[XDebug]
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=trigger

Die Konfigurationsparameter heißen auch anders! 

PHP Extension Pack

Das PHP Extension Package (Marketplace Link PHP Ext Pack) besteht aus zwei Komponenten:

Für das Debuggen muss eine launch.json (per Klick im Debug Abschnitt von VS Code oben links) erstellt werden und auf Anpassungen untersucht werden. Wenn der Xdebug Mechanismus wie oben eingestellt ist, dann benötigen wir Port 9000 (statt 9003). Hier ein Ausschnitt aus einer  launch.json:

{
    // Verwendet IntelliSense zum Ermitteln möglicher Attribute.
    // Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen.
    // Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        },
        { 
            ...
        }
}

Für den Zugriff auf unser XAMPP-PHP benötigen wir auch die passenden Konfigurationen in der settings.json von VS Code: (für das Debugging siehe hier Einträge php. ... )

{
"workbench.colorTheme": "Atom One Light",
"editor.fontSize": 18,
"editor.minimap.enabled": false,
"workbench.iconTheme": "material-icon-theme",
"telemetry.telemetryLevel": "off",
"window.zoomLevel": 1,
"security.workspace.trust.untrustedFiles": "open",
"php.validate.executablePath": "C:/xampp-cmsod/php/php.exe",
"php.debug.executablePath": "C:/xampp-cmsod/php/php.exe",
"php.executablePath": "C:/xampp-cmsod/php/php.exe",
"php.suggest.basic": false

}

Die hier dargestellte settings.json enthält auch weitere (mögliche) Einstellungen einer VS Code Umgebung.

... tbc ...

 

 

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 25 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"

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