• XAMPP CMSODXAMPP CMSOD

An der VHS Braunschweig findet ab dem 25.04.2016 ein Bildungsurlaub zum Thema "Dynamische serverseitige Webseiten mit PHP & MySQL" aus der Zertifikatsreiche "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, 25.04. bis Fr, 29.04.16; jeweils von 08.30 - 16.00 Uhr
Prüfung: eine freiwillige Prüfung wurde mit den Interessierten im Seminar koordiniert
Termin: Donnerstag, 12.05.2016, 18.00 Uhr, Raum 2.11 (aktuell 3 TN / Interessenten)
Status Erstkorrektur.: erledigt - 15.05.2016 - ich gratulieren allen Prüfungsteilnehmern zu einer weiteren bestandenen Prüfung des CMS Online Designer (VHS)

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

Montag, 25.04.2016, 08.30 - 16.00 Uhr

  • Orientierungsphase, Teilnehmer-Themen, Pausenregelung / Seminarablauf
    Cobra-Shop: gesponserte Software für IT-TN bei VHS-EDV-Seminaren;
    Buchempfehlungen: meine "persönliche aktuelle Bibliothek" werde ich Donnerstag im Seminar vorlegen;
    die digitalen Daten der Woche stehen den TN am Freitag im Netz zur Verfügung
  • Software- und Grundeinrichtung PCs
    Reborn-Card der TN-PCs beachten:
    wir arbeiten in den BU-Profilen ohne Rücksetzung von Laufwerk C: (Bezeichner: Windows 7 BU)
    Programme / Software: (sind in meinem aktuellem XAMPP-CMSOD in portabler Version bereits eingebunden)
    Packer: 7-Zip als Tool zum Packen/Entpacken
    Browser: Mozilla Firefox, Chrome, Opera, Safari (IE-Alternativen und Developer-Tools)
    Editor: Notepad++, PsPad (multifunktionaler Editor mit Erweiterungsmöglichkeiten / PlugIns)
    Explorer konfigurieren (Win + E): Dateiendungen nicht mehr Ausblenden lassen (bzw.: versteckte und Systemdateienen einblenden)
  • Client-Server-Prinzip für WWW
    WWW - World Wide Web; Internet "Dienstleistung / Service / engl. Daemon - siehe angehängtes "d" bei httpd für Apache-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
  • AMP - Apache, MySQL, PHP
    notwendige dynamische Technikumgebung für serverseitige Skriptsprachen;
    Alternative serverseitige Skriptsprachen: Perl, ASP, JSP, Python, Ruby on Rails
    auf Linux-Systemen dann also mit Anfangsbuchstabe "L" als Version LAMP, unter Windows als WAMP und unter MacOS als MAMP bezeichnet
    Extra: die Geschichte (History) von PHP als Zeitleiste und inklusive Erläuterungen (Link line.do - History of PHP) und auf Wikipedia (en - Link)
    Anm.: rein statische Webseiten (HTML + CSS + JS) kämen testseitig auch ohne Server aus!
    Empfehlung: XAMPP  (Bitte nicht in Produktionsumgebungen, sondern nur zu Testzwecken einsetzen)
    in Seminar: ich stelle meinen Teilnehmern (TN) eine speziell angepasste Version zur Verfügung:
    XAMPP für Windows 1.8.3-4 mit Apache 2.4.9, MySQL 5.6.16, PHP 5.5.11, phpMyAdmin 4.1.12
    Dateiversion: xampp-cmsod-TEILNEHMER-20160409.exe  
    MD5-Prüfsumme: efa4de39a6be5ea6bcf78c495920fc9a
AMP A - Apache M - MySQL P - PHP
Technik Web-Server Datenbank-Server serverseitige Skriptsprache
Web (URL) httpd.apache.org
(Projekt Apache Foundation)
www.mysql.com
(bzw. .de)
www.php.net
(bzw. de.php.net)
Konfigurationen httpd.conf my.ini
(bzw. my.cnf)
php.ini
  • Vorgehensweise im Seminar:
    Ich stelle als Trainer also ein fertiges selbstentpackendes XAMPP-Archiv bereit, das bereits für alle CMSOD-Seminare vorkonfiguriert ist
    und auch bereits Beispielinstallationen (für die CMS Joomla und TYPO3) enthält!

    1) XAMPP-Archiv auf TN-PC kopieren - über Netzwerkfreigabe, von bereitgestellter Trainer-CD oder USB-Stick
    2) Selbstentpackendes 7z-Archiv mit Doppelklick "öffnen/entpacken" (ca. 330 MiB groß)
    3) Zielordner: C:\xampp-cmsod angebeben
    Entpacken nach (lokal)  C:\xampp-cmsod  ist wichtig!
    Grund: weil alle eingebauten CMSOD-Techniken und Tools auf dieses Verzeichnis optimiert wurden.
    Tipp: eigene XAMPPs könnte man dann einfach in anderen Verzeichnissen wie C:\xampp unterbringen.
    4) Starten der xampp-control.exe (Kontrollcenter - finden Sie im Hauptordner s.u.) und
    5) Starten von Apache Webserver und MySQL Datenbankserver über das 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 Dienste für Webservice und Datenbanken müssen wir täglich (bei Bedarf) starten - von einer automatischen Bereitstellung der XAMPP-Services rate ich ab!
    6) Starten des für Webentwicklung CMSOD optimierten Firefox über Schaltfläche "Admin" im Kontrollcenter bei Webserver Apache (Hinweis: dieser portable Firefox hat bereits Standard-AddOns installiert und nutzt z.B. auch keinen Browser-Cache; Sie können Ihren installierten und diesen mobilen Firefox nicht gleichzeitig nutzen!)
    xampp cmsod darstellungFü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.
    Die vorbereiteten portablen Tools lassen sich mittels des "Portable Apps - xampp_portableapps" Startcenters verwalten und aktualisieren.
  • 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), 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 gibt XAMPP ein Inhaltsverzeichnis (Index) zurück - das ist auf Produktionssystem nicht wünschenswert und dort auch anders konfiguriert; ansonsten sind Standarddokumente mit interner Reihenfolge in Konfigurations des Webservers hinterlegt (z.B. index.php index.html index.htm index.php3 ...)
  • Notepad++ Tipps - Standardeditor für das Seminar (in XAMPP-CMSOD PortableApps eingebaut)
    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
    Pfad: C:\xampp-cmsod\_tools\_portable\PortableApps\Notepad++Portable\Notepad++Portable.exe 
  • Emmet (Notepad++ Erweiterung; Website: www.emmet.io  ;alter Name: Zen Coding - in XAMPP-CMSOD PortableApp Notepad++ eingebaut)
    die ultimative Unterstützung für das HTML-Editieren, Verfügbar für nahezu alle Editoren, Emmet-Syntax (Link)
    Notepad++: Plugin Emmet - inkl. Python (Erweiterung) bereits installiert und sofort nutzbar (siehe Menü Erweiterungen - Emmet),
    erste Beispiele (ausführlichere ZenCoding-Beispiele: Link, Link)
    Tastenkombination für Emmet "Expand Abbreviation - Abkürzungen ausführen/expandieren" konfiguriert mittels Strg + ,  (Strg in Kombination mit Komma - kann man aber auch anpassen)
Emmet Abkürzung Einsatz - Ergebniscode
html:5
oder noch kürzer: !
erzeugt komplettes HTML5-Gerüst
inklusive richtigen Charactersettings "UTF-8" per meta-Tag
html:xt erzeugt XHTML 1.0 transitional
ul>li*5
ul>li.stil*5
ul>li.stil-$$*5
erzeugt verschiedene unsortierte Listen!
das funktioniert natürlich auch mit ol-Tags (sortierte Listen)
table>.row*3>.col*5 erzeugt Tabellengerüst mit 3 Zeilen und 5 Spalten
inklusive Klasse "row" für tr-Tags und Klasse "col" für td-Tags
p*4>lorem mal schnell 4 Absätze mit Dummy-Text "Lorem Ipsum"
  • Zeichencodierungen
    die IT-Systeme kennen nur 0 und 1, also verwendet man "Tabellen", die 0/1-Kombinationen dann Zeichen zuordnen
    Beispiele: ASCII, ANSI, ISO-8859, UTF-8 (und andere UTF-Varianten; auch als Unicode bezeichnet); nur in 7 Bit also den ersten 128 Zeichen sind diese "Nachschlagetabellen" gleich
    Empfehlung: bitte in UTF-8 / UTF-8 ohne BOM speichern mit Notepad++ ; gerne zusammen mit sauberem HTML-Header (<meta charset="utf-8">)
    Hinweis zu CMS Joomla: dort müssen alle Konfigurationsdateien (*.ini) mit UTF-8 ohne BOM gespeichert werden
  • 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
  • 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. Zwei davon, <?php ?> und <script language="php"> </script>, sind immer verfügbar. Die anderen beiden sind Short-Tags und ASP-Tags, die über das php.ini-Konfigurationsfile ein- und ausgeschaltet werden können. ..." (Link)
  • 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 (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 in Skriptsprachen generell auf das hier auch abschließende "; (Semikolon)
  • 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) ausgewertet
    die einfachen Anführungszeichen (single quotes) erlauben die Verschachtelung mit doppelten Anführungszeichen (siehe HTML-Code class="top" oder ähnliche Syntax;
    außerdem kann man Texte / Strings über den Operator "." aneinderheften oder über Kommas einfach nacheinander aufzählen
  • vordefinierte PHP-Konstanten ("magische" PHP-Konstanten - Link php.net)
    __LINE__, __FILE__, PHP_VERSION, PHP_OS
    Nutzung für "Debugging" und Analyse von PHP-Skripten
  • date (Datumsfunktion - Link php.net)
    Recherche mit PHP-Hilfe;
    Übung mit Augabe (echo) des aktuellen Datums in der Form "2014-06-02"
    $heute = date("Y-m-d"); // gibt das gewünschte Datum und Format aus
    Hinweis: DATETIME Formatierung mittels Formatierungsstring "Y-m-d H:i:s"; später für MySQL-Datenbank wichtig!
  • $_SERVER[...] (Link php.net)
    Superglobales Array für die Nutzung von Server-Variablen wie HTTP_USER_AGENT, SERVER_NAME und natürlich PHP_SELF
    Aufruf mittels $_SERVER['HTTP_USER_AGENT']
  • Arrays (erste Annäherung - Funktion array Link php.net)
    2-dimensionale Tabellen mit Spalte für Index und Spalte für Inhalt / Wert,
    bei 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 "=>"
  • Arrays - array() - foreach() - Beispiel und Übungen
    Beispiel (assoziatives Array):  $arr = array( "Nr" => 12345, "Name" => "Meier", ...)
    Beispiel (nummerisches Array):  $arr2 = array( "Auto", "Bahn", "Fahrrad")
    Definierten Wert mit Klammerschreibungen:   $arr['Nr']   bzw.    $arr2[2]
    Funktion count($arr) ergibt die Anzahl von Werten im Array
    Neuen Wert in nummerischem Array einfügen:  $arr[] = "Flugzeug"
    Ausgabe (zu Testzwecken) von Arrays mit Funktionen print_r und var_dump  
    Tipp: Einschachtelung in pre-Tags für formatierte Ausgabe im Browser (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!

 

  • Nummerisches ArrayNummerisches Array
  • Asoziatives ArrayAsoziatives Array
  • XAMPP CMSODXAMPP CMSOD
  • URL vs. htdocs-OrdnerURL vs. htdocs-Ordner
  • phpinfo()phpinfo()
  • Online-HilfeOnline-Hilfe

 

Tag 02 - 26.04.16

Dienstag, 26.04.2016, 08.30 - 16.00 Uhr

  • Rekapitulation, TN-Fragen
  • Forts. Übung Ausgaben von Arrays mit foreach 
    hier: Ausgaben in "schöneren" HTML-Tabellen
  • Escape-Sequenzen (Link php.net)
    Kennungen im PHP-Code für Spezialformate und Nutzung von sonst unerlaubten Zeichen
    \n  -  Zeilenumbruch (im Quellcode)
    \t  -  Tabulatorsprung (im Quellcode)
    \"  -  Nutzung von doppelten Anführungszeichen; z.B. für Zuweisungnen wie class=\"styling\" 
  • 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 Funktione 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.: Bei umfangreicheren Codes wurde den TN der Code "fertig" zur Verfügung gestellt.
  • Kontrollstrukturen (Link php.net)
    Nutzung von Verzweigungen mittels if (bzw. if ... then ... else) und switch,
    Schleifen mittels for und while bzw. do...while (Abbruchbedingungen am Anfang bzw. am Ende),
    Verschachtelungen von for-Schleifen
    kleine Übungen zu if, switch und for (inklusive Verschachtelung ("kleines Einmaleins")
    Anm: Bedingungen mit > (größer), < (kleiner), <> (ungleich), == (gleich), === (identisch, gleiche Typen), ... (Link Vergleichsoperatoren php.net)
    Zusatzinfo: Logische Funktionen gettype() , empty() , is_null() , isset() und boolean() bei Vergleichen mit = , ==  und === als tabellarische Übersicht (Link Ausdruck / Funktionen php.net)
    Darstellung in Blockdiagramm nach Nassi-Shneiderman (Link Wikipedia);
    Verneinungen mit vorgestelltem Ausrufezeichen (!) ;
    Verknüpfung von mehreren Bedingungen mit && (beides muss gleichzeitig erfüllt sein - siehe Logische Operatoren Link php.net)
    Hinweis zu Seminar: wir nutzen die Strukturen ohne ausführliche Syntax und Detailerläuterungen - hierzu bitte selber jeweils experimentieren und die Darstellungen der Seminarwoche nachvollziehen.
    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 (siehe auch str_replace für Diashow / Grundprinzip dynamische 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 WAMP-System abweichend von Hostern (Linux mit anderen Datei-/Ordnerberechtigungen und Benutzerkonzept)
  • MySQL (Teil I - eine erste Annäherung an den Datenbankserver mysqld)
    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 Variante für Entwickler und Tester unter dem Namen "MySQL Community Edition"
    Infoportale: International - Deutsches Portal - Dokumentation
    SQL Structured Query Language (viele Dialekte aber gemeinsame Basis), Client-Server Prinzip; Client in Konsole (Eingabeaufforderung)  mysql  gezeigt (Kommandozeilentool in cmd; bei XAMPP in XAMPP-Ordner\mysql\bin), verbinden (konnektieren mittels  mysql -h localhost -u root   )
    Beispielzeilen / Beispielaufrufe in der mysql-Konsole
    View source
    1. SHOW DATABASES;
    2. USE cdcol;
    3. SHOW TABLES;
    4. SELECT * FROM cds;
    5. INSERT INTO cds (titel, interpret, jahr) VALUES ("Testalbum", "Joe Prince", "2016");
    Verwaltung mittels diverser "Clients" möglich:
    1) php-Skripte mit Modul/Schnittstelle mysqli (das letzte "i" steht für improved / verbessert
    2) Kommandozeile/Shell mit Tool mysql (siehe Ordner C:\xampp-cmsod\mysql\bin  - Anm.: bin für Binaries, also ausführbare Programme)
    3) phpMyAdmin - eine PHP-Skriptsammlung für dei Administration von MySQL-Datenbankservern
    4) Spezialprogramme zur DB-Verwaltung (z.B. MySQL Workbench - Link)
    Nötige Zugangsdaten / Infos für den Zugriff auf eine Datenbank bei unserem XAMPP-CMSOD:
    Datenbankserver: localhost
    Benutzername: root
    Passwort: LEER (kein Passwort)
    Datenbank: (z.B.) cdcol  (CD Collection - mit Tabelle cds )

 

  • mysql Konsolemysql Konsole
  • foreach()foreach()
  • Array mehrdim - list()Array mehrdim - list()
  • for-Schleifenfor-Schleifen
  • String-FunktionenString-Funktionen
  • Dateien handelnDateien handeln

 

Tag 03 - 27.04.16

Mittwoch, 27.04.2016, 08.30 - 16.00 Uhr

  • Rekapitulation, TN-Fragen
  • Formulare
    HTML-Tags: form (Atrribute: action, method), Methoden: POST vs. GET, input (Attribute: type, name)
    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!) verfügbar:
    es gibt keine PHP-Konfiguration  register_globals = On  mehr!
    Übergabe der Variablen also immer mittels der Arrays $_GET['name'] bzw. $_POST['name'] (s. Handbuch Superglobals)
    Speziell: Bereinigung von Eingaben mittels Funktion  htmlspecialchars;
    Formularthemen: siehe auch Captchas und Formular-Validierungen (haben hier keinen Platz - siehe dazu auch Seminar "HTML & CSS")
    das aktualisierte selfhtml-Wiki hat gute Infos zu modernen Formulare (HTML5)
    Wichtig: sich selbst aufrufende Formulare; Nutzung von PHP_SELF im superglobalen Array $_SERVER - also $_SERVER['PHP_SELF'] nutzen
  • Diashow (dynamische Website ohne DB-Anbindung)
    beispielhaftes Skript nach M. Lubkowitz aus der Internet Pro (2003 - aber thematisch / technisch immer noch passend!)
    Grundidee: Skript diashow.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]);
    Basierend auf diesem Grundprinzip für "Dynamische serverseitige Webseiten" wurde eine wirkliche Webseite für die TN bereitgestellt- dort dann Umsetzung mit index.php und automatischer Bereitstellung einer Standard-Startseite index.php mit Vorgabe der Startparameter, falls in URL keine GET-Variablen übergeben werden
    URL dyn. Seiten - das Grundprinzip dynamischer Webseiten also: (wurde auch mit Joomla-CMS gezeigt)
    ./index.php?parameter1=xyz&parameter2=abc&dyninhalt=impressum 
  • phpMyAdmin - der 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 MySQL Datenbankserver: my.ini (bzw. my.conf)
    Hierarchie: (siehe Breadcrumb-Leiste oben)
    Datenbankserver (localhost) - Datenbanken (cdcol) - Tabellen (cds) - Felder (titel, interpret, jahr, id - mit Datensätzen / Records / Inhalten)
    Verbindung zu Datenbankserver - nötige Daten/Infos:
    Hostname, Benutzername, Passwort -> dann Datenbank wählen
    Hinweis auf Anzeige von SQL-Kommandos in der Oberfläche für die ausgeführten Aktionen - so lässt sich viel Wissenswertes zur Abfragesprache SQL lernen und aufschnappen; Änderung des Anzeigedesigns ist möglich; schnelle Navigation über Breadcrumb-Leiste oben
    Übungen mit der XAMPP-CD-Kollektion Datenbank cdcol und Tabelle cds  
    Insbesondere Hinweis auf Struktur mit MySQL-Datentypen (int, bigint, varchar) und Eigenschaften (Auto Increment AI, Primärschlüssel / Primary Key PK)
  • 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.  
    8. function quadriereWert ($val) {
    9.     // Quadrat berechnen:
    10.     $quadrat = $val * $val;
    11.     return $quadrat;
    12. };
    Zur Erinnerung: unsere Funktionen im Seminar: arrayAusgabe, quadriereWert
    wir lagern die Funktionen (Prozeduren) in einem 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!
  • MySQL (Teil II - weitere Infos zu unserem Datenbankserver)
    Online-Hilfe (Link dev.mysql.com Online Handbuch zu 5.6);
    Datentypen: int (integer), varchar (variable Zeichen), longblob (Binäre Objekt - z.B. Bilder), text (wie memo bei Access), datetime (Datum/Uhrzeit)
    Eigenschaften: Primary Key (PK - Primärschlüssel), AutoIncrement (AI - automatisch hochzählendes Feld)
    Indizes: ein Feld indizieren beauftragt die Datenbank eine sortierten Zugriff auf die Tabelle vorzuhalten, damit geht das Suchen und das sortierte Ausgeben schneller - ist aber auch immer ein Aufwand und benötigt Speicher
    Tabellenformate (Engines) von aktuellen MySQL-DB-Servern: MyISAM, InnoDB (letztere mit DB-Techniken wie Transactions oder Referentieller Integrität
    Dateien für die MySQL-Datenbanken (bei XAMPP Windows): C:\xampp\mysql\data\diashow
    Über Schaltfläche SQL lassen sich manuell SQL-Kommandos absetzen
  • PHP-Editor Alternativen (Übersicht - Link - Wikipedia)
    Netbeans (basiert auf Eclipse und ist als spezieller Download für HTML5/PHP verfügbar - Link)
    Aptana Studio (basiert auf Eclipse, universeller Editor für alle Sprache, als Standalone-Variante oder Ecplipse-PlugIn verfügbar - Link)
    Kauf-SW: Zend Studio - die Firma maßgeblich verantwortlich für die PHP-Entwicklung - Link

 

  • SQL-BefehleSQL-Befehle
  • CMS = Dynamische WebsiteCMS = Dynamische Website
  • Dynamische WebsiteDynamische Website
  • function - Prozedurfunction - Prozedur
  • Methode GETMethode GET
  • phpMyAdminphpMyAdmin

 

Tag 04 - 28.04.16

Donnerstag, 28.04.2016, 08.30 - 16.00 Uhr

  • Rekapitulation, TN-Fragen
  • Bibliothek (Bücher)
    Als Trainer habe ich diverse Bücher zu den Themen PHP & MySQL bereitgestellt (siehe 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)
  • CRUD - 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 ... WHERE ...
    DROP DATABASE ...
    DROP TABLE ...
    diese Grundoperationen wollen wir jetzt durch entsprechende PHP-Skripte umsetzen
  • 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 - erspart Zeit
    Beispiele 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 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
    Tutorials:
    1) php.net - Klassen und Objekte Online Hilfe (Link)
    2) Peter Kropff - Infoportal über diverse Online-Techniken (Link - Beispieldateien downloadbar)
    3) Ab-Heute-Programmieren - Infoportal HTML, CSS, JS
    Serie zu "OOP in PHP":
    Teil 1 - Grundlagen (Link)
    Objekte werden mit Hilfe von Klassen definiert; Klassen besitzen Atribute (Eigenschaften / 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
    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 überalls 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-Beispielskripte (Objektorientierte Programmierung / Grafiken / Texte)
    ausführliche Ü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
    Textbasiertes Skript mit Klassen "Einzeller" und "Mehrzeller"
  • MySQL / phpMyAdmin (Teil III - Backup & Restore)
    Anlegen einer Datenbank (news) für unsere weiteren Übungen mit PHP/OOP/MySQLi Skripten
    Durch Importieren von SQL-Dateien lassen wir der Reihe nach eine Tabelle (aktuell) anlegen und in einem zweiten Schritt gleich noch die Datensätze einfügen
    Technisch: die SQL-Dateien bezeichnet man als "Dump" (Sicherungsdatei); über Exportieren können wir morgen dann diese Dumps selber erstellen und somit unsere Datenbanken / Datenbanktabellen sichern
  • 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 Verwaltung von "News" nach Beispielen der Online-PHP-Hilfe und der Ausarbeitung durch Dr. Florence Maurice (Website - Amazon)
    Konnektion mit Datenbank und Darstellung der OOP-Vorgehensweise gemäß PHP-Online-Tutorial:
    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
    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. $city = "Amersfoort";
    10.  
    11. /* create a prepared statement */
    12. if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
    13. /* bind parameters for markers */
    14. $stmt->bind_param("s", $city);
    15. /* execute query */
    16. $stmt->execute();
    17. /* bind result variables */
    18. $stmt->bind_result($district);
    19. /* fetch value */
    20. $stmt->fetch();
    21. printf("%s is in district %s\n", $city, $district);
    22. /* close statement */
    23. $stmt->close();
    24. }
    25.  
    26. /* close connection */
    27. $mysqli->close();
    28. ?>
    Vergleichen Sie die Code-Bausteine mit unserem Praxisbeispiel und erkennen Sie "die Vorlage / das Praxisbeispiel"
    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 
    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)

 

  • mysqli_bind_parammysqli_bind_param
  • OOP mit GrafikbeispielOOP mit Grafikbeispiel
  • mysqlimysqli
  • DB-Konn. mit mysqli-KlasseDB-Konn. mit mysqli-Klasse
  • Dr. Florence MauriceDr. Florence Maurice
  • TabellenstrukturTabellenstruktur

 

Tag 05 - 29.04.16

Freitag, 29.04.2016, 08.30 - 16.00 Uhr

  • Rekapitulation, TN-Fragen
  • Forts. Übungen / Analysen Beispielskripte OOP / MySQLi
    die Dateien zum ändern und löschen von Datensätzen
    loeschen.php  (hier: ohne Rückfrage vor Löschvorgang!)
    bearbeiten.php  (effektiver Einsatz von mysqli-Techniken und kleveren Formularauswertungen)
    Übung: Analyse der Basiscodes und Verständnis der Standardzeilen für die "Prepared Statements - mysqli_stmt"-Technik
  • MySQL (Teil IV - ein RDBMS -Relationales Datenbank Management System)
    Client-/Server Technik natürlich; die Relationen bezeichnen die Verbindungen zwischen den Tabellen:
    Fachbegriff: Normalformen / Normalisierung von Datenbank-Tabellen
    am Beispiel einer kleinen Datenbank (mit 4 Tabellen)  für Bücher nach Beispiel M. Kofler
  • Übungen mit PHP / MySQL Techniken
    im Seminar (oder für das Nacharbeiten nach dem Seminar)
    Kontakteverwaltung  -  nach Internet Magazin Beitrag (2008) inkl. Anleitungen
    Diashow - Teil II - die Diashow mit Bildern in der MySQL-Datenbank und zwei in Relation stehenden Tabellen
    Anm.: das Speichern von Bildern direkt in der Datenbank (Datentyp: longblob) belastet die Datenbank unnötig - die Bilder sollten einfach in Webordnerstrukturen liegen und dann per Adresse verlinkt / referenziert werden.
    Relationen der Diashow: Datenbank diashow mit Tabellen ds_pictures (für die Bilder) und ds_categories (Kategorien / Alben), die über das Feld "category" aus der Tabelle ds_pictures und das Feld "id" aus ds_categories in Beziehung stehen
    View source
    1. SELECT
    2.     p.title, p.comment, c.name
    3.     FROM ds_pictures p, ds_categories c
    4.     WHERE (p.category = 3)
    5.         AND (p.category = c.id)
    6.     ORDER BY p.id ASC LIMIT 0,10
    7.     
    8. SELECT
    9.     COUNT(*)
    10.     FROM ds_pictures
    11.     WHERE category = 1
    Der passende Quellcode findet sich in der diashow.php (Zeile 21) natürlich ohne die "echten" Daten, sondern mit den entsprechenden Platzhaltern (Variablen $show_nr , $pic_nr )
    Für die Tabellen wurden nach "FROM" die Kurzbezeichner (Aliase) für die Tabellen gleich mitdefiniert.
    Mit dem SQL-Attribut LIMIT kann man bei der Ausgabe einen "Offset / Startwert" (hier: 0 - also am Anfang beginnen) und eine Anzahl (hier: 10 - also 10 Werte) konfigurieren
  • PHP & MySQL Projekte (lokal und beim Hoster)
    Hosting Beispiele und Preise (1und1, Strato), Webspeicher (GB), Anzahl Datenbanken
    Projekte können also aus zwei technischen Bestandteilen bestehen:
    1) Webserver htdocs Verzeichnis(-struktur) - kann beim Hoster leicht per FTP genutzt werden
    2) Datenbank und deren Tabellen (Struktur + Daten) - hier helfen jetzt MySQL-Dumps (Importe / Exporte):
  • MySQL Dumps (Backups für Datenbanken / Tabellen - Importieren / Exportieren)
    mit PhpMyAdmin DBs /Tabellen per Exportieren und Importieren Dateien mit und ohne Kompression (sql, zip gzip, bz2),
    Anm.: beachten Sie, dass die meisten Hoster nicht das Zurücksichern (importieren) ganzer Datenbanken erlauben,
    daher sollten Sie zumeist die Tabellen "dumpen" und nicht die gesamten 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 Hostingseitig Dumps problematisch sind: Skriptsammlung von www.mysqldumper.de
  • 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 aktuell ü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()
  • Musterprüfung "PHP & MySQL - Modul II - CMSOD" gezeigt (Prüfungsvorbereitung)
    wir haben die optimale Vorbereitung zur Prüfung besprochen;
    im Ordner __backups  befindet sich eine Kurzanleitung (PDF) für die Nutzung der bereitgestellen "Backup / Restore"-Skripte
  • 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 diashow (Tabellen ds_pictures, ds_categories) nach Anleitung "Lubkowitz/PDF"
    - OOP-Beispiel "Prepared Statements" wiederholen -> Kontakteverwaltung umprogrammieren auf das Basisbeispiel
    Anm: eigener Beitrag zum Thema auf diesem Portal
    - Musterprüfung durcharbeiten (Hinweis: Musterlösung nur Vorschlag! Auch abweichende Lösungen sehr wohl denkbar)
  • TN-Unterlagen (umfangreiche digitale "Downloads" über das Schulungsnetz)
  • TN-Bescheinigungen, Feedback, letzte TN-Fragen

 

  • SessionSession
  • CookieCookie
  • Joomla TemplateJoomla Template
  • MySQL Dump - ExportMySQL Dump - Export
  • NormalformenNormalformen
  • SELECT mit 2 TabellenSELECT mit 2 Tabellen

 

 

 

Vielen Dank für Ihre Anregungen und Verbesserungsvorschläge für unser technisch und inhaltlich ansprechendes Seminar und die persönlichen positiven Feedbacks nach dem Seminar und in den Feedbackbögen.
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"

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