Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Objekrelationale Abbildungsschicht Dr. Christian Senger PHP 1 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Einbettung von SQL in Programmiersprachen • 2 Welten: – deskriptive Anfragesprache SQL (mengenwertige Ergebnisse) – imperative Programmiersprache (tupelorientiert) • Prozedural • Objektorientiert • Einbindung am Beispiel von PHP Dr. Christian Senger PHP 2 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Einbettung von SQL in Programmiersprachen • Inhalt: – Architektur webbasierter Anwendungen – Einführung in PHP (PHP5) • Grundlagen • Einbindung von SQL in PHP • Objektorientierung – Objektrelationale Abbildungsschicht (CRUD-Interface) – Model View Controler Pradigma in PHP Dr. Christian Senger PHP 3 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Architektur von Informationssystemen (MVC) • Modell – Darzustellende und zu verarbeitende Daten – gegebenenfalls (abhängig von der Implementierung) Geschäftslogik. – Von Präsentation und Steuerung unabhängig • Präsentation – Darstellung der benötigten Daten – Nimmt Benutzerinteraktionen entgegen • Steuerung – verwaltet eine oder mehrere Präsentationen – nimmt Benutzeraktionen aus den Präsentationen entgegen – Auswertung Reaktion Dr. Christian Senger PHP 4 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Architektur von Informationssystemen (MVC) Dr. Christian Senger PHP 5 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 PHP: Hypertext Preprocessor • serverseitige Skriptsprache zur Erstellung dynamischer Webseiten (webbasierter Informationssysteme) • PHP Code wird in HTML-Seite eingebettet • PHP ist Open Source, Cross plattform • Sehr gute Libraries für Zugriff auf Datenbanken • PHP Extension and Application Repository (PEAR) ist Zentrale Stelle für frei verfügbare Erweiterungen/Libraries (inkl. automatisierte Installation) Dr. Christian Senger PHP 6 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 PHP: Hypertext Preprocessor • PHP bietet Möglichkeit HTTP-Header Informationen zu verschicken • Syntax ähnlich C oder Perl • PHP Code befindet sich in besonders gekennzeichneten Stellen in einer Seite: – <?php ... ?> – (Kurzformen: <? ... ?> bzw. <?= ... ?> für <php echo ... ?>) • Einsatz auch als Cross-Plattform Scripting language Dr. Christian Senger PHP 7 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 PHP - Anmerkung • Bevor man ein Projekt startet – Programmiersprache mit Bedacht wählen: http://commons.wikimedia.org/wiki/File:Genealogical_tree_of_programming_languages.svg Dr. Christian Senger PHP 8 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 PHP - Anmerkung • Bevor man ein Projekt startet – Programmiersprache mit Bedacht wählen: – Dimension des Projekts, kann man den Code/das Projekt nachher gut skalieren? – Wie viele Programmierer arbeiten an dem Projekt mit? – Gibt es eine „vernünftige“ Entwicklungsumgebung? – Brauche ich eine Standalone, eine Webbasierte oder eine gemischte Applikation? – Muss man die Speicherverwaltung und die Konstrukte (z.B. Arrays) verstehen? – Gutes Debugging möglich? – In Zeiten des Open Source/der Freeware: Ist die Funktionalität ausreichend auf mein Problem zugeschnitten, gibt es Bibliotheken? VORHER ausprobieren! – Support / active community (z.B. StackOverflow) – Darf keine „Neigungssache“ sein C++ PERL Java PHP Python Dr. Christian Senger PHP 9 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Ein erstes Beispiel <html> <body> <h1>Mein erstes PHP-Programm:</h1> <p/> <? // PHP Codefragment: echo "Hartkodierter Taschenrechner"; $a = 10; $b = 32; $c = $a + $b; ?> <p/> <? echo $a ?> + <? echo $b ?> = <?=$c?> </body> </html> Dr. Christian Senger PHP 10 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Variablen • Typen: – – – – – – Integer String/Zeichenkette Fließkomma-Zahlen Array Dictionary Object • Variablen beginnen in PHP mit einem $-Zeichen • Allerdings: Implizite Typkonvertierung $a = 131; $d ="Zeichenkette"; $a = ’... wird konvertiert in eine Zeichenkette’; $friends = array(’Ingo’,’Andrea’); $c[2] = 12; $c[] = "Speichere mich an der nächsten freien Stelle"; // z.B. $c[3] $Laender[’I’] = ’Italy’; $Laender[’F’] = "France"; $obj = new Film(’Big Fish’, 2003); Dr. Christian Senger PHP 11 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Arrays array_pop($arr) // entfernt letztes Element // und gibt es zurück $namen = array(’Klaus’,’Inge’, ’Sandra’,’Ingo’); $hobbies = array(); array_push($arr, $element) // fügt hinten $element ein echo $namen[0]; array_push($hobbies, ’Extremjojo’); in_array($nadel, $heuhaufen) // prüft, ob $nadel in // $heuhaufen existiert echo count($hobbies); echo array_pop($hobbies); echo count($hobbies); sort($arr) // sortiert die Elemente in $arr count($arr) // gibt Anzahl Elemnte in $arr // zurück Dr. Christian Senger PHP 12 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Assoziative Arrays // Assoziative Arrays // (Schlüssel-Wert Paare) $laender[’GR’] $laender[’E’] $laender[’AND’] // Funktionen für assoziative Arrays array_keys($dic) // liefert alle Schlüssel als // Array = ’Griechenland’; = ’Spanien’; = ’Andorra’; array_values($dic) // liefert alle Werte als Array $andere_laender = array('D'=>'Deutschland', 'F'=>'Frankreich', 'I'=>'Italien'); asort($dic) // sortiert die Elemente in // $dic entsprechend ihrer // Werte echo $laender[’E’]; ksort($dic) // sortiert nach Schlüssel $kuerzel = array_keys($laender); $laendernamen = array_values($laender); Dr. Christian Senger array_key_exists($key, $dic) // existiert $key in $dic ? PHP 13 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Operatoren Arithmetische Operatoren Vergleichs-Operatoren • • • • • • • • • • • $a + $b $a - $b $a * $b $a / $b $a % $b Addition Subtraktion. Multiplikation. Division. Modulo (Rest einer Division) Zuweisungsoperatoren • • • • • • Inkrement- bzw. Dekrementierungsoperator $a =3; $a += 5; // wie $a = $a + 5; $b = "Big "; $c = "Fish "; $d = $c . $b; // $d enthält „Big Fish" $b .= "Lebowski"; // wie $b = $b . //"Lebowski"; • • • • ++$a $a++ --$a $a-- // // // // Prä-Inkrement Post-Inkrement Prä-Dekrement Post-Dekrement Logische Operatoren Achtung: Implizite Typkonvertierung: PHP ist nicht typensicher, d.h. if (int ==bool) {wahr/falsch} string == bool, int == string funktionieren. ===/ !=== prüft den Typ mit Dr. Christian Senger $a == $b $a != $b $a < $b $a <= $b $a > $b $a >= $b PHP • • • $a and $b bzw. $a && $b $a or $b bzw. $a || $b $a xor $b • ! $a // Und // Oder // Entweder // Oder // Nicht 14 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 String-Operationen $a $b $c $d $e = = = = = 5; "five"; "$b ($a)"; '$b ($a)'; "\$a = $a"; $a: $b: $c: $d: $e: 5 five five (5) $b ($a) $a = 5 $h = "simple quote ' in a text"; $i = 'in a text " in a text'; $j = "single ' and double quotes \" in text"; $h: simple quote ' in a text $i: in a text " in a text $j: single ' and double quotes " in text $k = "Backslash \\ in a text "; $k: Backslash \ in a text Variablen innerhalb von " ... " werden evaluiert, innerhalb von ’... ’ nicht. \ - Zeichen (Backslash) zur Ausgabe spezieller Zeichen mit Sonderbedeutung ( ',", $, \) Dr. Christian Senger PHP 15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Kontrollstrukturen I Dr. Christian Senger PHP 16 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Kontrollstrukturen II // while-Schleife // for - Schleife $i =1; while ($i <= 10) { echo $i++; } for ($i = 1; $i <= 10; $i++) { echo $i; } // do - Schleife // break-Anweisung $i =1; do { echo $i; $i = $i + 1; $i =1; while (True) { { if ($i > 10) { break; } echo $i; $i++; } while ($i<=10); } Dr. Christian Senger PHP 17 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Kontrollstrukturen III // foreach Schleife mit // Arrays: $namen = array(’Klaus’,’Inge’, ’Sandra’,’Ingo’); foreach ($namen as $name){ echo "$name <br>"; } //Ausgabe: Klaus Inge Sandra Ingo Dr. Christian Senger //mit Dictionary $laender[’PL’] = ’Polen’; $laender[’E’] = ’Spanien’; $laender[’AND’] = ’Andorra’; foreach ( $laender as $kennung=>$name){ echo "$name ($kennung)<br>"; } //Ausgabe: Polen (PL) Spanien(E) Andorra (AND) PHP 18 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Funktionen //Beispieldefinition: function mach_was($arg_1,$arg_2,...,$arg_n ) { // hier passiert irgendwas // ... return $irgendwas; } <?php function square ($x) { return $x * $x; } ?> <html> <body> <?php $v = 3; $z = 12; ?> Das Quadrat von <?= $v ?> ist <? echo square($v) ?> <p> Das Quadrat von <?= $z ?> ist <? echo square($z) ?> </body> </html> function square ($x) { return $x * $x; } //Default Funktionsparameter function abrunden($zahl, $nachkommastellen = 0) { ... } Aufruf: abrunden(121.4234); // --> 121 abrunden(121.4234, 2); // --> 121.42 Dr. Christian Senger PHP 19 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Ausgabe Dr. Christian Senger PHP 20 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Modularisierung • Mit dem include (...) - Statement können externe Dateien in PHPSeiten eingebunden werden. • die externen Seiten können enthalten: – HTML-Code (z.B. header/footer) – PHP-Code (einbinden von zentral definierten Funktionen/Klassen/ Codefragmenten) – PHP und HTML-Code Dr. Christian Senger PHP 21 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Quellcode <html> <head> <title>Couchsurfing</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF" text="#000000"> <p><img src="couch.jpg" width="600" height="300"> </p> <h1>Couchsurfer-Projekt</h1> <p><a href="Impressum">Impressum</a> </p> </body> </html> Dr. Christian Senger PHP 22 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Quellcode II <? include('header.php'); ?> <hr> <p>ist ein kostenloses, internetbasiertes Gastfreundschaftsnetzwerk. Die Mitglieder nutzen die Website, um <br> eine kostenlose Unterkunft auf Reisen zu finden, selbst eine Unterkunft oder auch anderes anzubieten, <br> wie beispielsweise einem Reisenden die Stadt zu zeigen. Mitte M&auml;rz 2009 z&auml;hlte CouchSurfing &uuml;ber <br> eine Million Mitglieder in 231 L&auml;ndern und Gebieten[1] und ist damit die gr&ouml;&szlig;te Vereinigung seiner Art.<br> Rund 36 Prozent boten zu diesem Zeitpunkt einen Schlafplatz an (weitere 18 Prozent unter Vorbehalt).[1]</p> <hr> <? include('footer.php'); ?> Dr. Christian Senger PHP 23 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Beispiel // Erstellung einer HTML Seite, welche das kleine 1 x 1 ausgibt: // HTML Tabellencode: <table border="1"> <tr> <td>1</td>...<td>9</td> </tr> ... <tr> <td>9</td>...<td>81</td> </tr> ... </table> Dr. Christian Senger PHP 24 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Beispiel mit PHP <html> <head> <title>Das Kleine 1x1</title> </head> <body> gibt n Zeilen aus <table border="1"> <? $n = 10; for ($i=1; $i <= $n; $i++) { ?> <tr> <? for ($j=1; $j <= $n; $j++) { echo "<td>".($i*$j)."</td>"; } ?> </tr> gibt n Spalten aus <?} ?> </table> </body> </html> Dr. Christian Senger PHP 25 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Parameter-Übergabe (POST) <html> <body> <form method="post" action="addition.php"> Zwei Zahlen eingeben: <p> Zahl 1: <input type="text" name="zahl_1"> <p> Zahl 2: <input type="text" name="zahl_2"> <p> <input type="submit" value="addiere"> </form> </body> </html> Dr. Christian Senger PHP 26 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Rechenprogramm <!-- Script: addition.php --> <? $x = $_REQUEST['zahl_1']; $y = $_REQUEST['zahl_2']; if (empty($x)) die('Parameter zahl_1 ist nicht definiert'); if (empty($y)) die('Parameter zahl_2 ist nicht definiert'); ?> <html> <body> <? $summe = $x + $y; ?> Die Summe von <?=$x?> und <?=$y?> ist <b><?=$summe?></b> <p> <a href="taschenrechner.php">zur&uml;ck</a> </body> </html> Dr. Christian Senger PHP 27 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Rechenprogramm - Ausgabe Dr. Christian Senger PHP 28 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Parameter-Übergabe (GET) <html> <body> <form method="get" action="addition.php"> Zwei Zahlen eingeben: <p> Zahl 1: <input type="text" name="zahl_1"> <p> Zahl 2: <input type="text" name="zahl_2"> <p> <input type="submit" value="addiere"> </form> </body> </html> Dr. Christian Senger PHP 29 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II – SS 2015 Literatur zu PHP • PHP Online Manual: http://www.php.net/docs.php • PHP - Ein praktischer Einstieg; Ulrich Günther; 2. Auflage 2004; O’Reilly; EUR19.00 • PHP Kochbuch; David Sklar & Adam Trachtenberg; Deutsche Übersetzung von Jörg Staudemeyer & Ulrich Speidel; 1. Auflage Juli 2003; ISBN 3-89721-351-6;O’Reilly; Seiten 656; EUR 44.00 • PHP Online Manual: http://www.php.net/docs.php • PHP - kurz & gut, 2. Auflage; Rasmus Lerdorf; Deutsche Übersetzung von Raimund Eimann & Lars Schulten; 2. Auflage März 2003; ISBN 3-89721-251-X; O’Reilly; Seiten 144; EUR 8.90 • PHP Online Manual: http://www.php.net/docs.php • HTML Tutorial: http://de.selfhtml.org/ • PEAR - PHP Extension and Application Repository http://pear.php.net/ Dr. Christian Senger PHP 30