• XAMPP IDEXAMPP IDE

An der VHS Braunschweig findet ab dem 11.06.2012 ein Bildungsurlaub zum Thema "Dynamische serverseitige Webseiten mit PHP & MySQL" 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 (geändert!)
Zeiten: Mo, 11.06. bis Fr, 15.06.12; jeweils von 08.30 - 16.00 Uhr
Prüfung: Mi, 20.06.2012, 17.00 Uhr, Raum 2.11 (aktuell 2 TN - AWP04)
Status Erstkorrektur: erledigt - 21.06.2012 - ich gratuliere zu den bestandenen Prüfungen

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


  • phpinfo()phpinfo()

Montag, 11.06.2012, 08.30 - 16.00 Uhr

  • Orientierungsphase, Teilnehmer-Themen, Pausenregelung/Seminarablauf
    Cobra-Shop: gesponserte SW für IT-TN bei VHS
  • Software- und Grundeinrichtung PCs
    Packer: 7-Zip als Tool zum Packen/Entpacken
    Browser: Mozilla Firefox, Chrome, Opera, Safari (IE-Alternativen und Developer-Tools)
    Editor: Notepad++, PsPad (multifunktionaler Editor - PlugIn-Übersicht und Downloads)
    Explorer (Win + E): Dateiendungen, versteckte und Systemdateienen einblenden
  • Client-Server-Prinzip für WWW
    WWW - World Wide Web Internet "Dienstleistung"
    Web-Client: genannt Browser, die über ein Protokoll (http, https) vom Server Daten erfragen (request)
    Web-Server: "Dienstleister"-Software - Apache ("A Patchy Server" Wortspiel), IIS (Internet Information Server von Microsoft)
    Zusammenspiel: "Kopiermaschine" - Client fragt nach Webdokument - Server bereitet Daten auf und kopiert an Client
  • AMP - Apache, MySQL, PHP
    notwendige dynamische Technikumgebung für serverseitige Skriptsprachen (Perl, PHP, ASP, JSP, Python, Ruby on Rails, ...); auf Linux-Systemen dann also LAMP und Windows als WAMP bezeichnet
    Anm.: rein statische Webseiten (HTML + CSS + JS) kämen testseitig auch ohne Server aus!
    Empfehlung: XAMPP (hier aktuell: Version 1.7.7 mit Apache 2.2.21, MySQL 5.5.16, PHP 5.3.8, phpMyAdmin 3.4.5)
  • Webserver Apache mit PHP
    1) als Apache-Modul - PHP wurde in Apache integriert
    2) als CGI (common gateway interface) - PHP Interpreter liegt als "Programm-Lösung" in extra Verzeichnis
  • XAMPP (Inbetriebnahme)
    landet XAMPP in C:\xampp\... so sind keinerlei Konfigurationen vorzunehmen
    Hinweis: beim Entpacken mit 7-Zip nur Hauptverzeichnis C:\ angeben!
    bei abweichender "Installation" muss die setup_xampp.bat einmalig ausgeführt werden
    Start der Dienste Apache und MySQL über das XAMPP Control Center (xampp-control.exe)
    Meldungen der Windows 7 Firewall betreffen nur die Zugriffe vom Netz (außerhalb localhost)
  • Web-Dokumente-Ordner
    XAMPP-Verzeichnis: c:\xampp\htdocs (entspricht der Request-URL: http://localhost/)
    Übungsordner: c:\xampp\htdocs\uebungen (entspricht http://localhost/uebungen/)
    Wichtig: keine Umlaute, keine Sonderzeichen, Groß- und Kleinschreibung beachten (also Empfehlung: alles klein), keine Leerzeichen
  • Kommentare in PHP
    Einzeilig mit //, mehrzeilig mit /* ... */
    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)
  • Intermezzo: Zen-Coding
    Installation von Plugin Zen-Coding für Notepad++
    erste Beispiele (ausführlichere Beispiele: Link, Link)
    html:5 (Strg+Alt+Enter) erzeugt komplettes HTML5-Gerüst
    html:xt - erzeugt XHTML 1.0 transitional
  • 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
  • echo
    Ausgabe von Text und Variablen (beginnen immer mit $)
    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
  • vordefinierte PHP-Konstanten ("magische" PHP-Konstanten)
    __LINE__, __FILE__, PHP_VERSION, PHP_OS
  • Informationsportale
    Apache Webserver - Apache Software Foundation mit Projekt HTTP Webserver (httpd - d für daemon als Unix/Linux Fachbegriff für Hintergrunddienst/Service)
    PHP - serverseitige Skriptsprache
    Übung: Bereitstellung der PHP-Hilfe als CHM-Datei - wichtig: CHM-Dateien müssen seit Windows XP SP2 erst bei Kontextmenü "zugelassen" werden
    Link zu deutschen PHP-Dokus

 

  • Arrays und PHP-FunktionenArrays und PHP-Funktionen

Dienstag, 12.06.2012, 08.30 - 16.00 Uhr

  • Rekapitulation, TN-Fragen,
    Interesse und Planung freiwillige Prüfung
  • PHP-Hilfe nutzen
    Aufruf der Online-Hilfe von php.net mittels Cursor in PHP-Wort und Alt + F1
    Hilfe für PHP in Notepad++ mittels PlugIn "Language Help" nachrüsten
    (Install-Problem für PlugIn nachrecherchieren
  • Übungen "Trainer"
    durchnummerierte Übungen über das Netz bereit gestellt, erste Probleme der "alten" Skripte unter der modernen PHP-Umgebung 5.3.8 analysiert
    Anm. Übungen 001 - 006:
    Datumsfunktion date(), Kommentare, Funktionen mit function, Klammern (Runde / Geschweifte), Präkrement, Postkrement, Zuweisung by value und by reference ($a = &$b), Datentypen (settype, gettype), NULL, S_SERVER[], __LINE__, __FILE__, PHP_VERSION, PHP_OS, TRUE, FALSE, $GLOBALS
  • Superglobale Arrays
    $_SERVER, S_COOKIE, $_GET, $_POST, S_SESSION, $GLOBALS
    früher: $SERVER_NAME oder Array HTTP_SERVER_VARS
    heute: $_SERVER['SERVER_NAME']
  • Notice:  (Anzeigen im Browser)
    Anmerkungen des PHP-Parsers gemäß eingestelltem Fehler/Nachrichten-Levels in der php.ini
    error_reporting = E_ALL | E_STRICT  (Development Value - gewechselt mit)
    error_reporting = E_ALL & ~E_NOTICE  (Default Value)
  • Gültigkeit / Sichtbarkeit von Variablen
    Tests mit Variablen innerhalb / außerhalb von Funktionen und dem Superglobalen Array $GLOBALS, Variablen-Deklarationen: public, private, global, protected
    Anm.: keine Vertiefung der technischen Backgrounds!
  • Arrays
    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(...), Zuweisungen mittels "=>"
    Beispiel (assoz. A.):  $arr = array( "Nr" => 12345, "Name" => "Meier", ...)
    Beispiel (num. A.):  $arr2 = array( "Auto", "Bahn", "Fahrrad")
    Arrays mittels print_r oder auch var_dump mit pre-Tag ausgeben, damit sie besser lesbar werden.
    Ausgabe mit PHP-Befehl foreach (mehrdimensionale Arrays mittels Verschachtelungen von Arrays)
    // Ausgabe der Datensätze mit verschachtelten Arrays
    foreach($kontakt as $kk => $details) {
        foreach($details as $k => $elem) {
            echo $kk, ": ", $k, ": ", $elem, "<br>";
        }
        echo "<br>";
    }
    
  • String-Funktionen (012, 013)
    addslashes, stripslashes - Anführungszeichen sequenzieren (sonst DB-Probleme möglich)
    explode, implode - Auseinanderbauen und zusammensetzen von Zeichenketten
    substring - Beispiel für Zeichenkettenmanipulierung (siehe auch morgen str_replace)
    print, printf, sprintf - Ausgabe formatierter, intelligenter Zeichenketten
    htmlspecialchars - macht aus Tags - also spitzen Klammern die HTML-Sonderzeichen und "entschärft" somit Textketten, siehe später Formular-Behandlung
    rawurlencode - ersetzt in Strings für URLs die Leer- und Sonderzeichen
    get_meta_tags - liest META-Daten aus head von HTML-Dokumenten aus

 

  • Dynamische WebsiteDynamische Website

Mittwoch, 13.06.2012, 08.30 - 16.00 Uhr

  • Rekap, TN-Fragen (s. nä. Punkt)
  • .htaccess und mod_rewrite
    Die Datei .htaccess als Apache "Steuer-/Konfigurationsdatei" (Alternativ:IIS mit web.config)
    Einsatzbeispiele:
    1) zusammen mit .htpasswd für "Geschützte Verzeichnisse"
    2) zusammen mit mod_rewrite (Apache-Modul) für Suchmaschinenfreundliche (SEF) bzw. Suchmaschinenoptimierte (SEO) URLs
    3) manuelle Änderung von PHP-Konfiguration (siehe Spalte Local Value von phpinfo), wird bei Hostern wenig und selten zugelassen
    Anm.: Dateien mit . (Punkt) am Anfang lassen sich mit Windows schwer erstellen - besser direkt per Editor erzeugen und speichern
  • Funktionen (prozedurale Lösungen)
    Beispiele mit Mittelwert und Fakultät (rekursive Funktion), Übergaben mittels Wert und mittels Referenz, Übung zeigt Anmerkungen für Var-Übergaben (PHP-Parameter: allow_call_time_pass_reference)
    Anm.: Umstellung der PHP-Umgebung auf "Produktions-Niveau" und PHP 5.3 Deklarationen (umfangreichere Beispiele!) gemäß aktueller Literatur und Help-Manual PHP (.chm-Datei)
  • Hosting
    Shared Hosting - Standard-Angebote der üblichen Hoster (1und1,  Strato, ...), ein Server wird vielen Kunden mit derselben Konfigurationsumgebung und Technik zur Verfügung gestellt! Meist Linux-Betriebssystem - vereinzelt auch Windows
    Server - als Virtual Server (also Virtuelle Machinen) oder Root-Server (auch Dedicated Server), Bereitstellung einer eigenen Maschine mit den verschiedenen Servern (Web-, DB-, ...), müssen vom Kunden eigenverantwortlich konfiguriert und aktualisiert werden!
  • Dateihandling
    File-Handle übernehmen mit fopen und schließen mit fclose (zurückgeben/schließen bitte nicht vergessen!), Unterschiedliche Modi für den Dateizugriff (siehe fopen in Manual)
    Anm.: Dateibehandlung auf WAMP-System sehr wahrscheinlich abweichend von Hostern (Linux mit anderen Datei-/Ordnerberechtigungen und Benutzerkonzept)
  • Formulare
    HTML-Tags: form (action, method), input (type, name), Methoden: POST vs. GET
    POST: Übergaben im Hintergrund (unsichtbar), kein Protokollieren im Webserver
    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 bitte keine PHP-Konfiguration  register_globals = On  mehr!
    Übergabe der Variablen mittels $_GET['name'] bzw. $_POST['name'] (s.o. Superglobals)
    Speziell: Bereinigung von Eingaben mittels Funktion  htmlspecialchars 
  • Diashow I (dynamische Website  ohne DB-Anbindung)
    beispielhaftes Skript nach M. Lubkowitz aus der Internet Professional
    Grundidee: Skript diashow.php liest Steuerdatei (bayern.csv) und ein HTML-Template ein und berechnet und ersetzt Platzhalter im Template
    genutzte Funktionen: file, implode, explode, list, str_replace
    Speziell: Kurzform für if-Struktur  $pic_nr = $_GET['nr'] ? $_GET['nr'] : 1;
  • Kalender (Übung)
    Datum- und Uhrzeitfunktionen: mktime, strftime, date
    Setzen der Länderumgebung mittels   setlocale(LC_ALL, "German_Germany"); 
    (Anm.: auf Windows anders als auf Linux-Systemen)
    Übung mit Schleife (Kontrollstruktur)  for

 

  • SQL mit PhpMyAdminSQL mit PhpMyAdmin

Donnerstag, 14.06.2012, 08.30 - 16.00 Uhr

  • Rekap, TN-Fragen, Prüfung (Anmeldung im Netz notwendig - Kursnummer AWP04)
  • MySQL (Datenbankserver mysqld)
    SQL Structured Query Language (viele Dialekte aber gemeinsame Basis), Client-Server Prinzip; Client in Konsole  mysql  gezeigt, besser: Verwaltung mittels PhpMyAdmin - bereits in XAMPP unter localhost/phpmyadmin erreichbar, Konfigurationsdatei: my.ini (bzw. my.conf)
    Hierarchie: Datenbankserver - Datenbanken - Tabellen - Felder
    Verbindung zu Datenbankserver: Hostname, Benutzername, Passwort - dann Datenbank wählen
    Integration in PHP mittels mysql-Bibliothek (siehe php.ini) bzw. mysqli (improved - verbesserte Zugriffstechnik: mehr Speed, Sicherheit, Fehlerbehandlungen und OOP-Techniken viel umfangreicher)
  • Praxis mit PhpMyAdmin
    Datenbank anlegen, Tabellen anlegen und Felder mit Eigenschaften ausstatten
    Datentypen: int (integer), varchar (variable Zeichen), longblob (Binäre Objekt - z.B. Bilder), text (wie memo bei Access), datetime (Datum/Uhrzeit), Import von SQL-Dump (SQL-Sicherungsdatei), Primary Key (PK - Primärschlüssel), AutoIncrement (AI - automatisch hochzählendes Feld)
  • Diashow II (jetzt: Dynamische Website mit MySQL-Anbindung)
    DB und Tabellen mit Feldern erstellt, Konfigurations-Include-Skript angepasst (wichtig: als PHP-Skript schreiben und mit .php auf Server legen!), alte Servervariable $SELF_PHP gegen $_SERVER['SELF_PHP'] getauscht
  • SQL-Query
    Tests direkt mit PhpMyAdmin möglich, dort werden die SQL-Codes direkt angegeben und sind auch dort einfügbar; Beispiel SQL-String aus Diashow mit MySQL:
    SELECT p.title, p.comment, c.name 
        FROM ds_pictures p, ds_categories c 
        WHERE (p.category = '.$show_nr.') AND (p.category = c.id) 
        ORDER BY p.id 
        ASC LIMIT '.($pic_nr-1).',1
    
  • Datenbanktheorie
    Normalisierung für Tabellen - Erstellung von Normalformen, Relationen zwischen Tabellen (RDBM - Relationales DB Management), Ziel: Vermeidung von Redundanzen bei der Eingabe und Inkonsistenzen im Datenbestand, Beispiel: Büchertabellen nach M. Kofler
  • OOP (Objekt Orientierte Programmierung)
    im Gegensatz zu prozeduralen Lösungen (einzelne Funktionen) hier effektivere Programmierungen und Nutzungen von Code, Eingeführt mit PHP 4 und verbessert/verändert mit PHP 5.x
    Begriffe: new, class, extends, var, static, public, protected, function
    spezielle Bezeichner __construct für Kontstruktor und __destruct für Destruktor)
    Vererbung von Eigenschaften und Methoden (s. Funktionen) mittels extends (Elternklasse parent), Direktaufrufe mit ::, Erzeugen neuer Instanzen mittels new, eigene Klasse mit $this, Aufruf von Eigenschaften/Methoden mit ->
    Empfehlung: Handbuch PHP Kapitel Sprachreferenz - Klassen und Objekte
  • Kontakverwaltung I (Dyn. Anbindung MySQL-DB mittels PHP-OOP-Technik mysqli)
    Einführung in ein Standard-Beispiel (Best Practise) einer PHP/OOP/mysqli-Lösung, Bereitstellung der Grundskripte und Erläuterung der Bereitstellung der notwendigen DB und Tabelle (SQL-Dump-Import)
    Ziel: Anlegen (insert), Ändern (update), Auslesen (select) und Löschen (delete) von Datensätzen

 

  • CookieCookie

Freitag, 15.06.2012, 08.30 - 16.00 Uhr

  • Rekap, TN-Fragen
  • Kontaktverwaltung II (Forts. Übung und Vertiefung der Techniken mysqli/OOP)
    Daten auslesen: index.php (SQL: select
    Daten ändern: bearbeiten.php (SQL: update
    OOP/mysqli-Technik: $sql=db->prepare, $sql->bind_param, $sql->execute
    Daten einfügen: neu.php (SQL: insert
    Daten löschen: loeschen.php (SQL: delete
    mit Abfrage zur Sicherung des Löschvorgangs
    Fehlerbehandlung: $db->error, Ausnahmebahandlung mit try und catch (engl.: Exceptions)
    Import des Tabellen-Dumps kontakte.sql in die manuell erstellte DB kontakte
    Verbesserung: Abfangen leerer Formularfelder mit Bedingung !empty($_POST['vorname'])
    Empfehlung: Analyse der Skripte und Verinnerlichung der "Best Pracitses"
    Tipp: für das Verständnis erzeugter Objekte im Code einfach mal zwischendurch die Objekte mittels print_r in einem pre-Tag ausgeben und so analysieren, ggf. plus einem die("Testausgabe");
  • Cookies und Sessions
    Server legen Text/Infoseiten auf Client-Seite ab; Einsatzbeispiel: Infos zu Warenkorb, Merkzettel & Co; ID einer Session hinterlegen, Verwaltung mittels Superglobal $_SESSION, Befehl: setcookie(); jeder Browser legt eigene Cookie-Verwaltung an
    Sessions werden serverseitig verwaltet (siehe Infos bei phpinfo - session), XAMPP--Session-Speicher-Pfad (session.save_path) auf C:\xampp\tmp, Verwaltung mittels Superglobal $_SESSION, Befehle: session_start(), session_destroy
  • MySQL Dumps (Backups für Datenbanken / Tabellen)
    mit PhpMyAdmin DBs /Tabellen per Exportieren und Importieren Dateien mit und ohne Kompression (zip, 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, Laufzeit der PHP-Skripte für das Komprimieren und Dumpen (max_execution_time) - Lösung: z.B. Skriptsammlung von www.mysqldumper.de
  • MySQL-Tool Workbench
    von MySQL/AB (heute Oracle): MySQL Workbench (vormals MySQL Administrator) für die Profi-Verwaltung von einem oder auch vielen MySQL-Servern; Anm: benötigt den MySQL-Server als Dienst und verlangt die Installation von MS Visual C und das aktuellste MS Dot.Net-Framework
  • Profesionelle Editoren
    die kostenlosen Varianten basieren meist auf Eclipse: Aptana Studio, NetBeans
    Kaufvariante: Zend Studio
    Debugging: XDebug, Zend Debugger (für professionelle Entwicklungen)
  • Prüfungsvorbereitung
    Musterprüfung, Lernzielkatalog <- Roter Faden
  • letzte TN-Fragen, Seminarunterlagen/BU-Sammlung für TN, Feedback-Bögen, TN-Unterlagen
  • Download für LZK/BWR und Musterprüfung bereitgestellt:

 

Vielen Dank für die positiven Feedbacks und Ihre Frage nach weitergehenden Folgeseminaren (bitte Mail an mich, damit wir das gut organisieren können - Danke)
Ihr Trainer Joe Brandes