• XAMPP IDEXAMPP IDE

An der VHS Braunschweig findet ab dem 04.05.2015 ein Bildungsurlaub zum Thema "Dynamische serverseitige Webseiten mit PHP & MySQL" aus der Zertifikatsreiche "CMS Online Designer" statt. Anhand praktischer Beispiele wollen wir uns die aktuellen Techniken rund um PHP-Skripte und MySQL-Datenbanken erarbeiten.

Ort: Heydenstraße 2, VHS Braunschweig, Raum 2.11
Zeiten: Mo, 04.05. bis Fr, 08.05.15; jeweils von 08.30 - 16.00 Uhr
Prüfung: eine freiwillige Prüfung wurde für Mi., 20.05.2015, 17.00 Uhr koordiniert (aktuell: 2 Interessierte)
Status Erstkorrektur: beide TN haben bestanden - ich gratuliere!
Prüfungsvorbereitung: aktualisierter Lernzielkatalog / Bewertungsraster und die Musterprüfung / Musterlösung für das Modul II "PHP & MySQL" für den "CMS Online Designer 2.0" (Download s. u.)

Wir wünschen - wie immer - viel Spaß und Erfolg bei unseren Seminaren.
Ihr Trainer Joe Brandes - hier folgt unser "Roter Faden" für die Woche ...

 

Mo., 04.05.15

Montag, 04.05.2015, 08.30 - 16.00 Uhr

  • Orientierungsphase, Teilnehmer-Themen, Pausenregelung/Seminarablauf
    Cobra-Shop: gesponserte SW für IT-TN bei VHS; Buchempfehlungen: meine "persönliche aktuelle Bibliothek" werde ich Donnerstag im Seminar vorlegen; die digitalen Daten der Woche stehen den TN am Freitag im Netz zur Verfügung
  • Software- und Grundeinrichtung PCs
    Reborn-Card der TN-PCs beachten: wir arbeiten in den BU-Profilen ohne Rücksetzung von Laufwerk C: (Bezeichner: Windows 7 Frei)
    Programme: (sind in meinem aktuellem XAMPP-CMSOD in portabler Version bereits eingebunden)
    Packer: 7-Zip als Tool zum Packen/Entpacken
    Browser: Mozilla Firefox, Chrome, Opera, Safari (IE-Alternativen und Developer-Tools)
    Editor: Notepad++, PsPad (multifunktionaler Editor mit Erweiterungsmöglichkeiten / PlugIns)
    Explorer konfigurieren (Win + E): Dateiendungen nicht mehr Ausblenden lassen (gerne auch: versteckte und Systemdateienen einblenden)
  • Client-Server-Prinzip für WWW
    WWW - World Wide Web; Internet "Dienstleistung / Service / engl. Daemon - siehe angehängtes d bei httpd für Apache-SW"
    Web-Client: genannt Browser, die über ein Protokoll (http, https) vom Server Daten abfragen (request)
    Browser-Software: Microsoft Internet Explorer, Google Chrome, Mozilla Firefox, Apple Safari, Opera, ...
    Web-Server: "Dienstleister"-Software - Apache ("A Patchy Server" - historisches Wortspiel für alten NCSA Webserver Mosaic, der durch "Flicken" verbessert und dann eigenständig entwickelt wurde)
    Alternative Software: IIS (Internet Information Server von Microsoft); nginx von Firma NGINX, in PHP 5.4 ist auch ein "Server" eingebaut (Link)!
    Zusammenspiel: "Kopiermaschine" - Client fragt nach Webdokument - Server bereitet Daten auf und kopiert an Client
    WICHTIG: unsere serverseitigen PHP-Dokumente müssen immer über eine http-Url im Browser aufgerufen werden und die Dokumente müssen immer über die Dateiendung php verfügen
  • AMP - Apache, MySQL, PHP
    notwendige dynamische Technikumgebung für serverseitige Skriptsprachen; Beispiele:
    Perl, PHP, ASP, JSP, Python, Ruby on Rails
    auf Linux-Systemen dann also LAMP, unter Windows als WAMP und unter MacOS als MAMP bezeichnet
    Anm.: rein statische Webseiten (HTML + CSS + JS) kämen testseitig auch ohne Server aus!
    Empfehlung: XAMPP  (Bitte nicht in Produktionsumgebungen, sondern nur zu Testzwecken einsetzen)
    in Seminar: ich stelle meinen Teilnehmern (TN) eine speziell angepasste Version XAMPP für Windows 1.8.3-4 mit Apache 2.4.9, MySQL 5.6.16, PHP 5.5.11, phpMyAdmin 4.1.12 zur Verfügung
AMP A - Apache M - MySQL P - PHP
Technik Web-Server Datenbank-Server serverseitige Skriptsprache
Web (URL) httpd.apache.org
(Projekt Apache Foundation)
www.mysql.com
(bzw. .de)
www.php.net
(bzw. de.php.net)
Konfigurationen httpd.conf my.ini
(bzw. my.cnf)
php.ini
  • XAMPP-CMSOD (Inbetriebnahme der bereitgestellten Spezialedition XAMPP-CMSOD)
    Selbstentpackendes XAMPP-Archiv (.exe)  in C:\xampp-cmsod\... entpacken - so sind keinerlei Konfigurationen vorzunehmen
    bei abweichendem "Installationpfad" müsste die setup_xampp.bat einmalig ausgeführt werden, dann passen aber bestimmte Erweiterungen (Tools, Backup/Restore-Batchdateien) nicht mehr!
    Start der Dienste Apache und MySQL über das XAMPP Control Center (xampp-control.exe in xampp-cmsod-Ordner)
    Meldungen der Windows 7 Firewall betreffen nur die Zugriffe vom Netz (außerhalb localhost)
  • Web-Dokumente-Ordner
    XAMPP-Verzeichnis: c:\xampp-cmsod\htdocs (entspricht der Request-URL: http://localhost/)
    Übungsordner: C:\xampp-cmsod\htdocs\phpmysql\uebungen
    entspricht http://localhost/phpmysql/uebungen/)
    Wichtig: keine Umlaute, keine Sonderzeichen, Groß- und Kleinschreibung beachten (also Empfehlung: alles klein), keine Leerzeichen
    Bei Anfrage von Verzeichnissen gibt XAMPP ein Inhaltsverzeichnis (Index) zurück - das ist auf Produktionssystem nicht wünschenswert und dort auch anders konfiguriert; ansonsten sind Standarddokumente mit interner Reihenfolge in Konfigurations des Webservers hinterlegt (z.B. index.php index.html index.htm index.php3 ...)
  • Notepad++ Tipps - Standardeditor für das Seminar
    Cursor in PHP-Technikwort und Online-Hilfe mit Alt + F1 aufrufen
    Code-Completion (Codevervollständigung) mit Strg + Leertaste
    Zoomfaktor/Schriftanzeigengröße mittels Strg + Rollrad-Maus oder Strg + "+" (oder -) auf Nummernblock
    Für sauberes Syntax-Highlighting und Codecompletion benötigt Notepad++ Datei mit gespeichertem Dateiformat
    Über Kontextmenü auf PHP-Datei den Editor Notepad++ als Standardprog zum Öffnen eingestellt
  • Emmet (Notepad++ Erweiterung; Website: www.emmet.io  ;früher: Zen Coding)
    die ultimative Unterstützung für das HTML-Editieren, Verfügbar für nahezu alle Editoren, Emmet-Syntax (Link)
    Notepad++: Plugin Emmet - inkl. Python (Erweiterung) bereits installiert,
    erste Beispiele (ausführlichere ZenCoding-Beispiele: Link, Link)
    Tastenkombination für Emmet "Expand Abbreviation - Abkürzungen ausführen/expandieren" konfiguriert mittels Strg + , (Strg in Kombination mit Komma)
Emmet Abkürzung Einsatz - Ergebniscode
html:5
oder noch kürzer: !
erzeugt komplettes HTML5-Gerüst
inklusive richtigen Charactersettings "UTF-8" per meta-Tag
html:xt erzeugt XHTML 1.0 transitional
ul>li*5
ul>li.stil*5
ul>li.stil-$$*5
erzeugt verschiedene unsortierte Listen!
das funktioniert natürlich auch mit ol-Tags (sortierte Listen)
table>.row*3>.col*5 erzeugt Tabellengerüst mit 3 Zeilen und 5 Spalten
inklusive Klasse "row" für tr-Tags und Klasse "col" für td-Tags
p*4>lorem mal schnell 4 Absätze mit Dummy-Text "Lorem Ipsum"
  • Zeichencodierungen
    die IT-Systeme kennen nur 0 und 1, also verwendet man "Tabellen", die 0/1-Kombinationen dann Zeichen zuordnen
    Beispiele: ASCII, ANSI, ISO-8859, UTF-8 (und andere UTF-Varianten; auch als Unicode bezeichnet); nur in 7 Bit also den ersten 128 Zeichen sind diese "Nachschlagetabellen" gleich
    Empfehlung: bitte in UTF-8 speichern mit Notepad++ zusammen mit sauberem HTML-Header (meta charset utf-8)
    Hinweis zu Joomla-CMS: dort müssen alle Konfigurationsdateien (*.ini) mit UTF-8 ohne BOM gespeichert werden
  • phpinfo() - (Link php.net) - unser erstes Skript
    ein allererstes Testskript als Analyse-Skript  mit Aufruf von phpinfo() ohne Parameter und nach Recherche mit Alt + F1 dann auch mit Parameter
  • Kommentare in PHP
    Einzeilig mit //, mehrzeilig mit /* ... */, spezielle Kommentartechniken mit automatischen Dokumentationserstellungen (siehe phpDoc)
    Nutzen zum Auskommentieren von Zeilen - also Testzwecken - oder natürlich der Erläuterung von Code im Skript (wichtig für spätere Nachvollziehbarkeit und Analyse/Anpassung)
  • Escape-Sequenzen (Link php.net)
    Kennungen im PHP-Code für Spezialformate und Nutzung von sonst unerlaubten Zeichen
    \n  -  Zeilenumbruch (im Quellcode)
    \t  -  Tabulatorsprung (im Quellcode)
    \"  -  Nutzung von doppelten Anführungszeichen; z.B. für Zuweisungnen wie class = "styling"
  • PHP-Hilfe nutzen
    Aufruf der Online-Hilfe von PHP-Webportal php.net mittels Cursor in PHP-Wort und Alt + F1
    Übung: Bereitstellung der PHP-Hilfe als CHM-Datei - wichtig: CHM-Dateien müssen seit Windows XP SP2 erst in Kontextmenü "zugelassen" werden
    Link zu deutschen PHP-Dokus
  • Mischung von HTML und PHP
    letztendlich wollen wir natürlich komplette Webseiten an den Client ausliefern - also benötigen wir HTML-Gerüste und bringen dort unsere PHP-Skriptzeilen unter; das werden wird aber nur erst mal ausprobieren und verstehen und dann wieder auf PHP konzentrieren
  • echo (Sprachkonstrukt zur Übergabe von Strings an Browser - Link php.net)
    Ausgabe von Text und Variablen (beginnen immer mit $), Konstanten werden mit define vereinbart
    bei Verwendung von doppelten Anführungszeichen (double quotes) werden integrierte Variablen in der Ausgabe ausgewertet
    die einfachen Anführungszeichen (single quotes) erlauben die Verschachtelung mit doppelten Anführungszeichen (siehe HTML-Code class="top" oder ähnliche Syntax; außerdem kann man Texte/String über den Operator "." aneinderheften oder über Kommas einfach nacheinander aufzählen
  • vordefinierte PHP-Konstanten ("magische" PHP-Konstanten - Link php.net)
    __LINE__, __FILE__, PHP_VERSION, PHP_OS
  • date (Datumsfunktion - Link php.net)
    Recherche mit PHP-Hilfe; Übung mit Augabe (echo) des aktuellen Datums in der Form "2014-06-02"
    $heute = date("Y-m-d"); // gibt das gewünschte Datum und Format aus
    Hinweis: DATETIME Formatierung mittels Formatierungsstring "Y-m-d H:i:s"; später für MySQL-Datenbank wichtig!
  • $_SERVER[] (Link php.net)
    Superglobales Array für die Nutzung von Server-Variablen wie HTTP_USER_AGENT, SERVER_NAME und natürlich PHP_SELF
    Aufruf mittels $_SERVER['HTTP_USER_AGENT]
  • Arrays (erste Annäherung - Funktion array Link php.net)
    2-dimensionale Tabellen mit Spalte für Index und Spalte für Inhalt/Wert,
    bei numerischen Arrays laufen die Indizes von 0, 1, 2, ...
    bei assoziativen Arrays (Hash) werden Begriffe/Bezeichner möglich,
    Definition von Array mit Hilfe von PHP-Aufruf array(...) und Zuweisung mittels "=>"
  • Arrays - Beispiel und Übungen
    Beispiel (assoziatives Array):  $arr = array( "Nr" => 12345, "Name" => "Meier", ...)
    Beispiel (nummerisches Array):  $arr2 = array( "Auto", "Bahn", "Fahrrad")
    Definierten Wert mit Klammerschreibungen:   $arr['Nr']   bzw.    $arr2[2]
    Funktion count($arr) ergibt die Anzahl von Werten im Array
    Neuen Wert in nummerischem Array einfügen:  $arr[] = "Flugzeug"
    Ausgabe (zu Testzwecken) von Arrays mit Funktionen print_r und var_dump
    Tipp: Einschachtelung in pre-Tags für formatierte Ausgabe im Browser
    Automatische Schleifenfunktion für das Handling von Arrays: foreach
    verschachtelte Arrays - eine erste Übung - mehr dann morgen...

 

  • ArraysArrays
  • CMSODCMSOD
  • phpinfo()phpinfo()
  • $_SERVER[]$_SERVER[]
  • date()date()
  • c:\xampp-cmsodc:\xampp-cmsod
 

Di., 05.05.15

Dienstag, 05.05.2015, 08.30 - 16.00 Uhr

  • Rekapitulationen (heute - am Dienstag - etwas ausführlicher mit Hilfe des Beitrags zum Montag),
    TN-Fragen:
    PHP Abkürzung: Personal Home Page Tools (Rasmus Lerdorf), Hypertext Preprocessor; Empfehlung: de.wikipedia.org 
  • Tipp: Quellcode von Notepad++ (inkl. Syntax-Highlighting) nach Word
    Erweiterungen - NppExport - Copy all formats to clipboard -- in Word Einfügen (Strg + V)
    Zeilennummerierung: in Word fortlaufende Abschnittswechsel einfügen und für den Abschnitt mit dem Quellcode die Zeilennummerierung einschalten
  • Verschachtelte Arrays
    Fortsetzung der Übung zu verschachtelten Arrays und zwei beispielhafte Ausgaben:
    1) foreach verschachteln
    2) Funktion list nutzen, um Detaill-Array den gewünschten Variablen zuzuweisen
    foreach ($laender as $country => $countryinfos) {
    	// mit Befehl list die Variablen hauptstadt, waehrung und sprache zuweisen:
    	list ($hauptstadt, $waehrung, $sprache) = $countryinfos;
    	// einfache Ausgabe von Land, hauptstadt, waehrung:
    	// echo $country, " ", $hauptstadt, " ", $waehrung, "<br />\n";
    	echo "<tr class=\"row\">
    			<td class=\"col\">$country</td>
    			<td class=\"col\">$hauptstadt</td>
    			<td class=\"col\">$waehrung</td>
    			<td class=\"col\">$sprache</td>
    		</tr>";
    }
    
    Die kompletten PHP-Codes wurden den TN zur Verfügung gestellt
  • Kontrollstrukturen (Link php.net)
    Nutzung von Verzweigungen mittels if (bzw. if ... then ... else) und switch,
    Schleifen mittels for und while bzw. do...while, Verschachtelungen von for-Schleifen
    kleine Übungen zu if, switch und for (inklusive Verschachtelung ("kleines Einmaleins")
    Anm: Bedingungen mit > (größer), < (kleiner), <> (ungleich), == (gleich), === (identisch, gleiche Typen), ... (Link Vergleichsoperatoren php.net)
    Darstellung in Blockdiagramm nach Nassi-Shneiderman (Link Wikipedia); Verneinungen mit vorgestelltem Ausrufezeichen; Verknüpfung von mehreren Bedingungen mit && (beides muss gleichzeitig erfüllt sein - siehe Logische Operatoren Link php.net)
    Hinweis zu Seminar: wir nutzen die Strukturen ohne ausführliche Syntax und Detailerläuterungen - hierzu bitte selber jeweils experimentieren und die Darstellungen der Seminarwoche nachvollziehen. Das PHP-Manual bietet ebenfalls ausführliche Beispiele zu den weiteren wichtigen Kontrollstrukturen.
  • selfphp.de
    Bereitstellung der Offline-Dokumentation (*.chm, *.html) für die TN
    Sammlung von Online-Doku a la selfhtml (Stefan Münz) von Damir Enseleit und den "Kannengießer"s
    eine Super-Alternative zum PHP-Manual und zum Selbstlernen und Nachschlagen abseits von Fachbüchern (mehr am Do)
  • include vs require
    Einfügen von externen PHP-Skripten (siehe auch Ordern wie /inc oder auch /lib) zum wiederholten Verwenden
    bei require ist ein erfolgreiches Einbinden zwingend nötig, sonst bricht das Skript ab!
    Anm.: von beiden gibt es auch die Varianten include_once bzw. require_once
  • Kalender (Übung)
    Datum- und Uhrzeitfunktionen: mktime, strftime, date
    Setzen der Länderumgebung mittels   setlocale(LC_ALL, "deu");  Alternativ: ita, fra, ...
    Anm.: auf Windows anders als auf Linux-Systemen: dort - also beim Hoster - Codes wie de_DE, en_US
    Übung:  mit Schleife (Kontrollstruktur)  "for" - die Wiederholungen der Ausgabenkonstrukte für Monate vereinfachen auf eine Schleife mit einem echo
  • String-Funktionen (Link php.net)
    addslashes, stripslashes - Anführungszeichen sequenzieren (sonst DB-Probleme möglich)
    explode, implode - Auseinanderbauen und zusammensetzen von Zeichenketten
    substring, str_replace - Beispiele für Zeichenkettenmanipulierung (siehe auch str_replace für Diashow / dynamische Websites)
    print, printf, sprintf - Ausgabe formatierter, intelligenter Zeichenketten (Link sprintf php.net)
    $anzahl = 5;
    $ort    = 'Baum';
    $format = 'Es sind %d Affen auf dem %s';
    printf($format, $anzahl, $ort);
    
    htmlspecialchars - macht aus Tags - also spitzen Klammern die HTML-Sonderzeichen und "entschärft" somit Textketten, siehe später Formular-Behandlung
    nl2br - gibt Texte inklusive Zeilenumbrüchen an Browser
    rawurlencode - ersetzt in Strings für URLs die Leer- und Sonderzeichen
    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 morgen "Diashow")
    fgets (lässt sich automatisch mit while schleifen),
    dir (Nutzung einer Verzeichnisklasse in PHP - erster Hinweis auf OOP - Objektorientierte Programmierung mit Aufrufen wie $folder->read()  )
    Anm.: Dateibehandlung auf WAMP-System sehr wahrscheinlich abweichend von Hostern (Linux mit anderen Datei-/Ordnerberechtigungen und Benutzerkonzept)
  • MySQL (eine erste Annäherung an den Datenbankserver mysqld)
    SQL Structured Query Language (viele Dialekte aber gemeinsame Basis), Client-Server Prinzip; Client in Konsole (Eingabeaufforderung)  mysql  gezeigt (Kommandozeilentool in cmd; bei XAMPP in XAMPP-Ordner\mysql\bin), verbinden (konnektieren mittels  mysql -l localhost -u root   )
    Beispielzeilen / Beispielaufrufe in der mysql-Konsole:
    SHOW DATABASES;
    USE cdcol;
    SHOW TABLES;
    SELECT * FROM cds;
    
    besser natürlich: Verwaltung mittels:
    PhpMyAdmin - bereits in XAMPP unter localhost/phpmyadmin erreichbar (oder auch 127.0.0.1/phpmyadmin)
    Konfigurationsdatei MySQL Server: my.ini (bzw. my.conf)
    Hierarchie:
    Datenbankserver (localhost) - Datenbanken (cdcol) - Tabellen (cds) - Felder (titel, interpret, jahr, id - mit Datensätzen/Records)
    Verbindung zu Datenbankserver: Hostname, Benutzername, Passwort - dann Datenbank wählen
    Hinweis auf Anzeige von SQL-Kommandos in der Oberfläche für die ausgeführten Aktionen - so lässt sich viel Wissenswertes zur Abfragesprache SQL lernen und aufschnappen; Änderung des Anzeigedesigns; schnelle Navigation über Breadcrumb-Leiste oben

 

  • neue Elementeneue Elemente
  • foreachforeach
  • for-Schleifefor-Schleife
  • DateihandlingDateihandling
  • KalenderKalender
  • mysql Clientmysql Client

Mi., 06.05.15

Mittwoch, 06.05.2015, 08.30 - 16.00 Uhr

  • Rekapitulationen, TN-Fragen
  • Formulare
    HTML-Tags: form (action, method), input (type, name), Methoden: POST vs. GET
    POST: Übergaben im Hintergrund (unsichtbar), kein Protokollieren im Webserver, größere Datenmengen (nur eigentlich beschränkt durch php-Konfiguration - siehe post_max_size)
    GET: Daten lassen sich als URL speichern (Bookmark, Link)
    seit PHP 5.3 keine übergebenen Variablen "wie selbstverständlich" (also global!) verfügbar:
    es gibt keine PHP-Konfiguration  register_globals = On  mehr!
    Übergabe der Variablen mittels $_GET['name'] bzw. $_POST['name'] (s. Handbuch Superglobals)
    Speziell: Bereinigung von Eingaben mittels Funktion  htmlspecialchars;
    Formularthemen: siehe auch Captchas und Formular-Validierungen (haben hier keinen Platz)
    das aktualisierte selfhtml-Wiki hat gute Infos zu modernen Formulare (HTML5)
    Wichtig: sich selbst aufrufende Formulare; Nutzung von PHP_SELF - also $_SERVER['PHP_SELF'] nutzen
  • Diashow (dynamische Website  ohne DB-Anbindung)
    beispielhaftes Skript nach M. Lubkowitz aus der Internet Professional (2003)
    Grundidee: Skript diashow.php liest Steuerdatei (bayern.csv) und ein HTML-Template ein und berechnet und ersetzt Platzhalter im Template
    Übernahme der Steuerdaten für Diashow-Datei und Bildnummer mit GET-Technik: diashow.php?n=bayern.csv&nr=3
    genutzte Funktionen: file, implode, explode, list, str_replace
    Speziell: Kurzform für if-Struktur  $pic_nr = $_GET['nr'] ? $_GET['nr'] : 1;
    // Template laden
    $output_html = implode('', file('template.htm'));
        
    // CSV-Datei einlesen
    $pics = file($_GET['fn']);
        
    // Nummer des anzuzeigenden Bildes festlegen
    $pic_nr = $_GET['nr'] ? $_GET['nr'] : 1;
        
    // Bilddatensatz laden
    list($filename, $description) = explode(';', $pics[$pic_nr-1]);
    
    Codeschnippsel aus Diashow; das Skript wurde ausgiebig analysiert
    Basierend auf diesem Grundprinzip für "Dynamische serverseitige Webseiten" wurde eine wirkliche Webseite für die TN bereitgestellt- dort dann Umsetzung mit index.php und automatischer Bereitstellung einer Standard-Startseite
    URL dyn. Seiten:  ./index.php?parameter1=xyz&parameter2=abc&dyninhalt=impressum 
  • PHP-Editor Alternativen
    Netbeans (basiert auf Eclipse und ist als spezieller Download für HTML5/PHP verfügbar - Link)
    Aptana Studio (basiert auf Eclipse, universeller Editor für alle Sprache, als Standalone-Variante oder Ecplipse-PlugIn verfügbar - Link)
    Kauf-SW: Zend Studio - die Firma maßgeblich verantwortlich für die PHP-Entwicklung - Link
  • Funktionen (bzw. auch Prozeduren)
    mit Konstruktion function lassen sich benutzerdefinierte Funktionen erstellen
    hier eine einfache "Schablone" - wir haben die zugehörigen Übungen durchgeführt
    <?php
    function foo ($arg_1, $arg_2, ..., $arg_n)
    {
        echo "Beispielfunktion.\n";
        return $retval;
    }
    ?>
    

    Zur Erinnerung unsere Funktionen im Seminar: arrayAusgabe, quadriereWert
    wir lagern die Funktionen (Prozeduren) in einem Extra-Skript aus und nutzen include (bzw. require) in den PHP-Skripten, wo wir die Funktionen benötigen
  • Prozedurale vs. Objektorientierte Technik (OOP)
    Prozedural: es werden die eingebauten (mysqli_connect, mysqli_query) oder benutzerdefinierten Funktionen (s.o. arrayAusgabe) einzeln programmiert und aufgerufen
    OOP (Objekorientierte Programmierung): wir nutzen bestehende Klassen; Beispiele:
    Verzeichnisklasse dir (siehe Beispiel-Skript beim Datei-/Ordnerhandling)
    Zugriff mit verbesserter MySQLi / PHP-Technik: $dbobjekt = new mysqli ( ... ) ; $dbobjekt->query ()
    Empfehlung: OOP ist moderner und effizienter - unser Ziel für die Nutzung von MySQL-DBs mittels PHP
    OOP-Vorteile: Wiederverwendbarkeit, Zeitersparnis beim Coden, leichte Erweiterbarkeit
    OOP-Nachteile: anfangs verwirrend (viele Begriffe und Techniken), mehr Aufwand als mal schnell eine Funktion zu schreiben

 

  • method postmethod post
  • Wiki SelfhtmlWiki Selfhtml
  • Dynamische SeiteDynamische Seite
  • method getmethod get
  • FunktionenFunktionen
  • Prozeduren vs. OOPProzeduren vs. OOP

Do., 07.05.15

Donnerstag, 07.05.2015, 08.30 - 16.00 Uhr

  • Rekapitulationen, TN-Fragen, Bücher ("Bibliothek")
  • Forts. Thema OOP
    Einführung mit grafisch orientierten Beispiel (GD-Bibliothek)
    Online Portal mit guter Einführung in die OOP-Technik (Link)
    und nach einer weiteren Vertiefung zum MySQL-Server dann natürlich objektorientierte mysqli Zugriffe auf unseren DB-Server
  • OOP-Beispielskripte (Objektorientierte Programmierung / Grafiken / Texte)
    besser als prozedurale Techniken (Funktionen, Prozeduren), da man Code intelligent und effektiv weiter nutzen kann
    Stichworte: Vererbungen, Klonen, magische Methoden, ...
    eine erste Heranführung mit  Beispiel-Skripts mit Grafiken (php GD Bibliotthek nutzen)
    Signalworte: class, new, __construct (Konstruktor, Beispiel für magische Methode), extends und Syntax mit "->" und "::"
    Hinweis: wieder dt. Handbuch (Manual) nutzen für Erläuterungen der OOP-Techniken (Klassen und Objekte)
    class field {
        public $im;  // Eigenschaften (Variablen) der Klasse field
        public $ortx=0; public $orty=0;
        public $black; public $white; public $red; public $orange;
        function __construct($img) { // Konstruktor - Initialisierung
    				...              // magische Methode (s.a. __destruct)
                 }   // ende func field
    } // ende class field
    
    class rect extends field {     // Vererbung: rect erbt von field
        function form() {          // neue Methode form
    				...
            }                      // ende func form
    
        function go($newx, $newy) {// Positionieren der Rechtecke
    				...
    	}    // ende func go
    
    } // ende class rect
    
    class ball extends rect {      // Vererbung: ball erbt von rect
        function form() {          // Eigene Methode form
                                   // jetzt einfarbige Kreise 50*50 Pixel mit red
    					...
            } // ende func form
    } // ende class ball
    
    $image = imageCreate(300, 300); // 300 mal 300 Pixel Bild im Speicher
    $rect1 = new rect($image);      // neue Instanz rect - dadurch auch Aufruf
                                    // des Konstruktors von Klasse field!
    $rect1->go(200,50);             // Rechteck oben Rechts
    $rect1->go(50,200);             // Rechteck unten Rechts
    $ball1 = new ball($image);      // neue Instanz ball
    
    for ($x=0, $y=0; $x<300, $y<300; $x+=50, $y+=50) {
        $ball1->go($x, $y);         // Bälle mit Methode go zeichnen
        }                           // Erkenntnis: $ball1 nutzt go von Klasse rect
    
    

    der vollständige Code wurde im Seminar dargestellt und erläutert - die wichtigsten Aufrufe wurden als Tafelbild entwickelt
  • Bibliothek (Bücher)
    Trainer hat beispielhafte Herdt-Skripte (Matchcodes: GPHP54, GPHP54F, GPHP56, MYSQL56A, SQL) und diverse Bücher zu den Themen PHP & MySQL bereitgestellt (siehe Bibliothek auf diesem PCSYS-Portal)
    Hinweis auf Buchhandel von "Graff - Braunschweig - graff.de" bis hin zum Terrashop
  • MySQL - ein RDBMS (Relationales Datenbank Management System)
    Client-/Server Technik natürlich; die Relationen bezeichnen die Verbindungen zwischen den Tabellen:Fachbegriff: Normalformen / Normalisierung von DB-Tabellen am Beispiel einer kleinen DB für Bücher nach Beispiel M. Kofler
  • Praxis mit PhpMyAdmin (Online-Portal)
    Umsetzung der Diashow nach "Lubkowitz" in MySQL-Technik (Buch: Webseiten programmieren und gestalten - Das umfassende Handbuch - AmazonLink)
    Analyse der Skripte: diashow.php, config.inc.php (Konfigurationsdaten passend setzen und DB-Name bestimmen)
    Wichtig: für brauchen die mysqli-Funktionen (das "i" beachten - improved)
    Tipp: Breadcrumb ("Brotkrumen") Navigation des rechten Fensters nutzen: Server - DB - Tabelle
    Praxis: Datenbank diashow anlegen, Tabellen ds_pictures und ds_categories anlegen und Felder mit Eigenschaften ausstatten nach Vorgaben
    Nutzung von Prefix "ds_" (für Diashow) um bei weiteren Tabellen anderer DB-Projekte in derselben DB eine saubere Auflistung und Erkennung zu gewährleisten
    Online-Hilfe (Link dev.mysql.com Online Handbuch zu 5.6); Datentypen: int (integer), varchar (variable Zeichen), longblob (Binäre Objekt - z.B. Bilder), text (wie memo bei Access), datetime (Datum/Uhrzeit) , Primary Key (PK - Primärschlüssel), AutoIncrement (AI - automatisch hochzählendes Feld)
    Indizes: ein Feld indizieren beauftragt die DB eine sortierten Zugriff auf die Tabelle vorzuhalten, damit geht das Suchen und sortierte Ausgeben schneller - ist aber auch immer ein Aufwand und benötigt Speicher
    Tabellenformate (Engines) von aktuellen MySQL-DB-Servern: MyISAM, InnoDB (letztere mit DB-Techniken wie Transactions oder Referentieller Integrität
    Dateien der MySQL-Datenbanken (bei XAMPP Windows): C:\xampp\mysql\data\diashow
    Über Schaltfläche SQL lassen sich manuell SQL-Kommandos absetzen
  • OOP (mysqli) mit PHP/MySQL
    beispielhafte Verwaltung von "News" nach Beispielen der Online-PHP-Hilfe und der Ausarbeitung durch Dr. Florence Maurice (Website - Amazon)
    Konnektion mit Datenbank und Darstellung der OOP-Vorgehensweise gemäß PHP-Online-Tutorial:
    <?php
    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
    
    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    
    $city = "Amersfoort";
    
    /* create a prepared statement */
    if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
    
        /* bind parameters for markers */
        $stmt->bind_param("s", $city);
    
        /* execute query */
        $stmt->execute();
    
        /* bind result variables */
        $stmt->bind_result($district);
    
        /* fetch value */
        $stmt->fetch();
    
        printf("%s is in district %s\n", $city, $district);
    
        /* close statement */
        $stmt->close();
    }
    
    /* close connection */
    $mysqli->close();
    ?>
    

    die Skripte arbeiten dann die vier unterschiedlichen Nutzungen ab:
    1) Datensätze auslesen: SELECT
    2) Datenätze akualisieren: UPDATE
    3) Datenätze neu erstellen: INSERT INTO
    4) Datenätze löschen: DELETE
  • .. morgen dann die Skripte im Detail ...

 

  • phpMyAdminphpMyAdmin
  • NormalformenNormalformen
  • DB - TabellenDB - Tabellen
  • KlassenKlassen
  • mysqli->preparemysqli->prepare
  • Joomla index.phpJoomla index.php

Fr., 08.05.15

Freitag, 08.05.2015, 08.30 - 16.00 Uhr

  • Rekapitulationen, TN-Fragen, Erinnerung an freiwillige Prüfung (Anmeldung, Koordination der Prüfungsvorbereitung)
  • korrigierten Code für Diashow mit MySQL bereit gestellt
    Anregung: gerne die Codes für die MySQL-Diashow nacharbeiten; hier haben wir ja zwei Tabellen in einer Verbindung (Relation), wenn wir die Daten nutzen wollen; hier beispielhafte SQL-String mit denen man die Daten aus zwei Tabellen abfragt: (Anm.: wurde im Seminar nicht besprochen!)
    SELECT 
    	p.title, p.comment, c.name 
    	FROM ds_pictures p, ds_categories c 
    	WHERE (p.category = 3) 
    		AND (p.category = c.id) 
    	ORDER BY p.id ASC LIMIT 0,1
    	
    SELECT 
    	COUNT(*) 
    	FROM ds_pictures 
    	WHERE category = 1
    
  • OOP mit PHP & MySQL intensiv nachgearbeitet
    Musteranwendung "news" - Skripte der Reihe nach analysiert:
    db_include.php: DB-Objekt bereitstellen $mysqli = new mysqli (...)
    anzeigen.php: $mysqli->prepare mit vollständigem SELECT-String; Methode bind_result
    loeschen.php: DELETE-String mit Parametern (?) also brauchen wir Methode bind_param
    neu.php: Datensätze einfügen mit INSERT INTO ... VALUES und wieder bind_param
    bearbeiten.php: hier sowohl auslesen und dann ändern mit UPDATE ... SET
  • Cookies und Sessions (Link Cookies - Link Sessions auf php.net Online-Doku)
    Cookies: Server legen Text/Infoseiten auf Client-Seite ab; Einsatzbeispiel: Infos zu Warenkorb, Merkzettel & Co; ID einer Session hinterlegen, Verwaltung mittels Superglobal $_COOKIE, Befehl (Link php.net): setcookie(); jeder Browser legt eigene Cookie-Verwaltung an; Beim Firefox erhalten Sie aktuell über die Einstellungen - Register Datenschutz - Link Cookies eine Übersicht
    <?php
    if (!isset($_COOKIE["cook_1"])) {
        setcookie("cook_1", "Hallo", time()+10, "", "",0);
        echo "Cookie wurde gesetzt";
        // echo $_COOKIE["cook_1"]; // geht hier nicht!
        }
    elseif ($_COOKIE["cook_1"]) {
        echo "vorhandenes Cookie wurde gelesen: <br>";
        echo $_COOKIE["cook_1"],"<br>";
        }
    	
    echo "<pre>";
    // ein Server - hier localhost - kann nur seine
    // eigenen Cookies lesen!
    print_r($_COOKIE);
    echo "</pre>";
    ?>
    

    Sessions: werden serverseitig verwaltet (siehe Infos bei phpinfo - session; Anmerkungen zu session.name - PHPSESSID bitte nicht verwechseln mit einer Session-ID), XAMPP--Session-Speicher-Pfad (session.save_path) auf C:\xampp\tmp, Verwaltung mittels Superglobal $_SESSION, Befehle: session_start(), session_destroy, $id = session_id()
    <?php       // Registrierung von Session-Variablen
                // implizite Initialisierung der Session
    session_start();  
    $id = session_id();          
    $_SESSION['ArtNr']=100101;
    $_SESSION['BestNr']="999-8762";
    echo "implizite Initialisierung der Session: ";
    echo $id;
    echo "<br>Artikelnummer: ", $_SESSION['ArtNr'];
    echo "<br>Bestellnummer: ", $_SESSION['BestNr'];
    ?>
    
  • PHP & MySQL Projekte
    Hosting Beispiele und Preise (1und1, Strato), Webspeicher (GB), Anzahl Datenbanken
    Projekte bestehen aus zwei technischen Bestandteilen:
    1) Webserver htdocs Verzeichnis(-struktur) - kann beim Hoster leicht per FTP genutzt werden
    2) Datenbank und deren Tabellen (Struktur + Daten) - hier helfen jetzt Dumps:
  • MySQL Dumps (Backups für Datenbanken / Tabellen - Importieren / Exportieren)
    mit PhpMyAdmin DBs /Tabellen per Exportieren und Importieren Dateien mit und ohne Kompression (sql, zip gzip, bz2),
    Hierarchie beachten: Datenbankserver - Datenbank - Tabellen, Optionen beim Export, SQL-Export-Datei analysiert und SQL-Befehle analysiert: create database, create table, insert into ...
    Anm.: beachten Sie, dass die meisten Hoster nicht das Zurücksichern (importieren) ganzer Datenbanken erlauben, dann sollten Sie auf Tabellen-Ebene "dumpen"
    Probleme: Beschränkung der Dump-Größe (upload_max_size, post_max_size), Laufzeit der PHP-Skripte (max_execution_time) für das Komprimieren und Dumpen
    Tipp - falls mal sehr große und Hostingseitig Dumps problematisch sind: Skriptsammlung von www.mysqldumper.de
  • Musterprüfung "PHP & MySQL - Modul II - CMSOD" gezeigt (Prüfungsvorbereitung)
    für meine TN wird bereits die aktualisierte CMSOD 2.0 zeitnah bereitgestellt
  • TN-Unterlagen (umfangreiche digitale "Downloads" über das Schulungsnetz),  TN-Bescheinigungen, Feedbackbögen, letzte TN-Fragen
  • To-Do nach Seminar:
    Inhalte komplettieren (Fr) und Korrektur lesen
    TN-Unterlagen als Download bereitstellen

 

  • PHP Manual *.chmPHP Manual *.chm
  • phpMyAdminphpMyAdmin
  • Firefox CookiesFirefox Cookies
  • SessionsSessions
  • DB Export - DumpDB Export - Dump
  • DB ImportDB Import

 

Vielen Dank für Ihre tollen Feedbackbögen und Ihre persönlichen positiven Rückmeldungen zum Seminar.
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
Nach oben