Vorlesung Werkzeuge der Informatik Grundlagen und Werkzeuge des WWW (Teil 3) Jörg P. Müller Inhalt • Entwicklung von Internet und WWW • WWW-Architektur und Protokolle – Web Ressourcen (oder: Was ist eine URL) – Basisprotokoll des Internet: TCP/IP – WWW-Architektur (Client-Server) – Das HTTP-Protokoll HTTP Protokoll • Darstellung von WWW-Inhalten – Das WWW-Dokumentenmodell: HTML – Cascading Style Sheets (CSS) • Dynamische Erzeugung von Webseiten – Prinzipien – Die Skriptsprache PHP Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 2 Dynamische Webinhalte • Bisher haben wir HTML-Seiten als statisch (d.h. vorab erzeugt) kennen gelernt • Für viele Webanwendungen kann die Antwort auf eine Anfrage aber erst zum Zeitpunkt der Anfrage ermittelt werden – Google-Suchanfrage: g g • Menge der indizierten Webinhalte ändert sich laufend – Amazon-Produktsuche: • Momentane Inhalte des Produktkatalogs • Personalisierung bzgl. aktuellem Nutzer • Wie die Beispiele zeigen, gilt dies insbesondere für alle datenbankbasierten Anwendungen Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 3 Skriptsprachen • Werden hauptsächlich dazu verwendet, die Inhalte von Webseiten interaktiv (dynamisch) zu gestalten • d.h. Elemente der Website werden während der Anzeige dynamisch verändert. verändert • Diese Veränderung kann duch das Einwirken des Nutzers oder automatisch geschehen. • Die gebräuchlichsten Sciptsprachen sind JavaScript, p VBScript, p PHP, CGI und Perl. JScript, • HTML-Dateien bei denen einzelne Elemente während der Anzeige dynamisch ihren Inhalt ändern, werden auch als d dynamisches i h HTML bezeichnet. b i h Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 4 Eigenschaften von Skriptsprachen • Ausführung durch Interpreter • Typfreiheit bzw. schwache Typisierung • Oft weniger komplexe Datenstrukturen • Oft Einbettung von Betriebssystemkommandos • Komfortable Operationen mit Strings • Einbinden externer bzw. fremder Programme, z.B. – Dateioperationen – Versenden von Emails – Datenbankanfragen Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 5 Serverseitige vs. clientseitige Skriptsprachen • Clientseitig: – Das Skriptprogramm ist in das vom Server gelieferte HTMLDokument eingebettet – Die Ausführung erfolgt im Webbrowser – Beispiel: Javascript (siehe Teil 2), Visual Basic Skript – Gut g geeignet g z.B. zur lokalen Validierung g von Nutzereingaben g • Serverseitig: – Die Erstellung des vom Server an den Client gesendeten HTML-Dokumentes erfolgt auf der Serverseite dynamisch – Das Skriptprogramm liegt auf dem Server; Der Client sieht nur das resultierende HTML HTML-Dokument Dokument – Beispiel: PHP, Perl, Java Server Pages, beliebige ausführbare Programme (z.B. Shell-Skripte, Java Servlets) – Gut geeignet für die Erstellung von Seiten auf der Basis von Information aus Datenbanken Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 6 Die Skriptsprache PHP • Steht für: PHP Hypertext Preprocessing • Modul bzw. Programm, das auf den Webserver installiert ist • Präprozessor: Verarbeitet PHP-Befehle (sogenannte PHPSkripte) in einer Datei, bevor die Datei vom Web Server an den Client geschickt wird Web Server Client PHP Server-Modul (z.B. Apache) HTTP Web Browser DB-Server (z.B. SQLite) • PHP PHP-Skripte Sk i t erstellt t llt man am besten b t mit it einem i Text-Editor T t Edit (z.B. Emacs, vi, Ultraedit, PHPEdit, Bluefish) Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 7 Verwendung von PHP-Skripten • Typischerweise: Verarbeitung von Formulardaten • Ablauf der Kommunikation zwischen Client und Server: Server form html form.html 1b 1a Apache 5. processForm.php 7. 6. PHP 1. Anfrage: form.html Client 2. Formular anzeigen 1c. Ergebnis an Client zurück 4. Formulardaten an Server schicken sc c e ((Anfrage age a an processForm.php) 3. Formular ausfüllen und abschicken 9. Ergebnisseite an Client zurück 8. Datenbank Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 5. Webserver lädt php-Datei 6. Webserver startet php-Interpreter 7. php-Interpreter php Interpreter führt php-Datei php Datei aus 8. Dabei ggf. Datenbankanfragen 8 Ein erstes PHP-Skript <html> <body> • PHP-Skript S besteht aus <?php – Reiner Text (z.B. HTML) /* – Skriptbegrenzer Auch mein erstes php-Skript ist schon kommentiert */ / echo 'Das kommt vom Server<hr>'; // hier endet Skriptcode – PHP Skriptcode (Befehle) • Im nebenstehenden Beispiel kommt folgender Code beim Client an: ?> </body> </html> • Das Sprachkonstrukt echo wird benutzt, um einen Text auszugeben Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 <html> <body> Das kommt vom Server<hr> </body> / </html> 9 Text- und HTML-Ausgabe mit PHP • S Sie können ö mit echo HTMLSteuerzeichen, wie z.B. ˈ>ˈ oder ˈ<ˈ und somit auch ganze HTML-Tags ausgeben. • Versuchen Sie: <?php echo h ˈIch ˈI h will ill eine i Z Zeile il ausgeben ˈ; echo ˈIch will noch eine Zeile ausgebenˈ; ?> • Wie gebe ich ein Steuerzeichen in php ein? z.B. echo 'Er Er sagte 'Guten Guten Tag' Tag und ging'; • Lösung: Escape-Sequenz mit dem Zeichen '\' echo 'Er sagte \'Guten Tag\' und ging'; ging ; • Sie können auch das Zeichen '\' escapen • Lösung: – HTML-Tag HTML Tag <br/> <b /> einfügen Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 10 Double-quoted vs. single-quoted strings • Single-quoted strings verwenden den einfachen Apostroph • echo 'Er sagte \'Guten Tag\' und ging'; • Double-quoted Double quoted strings verwenden Gänsefüßchen • echo "Er sagte \'Guten Tag\' und ging"; • In Double-quoted Strings sind zusätzliche Steuerzeichen möglich, z.B. – \n für Zeilenumbruch – \t für Tabulatur (Einrückung) • Beispiel <?php echo 'Er sagte \'Guten Tag\' \n und ging'; ?> Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 11 Funktionen • Aus einem PHP-Skript S können Teilprogramme aufgerufen werden, die einen Wert zurückgeben Æ Funktionen • Beispiel: – Die Funktion phpinfo() schreibt die aktuelle PHPKonfiguration. – Ausprobieren! <?php • Allgemeine Form von Funktionen <?php name_der_funktion(parameter1, parameter2,...); ?> • Funktionen selber definieren function hello($name) { $result='Hello, '.$name.'!'; return hello; } phpinfo(); ?> Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 12 Variablen und Verkettungsoperator • Variable: V i bl – Platzhalter, die im php-Skript dynamisch mit Daten gefüllt werden d können kö – Beginnen mit '$', gefolgt von einem Buchstaben oder '_', danach beliebige Buchstaben, Buchstaben Zahlen, '_' – Groß- u Kleinschreibung zählt <?php <? h $vorname1='max'; $nachname1='mustermann'; $name1=$vorname1 ' '.$nachname1; $name1=$vorname1. $nachname1; $zaehler=1; $vorname2='berta'; $nachname2='buerger'; g $name2=$vorname2.' '.$nachname2; $zaehler=$zaehler+1; echo 'Es gibt '.$zaehler.' $ Namen: • Mit dem d Zuweisungsoperator Z i t '. $name1.' und '.$name2; '=' kann einer Variable ein Wert ?> zugewiesen werden • Mit dem Verkettungsoperator '.' kann man Strings und Variablen verketten Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 13 Zahlen und Rechnen • PHP unterstützt ü die Verwendung von Zahlen • Dabei erkennt PHP zwei Typen von Zahlen – Ganze Zahlen ((Integer) g ) – Fließkommazahlen(Float) • PHP unterstützt – Sechs Grundrechenoperationen – W Weitere it mathematische th ti h Funktionen, z.B. <?php ? h $a = 10; $b = 6; // die echo echo echo echo vier Grundrechenarten $a-$b; $a+$b; $ $ $a*$b; $a/$b; // Komplement echo -$a; // Modulo-Operation echo $a%$b; ?> sqrt(25); // 5 pow(2 3); // 8 pow(2, Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 14 Kontrollflussanweisungen • Datentyp Boolean Æ Werte true und false • Verwendet zur Steuerung des Kontrollflusses in PHP-Skripten • IF-Anweisung <?php if (ausdruck) ( d k) { anweisung_1; anweisung_2; // ... anweisung_n; } ?> Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 • ausdruck d k kann k zusammengesetzter Ausdruck sein, mit den logischen Verknüpfungen and, or, ! und xor verbunden • IF-ELSIF-ELSE <?php status=pruefe(); t t f () if (status==1){ // führe aktion1 durch } elsif (status (status==2){ 2){ // führe Aktion 3 durch } else // zeige Fehlermeldung } ?> 15 Weitere Kontrollflussanweisungen • While-Schleife S f • For-Schleife S f <?php while (isAutoDreckig( g { reinigen(); } ?> <?php /* g gib die Zahlen von 0 bis 9 aus (bei 10 ist die Bedingung false) */ • Do-While-Schleife for ($i=0; $i<10; $i++) { echo $i."\n"; } ?> <?php p p do { verbinden(); $daten = datenAbfragen(); g verbindungBeenden(); } while ($daten > 0); ?> Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 16 Arrays • Verarbeitung von Listen und Matrizen $farben=array('rot','gruen','blau'); $farben array( rot , gruen , blau ); • Arrayelemente können sein – Zahlen,, Strings, g , Arrays y Æ Mehrdimensionaly Arrays • Löschen ö eines ArrayElements unset($farben[2]); • Testausgabe von Arrays: var_dump($farben); • Assoziative Arrays $matrix=array(array(1,2),array(1,2)); – Index ist Stringwert • Zugriff auf Arrayinhalte über Index $nutzer = array( "Name" => "Karl", "Alter" => 44, "Beruf" Beruf => "Student" Student ); echo "Ich bin ".$nutzer["Name"]; echo " und ".$nutzer["Beruf"]; echo h $f $farben[0]; b [0] for ($i=0;i<sizeof($farben);i++){ echo farben($i).' '; } Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 17 Ein Beispiel: Funktionen und Arrays <?php function schreibeZeile($zeile){ echo '<tr>'; for ($i=0; $i<sizeof($zeile); $i++){ echo '<td>'.$zeile[$i].'</td>'; } echo '</tr>'; } $kundendaten=array(array('kundenid','nachname','vorname', $kundendaten array(array( kundenid , nachname , vorname , 'alter', alter , 'saldo'), array('4711','meier','heinz',32, 10000), array('0815', 'schulze', 'berta', 41, 50000), array('1234', 123 'schmidt', 'karl', 38, 38 5000) 000 ); echo "<html><body>"; echo "<h1>Kundendaten</h1>"; <h1>Kundendaten</h1> ; echo "<table border=\"1\">"; for ($j=0; $j<sizeof($kundendaten); $j++){ schreibeZeile($kundendaten[$j]);} echo h "</table></body></html>"; / bl /b d /h l ?> Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 18 Verarbeiten von Nutzereingaben • PHP erlaubt die einfache f Übermittlung von Nutzereingabedaten mit den HTTP-Methoden GET und POST • Hierzu stehen zwei globale Array-Variable $_GET und $ POST zur Verfügung $_POST • Bei GET werden Parameter an die URL g gehängt: g http://www.mysite.com/ registerUser.php?user=joerg&age=44 &married=true &married true Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 • Zugriff ff auff die Werte im Skript registerUser.php: echo $_GET[ $ GET['user']; user ]; echo $_GET['age']; echo $_GET['married'] • Alle Werte in $GET sind Strings oder Arrays var_dump($_GET['age']); // Ausgabe: String "44" var_dump($_GET['married']); // Ausgabe: String "false" • Testen, ob bestimmte Werte gesetzt sind if (! isset($_GET[ isset($ GET['user']) user ]) echo 'user not specified'; 19 Beispiel: Verarbeitung von Formularen Eingabeformular in HTML <html> <HEAD><TITLE>Nutzer registrieren</TITLE></HEAD> g <BODY> <form method="post" action="http://winf.in.tuclausthal.de/jpm/php/registeruser.php"> <fieldset> <legend>Registrieren l d i i Sie i sich</legend> i h /l d <label>Nutzername: <input name="user" type="text" size="10"></label> <label>Alter: <i <input t name="age" " " t type="text" "t t" size="3" i "3" maxlength="3"></label> l th "3"></l b l> <label>Verheiratet: <fieldset> <label><input type="radio" name="married" value="true" />Ja</label> <label><input type="radio" name="married" value="false"/> Nein</label> </fieldset> </label> <input type="submit" value="Absenden"> <input type="reset" value="Abbrechen"> </fieldset> </form> </body> </html> Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 20 Beispiel: Verarbeitung von Formularen PHP-Skript PHP Skript zur Formularbearbeitung <HTML> <BODY> <H1> Ihre Registrierung </H1> / <?php // pruefe Parameter if (!i (!isset($_POST['user'], t($ POST[' '] $ $_POST['age'])) POST[' '])) { die('Benutzen sie nur Formulare von der Homepage.');} $user=$_POST['user']; $age=$ POST['age']; $age=$_POST['age']; if ($_POST['married']=="true"){ $married="Ja"; }else{ $married="Kann ja noch werden";} echo "<h3> Herzlich Willkommen!</h3>"; echo "<b>Ihr <b>Ihr Nutzername:</b> ".$user."<br/>"; .$user. <br/> ; echo "<b>Ihr Alter:</b> ".$age."<br/>"; echo "<b>Verheiratet?:</b> ".$married."<br/>"; ?> </BODY> </HTML> Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 21 Datenbankanbindung • Was tun mit den Formulardaten, die im vorherigen Beispiel von unserem PHP-Skript eingelesen wurden? – Auf dem Bildschirm ausgeben? Ok, aber was dann? – In einer Datei speichern? Ok, Ok aber Probleme zz.B. B beim gleichzeitigen Zugriff durch parallele Aufrufe … – In einer Datenbank !!! • Im Folgenden erhalten Sie eine sehr eingeschränkte Einführung in relationale Datenbanksysteme – Darstellung von Datensätzen in Tabellen (hier: nur eine Tabelle) – Anfrage an eine Tabelle mit der Anfragesprache SQL – Einbindung in PHP • Mehr dazu in der Vorlesung g "Datenbanksysteme" y Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 22 Relationale Datenbanken • In sogenannten Relationalen Datenbanksystemen werden Daten in Tabellen abgelegt • Ein zusammengehöriger Datensatz wird dabei in eine Zeile einer Tabelle abgelegt • Spalten einer Tabelle enthalten Elemente vom gleichen Typ und haben einen Namen ((= Attributname) • Typen, z.B. int, varchar(n) Nutzer • Beispiel: Tabelle "Nutzer" id name alter verheiratet 1 K l Karl 44 1 2 Sabine 28 0 3 Heinz 34 0 4 Eva 39 1 Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 23 Datenbankabfragen mit SQL • SQL-Structured Query Language – Standard-Abfragesprache für relationale Datenbanksysteme – Bietet Sprachkonstrukte zum • Erzeugen E von Datenbanken D t b k • Stellen von Anfragen an Datenbanken • Speichern eines neuen Datensatzes • Ändern oder Löschen von Datensätzen • Anfragen: – SELECT <attribute> < tt ib t > //welche // l h Attribute Att ib t (Spalten) (S lt ) auswählen? ähl ? FROM <tabelle> // von welcher Tabelle? WHERE <bedingung> // zusätzliche Filterbedingungen? • SELECT-Anfragen liefert grundsätzlich eine Tabelle zurück (d.h. eine Menge von Datensätzen) Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 24 SQL-SELECT: Beispiele S SELECT C * FROM O Nutzer Liefert alle Einträge der Tabelle mit allen Attributen SELECT S C name, alter FROM Nutzer WHERE verheiratet > 0 Liefert die Attribute name und alter der Datensätze, deren Wert für das Attribut verheiratet größer als 0 ist id name alter verheiratet 1 Karl 44 1 2 Sabine 28 0 name alter 3 Heinz 34 0 Karl 44 4 Eva 39 1 Eva 39 Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 25 Einfügen eines neuen Datensatzes • Zum Einfügen fü von Datensätzen gibt es das SQL-Sprachkonstrukt SQL Sprachkonstrukt • Beispiel: INSERT INTO Nutzer (name, (name alter, alter verheiratet) VALUES ("Olivier", 27, 0); INSERT INTO <tabelle>(<attribute>) VALUES (<werte>); Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 • Für das Feld id muss kein Wert eingegeben werden id name alter verheiratet 1 Karl 44 1 2 Sabine 28 0 3 Heinz 34 0 4 Eva 39 1 5 Olivier 27 0 26 Datenbankabfragen mit PHP • SQ SQL-Anfragen f und -Befehle f • Es gibt unterschiedliche werden nicht vom PHPDatenbanken (z.B. mySQL, Prozessor , sondern von SQLite) einer Datenbank ausgeführt • Es gibt unterschiedliche Programmerweiterungen, • PHP muss deshalb: die die Kommunikation – Sich mit der Datenbank zwischen PHP und der verbinden Datenbank ermöglichen – Die Di Anfrage A f an die di Datenbank D t b k schicken – Das Ergebnis (ein sogenanntes "Result Set") entgegennehmen • Näheres dazu erfahren Sie in der Übung g / mit den Übungsmaterialien – In einer Variable weiterbearbeiten Wirtschaftsinformatik © Prof. Dr. Jörg P. Müller, 2009 27