View
114
Download
0
Category
Preview:
Citation preview
I N F O R M A T I K
Dynamische Webseiten mit PHP [und Python]
Thomas Mohr
2
IN
FO
RM
AT
IK
Beschränkung (X)HTML
• (X)HTML ist rein „statisch“, d.h. bei jedem Aufruf wird die gleiche Seite angezeigt. es kann nicht auf Benutzereingaben eingegangen werden. es gibt keine Abhängigkeit von der Aufrufumgebung
(Uhrzeit, Sprache, Währung, etc.).
• Zur Erinnerung der Ablauf: Der Benutzer schickt eine http-Anfrage über seinen Browser
an einen Webserver. Der Webserver sucht die entsprechende HTML-Datei lokal bei
sich auf dem Dateisystem. Die HTML-Datei wird unverändert an den Browser
zurückgegeben und dargestellt.
• eine Lösung:Skriptsprachen (PHP, Python, ASP, …) auf dem Server
3
IN
FO
RM
AT
IKAbruf von Webseiten
WebserverWeb-Clientmit Browser
Webanfragehttp://server.com/Datei.html
Datei.html
HTML
Internet
Datei.html
HTML
HTML-Dateiim Dateisystem
4
IN
FO
RM
AT
IK
Wie kommt die Seite auf den Server?
WebserverFtp-Server
Internet
PC
HTM
L
„Programmieren“der HTML-Datei
HTM
L Übertragen der
Datei mit ftp
Web-Client
Web-Client
Web-Client
Abrufen der Seiteüber http
5
IN
FO
RM
AT
IK
… und auf den Übungsrechnern?
Webserver
„Programmieren“der HTML-Datei
HTM
L
Abrufen der Seiteüber http
Browser
6
IN
FO
RM
AT
IK
Verzeichnisstruktur Apache-Webserver
• In der Standard-Installation von xampp liegen die HTML-Dateien im Unterverzeichnis htdocs. Weitere (virtuelle) Web-Verzeichnisse können in der
Konfigurationsdatei angelegt werden.
xampplite
apache
htdocs
bin
conf
logs
mysql
wb
Basisverzeichnis des Webservers
(Webserver-Programm)php.ini, um Einstellungen für PHP zu ändern
Konfiguration des Webservers in httpd.conf(z.B. Anlegen weiterer Verzeichnisse)
Logdateien des Webservers (Zugriffe / Fehler)
Standardverzeichnis für HTML-Dateien
Bitte Anlegen, um eigene HTML-Dateien abzulegen.
Verzeichnis der MySQL-Datenbank(auch der Datenbanken selbst)
7
IN
FO
RM
AT
IK
Was ist PHP?
• PHP (rekursives Akronym für „PHP: Hypertext Preprocessor“) ursprünglich „Personal Home Page Tools“
• PHP ist eine Skriptsprache,
• d.h. man braucht ein spezielles Programm (Interpreter), um das PHP-Programm auszuführen (Bestandteil des XAMPP-Paketes).
dient hauptsächlich zur Erstellung „dynamischer“ Webseiten,• d.h. die Webseite kann sich bei jedem Aufruf verändern.
ist „Open-Source“-Software, d.h. • die Software ist kostenlos .• die Software darf von jedem weiter entwickelt werden und unter
der gleichen Lizenz weitergegeben werden.
8
IN
FO
RM
AT
IKPHP erweitert HTML
• Mit PHP kann HTML so erweitert werden, dass Anteile der HTML-Seite erst beim Aufruf eingefügt werden.
• z.B. das aktuelle Datum oder die Uhrzeit auf Benutzereingaben reagiert wird. Inhalte von Datenbanken abgerufen werden können. …
• PHP wird in der HTML-Datei „programmiert“. Der Webserver besitzt ein besonderes Programm, den PHP-
Interpreter, der das PHP-Programm im HTML ausführt. Die Ausgabe des PHP-Programms wird in die HTML-Datei
eingefügt.
9
IN
FO
RM
AT
IKPHP erweitert HTML
WebserverWeb-Clientmit Browser
Datei.php
HTML
Webanfragehttp://server.com/Datei.php
Datei.php
HTML
PHP-Interpreter
Internet
Datei.php
HTML &
PHP PHP-Datei imDateisystem
10
IN
FO
RM
AT
IK
Trennung HTML - PHP
• PHP-Bereiche im HTML werden durch eine bestimmte Schreibweise (Syntax) vom eigentlichen HTML-Code getrennt.<h1>Aktuelles Datum</h1><p><?php echo 'Datum:' . date("d. M Y");?></p>
PHP-Bereich innerhalb einer HTML-Datei.
Vom PHP-Bereich auf dem Server erzeugte Ausgabe (reiner HTML-Code).
<h1>Aktuelles Datum</h1><p>Datum: 14. Nov 2008 </p>
PHP-Interpreter
Browser(HTML-Interpreter)
Im Browser angezeigte HTML-Seite.
11
IN
FO
RM
AT
IK
Anweisungen abgrenzen
• PHP-Programme bestehen in der Regel aus mehreren Anweisungen für den Interpreter Die Anweisungen werden nacheinander (sequentiell)
ausgeführt. Ein Semikolon schließt jede Anweisung ab.
• In der Regel sollte nur eine Anweisung in einer Zeile stehen.
<h1>Ein PHP-Beispiel</h1><?php echo "<h2>Mein erstes PHP-Programm</h2>"; echo "<p>...mit zwei Anweisungen</p>";?>
Zwei PHP-Anweisungenzur Ausgabe eines Textes
<h1>Ein PHP-Beispiel</h1><h2>Mein erstes PHP-Programm</h2><p>...mit zwei Anweisungen</p>
PHP-Interpreter
Hier wurden auch HTML-Tags durch PHP erzeugt.
12
IN
FO
RM
AT
IK
„Dynamische“ Inhalte
• Welche Uhrzeit wird am Client angezeigt?
WebserverWeb-Clientmit Browser
Webanfragehttp://server.com/Datei.php
Datei.php
HTMLDatei.php
HTML &
PHP
Standort: Atlanta USAUhrzeit: 2:20 am
Standort: SpeyerUhrzeit: 9:20 Uhr
Da die PHP-Datei in Atlanta umgewandelt wird, wird auch die Zeit des Webservers eingesetzt, also 2:20 am.
13
IN
FO
RM
AT
IK
Variablen
• Variablen können Werte zugewiesen werden.
ausgelesen werden.
<h1>Variablen in PHP</h1><p>Text: Hallo Welt!</p><p>Zahl: 4711.0815</p>
PHP-Interpreter
<h2>Variablen in PHP</h2><?php $MeinText = 'Hallo Welt!'; $Zahl = 4711.0815;?>
Namen von Variablen beginnen immer mit einem $-Zeichen.
<?php echo "<p>Text: $MeinText</p>"; echo '<p>Zahl: ' . $Zahl . '</p>';?>
Zwei Varianten zur Ausgabe
14
IN
FO
RM
AT
IK
Bedingte Ausführung – Struktogramm
• Abhängig von der Uhrzeit soll die Homepage „Vormittag“ oder „Nachmittag“ anzeigen. Den Ablauf des Programms kann man sich im
Struktogramm klarmachen.
$Zeit : = aktuelle Uhrzeit
$Stunde : = Stundenanteil(Zeit)
Wenn ($Stunde < 12)
Ja Nein
Ausgabe: „Vormittag“ Ausgabe: „Nachmittag“
15
IN
FO
RM
AT
IK
Bedingte Ausführung – If-Anweisung
• Sollen Programmteile nur unter bestimmten Bedingungen ausgeführt werden, so kommt die if-Anweisung zum Einsatz:
<?php $Zeit = getdate(); $Stunde = $Zeit["hours"]; if ($Stunde<12) { echo "Vormittag!"; } else { echo "Nachmittag!"; }?>
Anweisungsblock, falls Bedingung erfüllt(falls es vor 12 Uhr ist).
Anweisungsblock, falls Bedingung nicht erfüllt (falls es nach 12 Uhr ist). kann auch entfallen
if (Bedingung) {Anweisungen} else {Anweisungen}
19
IN
FO
RM
AT
IK
Kommentare
• Wie in HTML können / sollen Kommentare benutzt werden, um die Funktionsweise eines PHP-Programms zu beschreiben: Einzeilige Kommentare
Es können auch ganze Bereiche als mehrzeilige Kommentare markiert werden.
• z.B. um ein Stück PHP-Programm zeitweise „außer Betrieb zu setzen“.
<?php // ich bin ein Kommentar echo "Hallo Welt!";?>
<?php echo "Vor dem Kommentarbereich"; /* Dies ist ein Kommentar mit mehreren Zeilen */ echo "Nach dem Kommentarbereich";?>
20
IN
FO
RM
AT
IK
Kommentare
• Wie wird die HTML-Datei im Browser aussehen?
<h1>Viele Kommentare</h1><!--<p>Auf dieser Seite gibt es viele Kommentare.</p>--><?php// echo "Kommentare sind wichtig, um ein Programm zu verstehen."/*echo "Besser eingerückt könnte man das noch leichter lesen.";*/?><p>... sind wichtig!</p>
Viele Kommentare
… sind wichtig!
24
IN
FO
RM
AT
IK
Veränderung der Zählvariable
Name und Anfangswert
der Zählvariable
Bedingung, ob die
Schleife wiederholt
wird.$i=1;$Summe=0;
while ($i<=20){ $Summe=$Summe+$i; $i=$i+1;}
PHP – Schleifen
• Soll ein Block von Anweisungen mehrfach ausgeführt werden, so werden sog. Iterationen (Schleifen) verwendet. Eine „Zählvariable“ zählt dabei die Anzahl der
Schleifendurchläufe. Beispiel – while-Schleife:
Schleifenrumpfmehrfach ausgeführt
$Summe=$Summe+$i;
Solange $i<=20
$Summe = 0
$i=$i+1
$i = 1
25
IN
FO
RM
AT
IK
Schleifen
• Programmablauf Die Zählvariable $i wird mit 1 begonnen („initialisiert“) Bei jedem Durchlauf wird $i um eins erhöht. Nach dem 20. Durchlauf wird $i wieder um eins erhöht.
• Damit ist $i nun 21 und die Bedingung ist nicht mehr erfüllt.Die Schleife bricht ab und das Programm läuft nach der Schleife
weiter.
$i=1;$Summe=0;
while ($i<=20){ $Summe=$Summe+$i; $i=$i+1;}
$i:1
$i=$i +
1
$i:2
$i=
$i +
1
$i:2
0
$i=
$i +
1
...
$i:2
1
26
IN
FO
RM
AT
IK
Schleifen
• Soll ein Block von Anweisungen mehrfach ausgeführt werden, so werden sog. Iterationen (Schleifen) verwendet. Eine „Zählvariable“ zählt dabei die Anzahl der
Schleifendurchläufe. Beispiel – for-Schleife:
Beispiel:$Summe=0;for ($i=1; $i<=20; $i=$i+1){ $Summe = $Summe + $i; echo "<p>$i: $Summe</p>";}
Schleifenrumpf, der mehrfach ausgeführt wird.
for ($i=1; $i<=20; $i=$i+1)
Name und Anfangswert
der Zählvariable
Bedingung, ob die
Schleife wiederholt
wird.
Veränderung der Zählvariable nach einem Durchlauf
28
IN
FO
RM
AT
IK
Funktionen
Solange $x<=10
$x = 0
$x=$x+0.5$y=f($x)
Name der Funktion
Wert(e), der an die Funktion übergeben
wird.
Aufrufendes Programm
Funktion(Unterprogramm)
Wert, der zurückgegeben wird
function f($eingabe){ $rueckgabe= $eingabe*$eingabe; return $rueckgabe;}
$x=0;while ($x<=10){ $y=f($x); echo "$y <br />"; $x= $x+1;}
29
IN
FO
RM
AT
IK
Übungen
Endlich – Sie sind dran!
30
IN
FO
RM
AT
IK
Eingaben?? - Formulare in HTML
• Die Eingabe von Werten durch einen Benutzer ist mit den bisherigen Mitteln in HTML nicht möglich. Dazu dienen sog. Formulare in HTML, deren Werte dann in
PHP ausgelesen werden können. Der Ablauf ist vergleichbar z.B. dem Beantragen eines
Bibliotheksausweises:• Man bekommt ein Formular ausgehändigt.• Das Formular wird vom neuen Bibliotheksbenutzer ausgefüllt.• Der Benutzer gibt das Formular zurück.• Das Formular wird ausgewertet und das Ergebnis (der Ausweis)
wird an den Benutzer ausgegeben.
31
IN
FO
RM
AT
IK
Exkurs – Formulare in der „realen“ Welt
Formulare
Formular
Frage nach Formular
Harry Potter
Ausgabe des Ausweises
Ausf
ülle
nvon D
ate
n
Ausw
ert
en
der
Date
n
Bibliothek Benutzer
Gib ausgefülltes Formular zurück
VerarbeitungHerr Potter!
Bibliotheksausweis
Ausweis #4711
32
IN
FO
RM
AT
IK
Formulare in HTML
Formular.html
HTML
Verarbeitung.php
HTML &
PHP
Webserver Web-Client
Formular.html
Rufe Eingabe-Seite auf
Rufe Verarbeitungsseite auf
und übergebe Eingabedaten
Harry Potter
Harry Potter
Ergebnis der Verarbeitung
Verarbeitung.php
Ein
gabe
von D
ate
n
Ausw
ert
en
der
Date
n
Herr Potter!
Kunde #4711
33
IN
FO
RM
AT
IK
Formulare in HTML
• Das Formular erfordert spezielle HTML-Tags (PHP ist für das Eingabeformular nicht notwendig).
• Bsp.:
<form action="Verarbeitung.php" method="post">... <input type="text" name="Benutzer" />
... <input type="submit" value="abschicken" />
</form>
Verarbeitungsseite
Form
ula
rblo
ckText-Eingabefeldmit Namen „Benutzer“
Button zum Aufruf
Verarbeitungsseite
34
IN
FO
RM
AT
IK
Formulare in HTML
• Die eingegebenen Daten können in der Verarbeitungsseite im PHP-Interpreter ausgewertet werden: Für jedes Eingabefeld ist der eingegebene Wert in einer
Variablen mit dem Namen des Eingabefeldes gespeichert.<form action="Verarbeitung.php" method="post"> <input type="text" name="Benutzer" /> <input type="text" name="Alter" /></form>
<?php echo "Name: " . $Benutzer; echo "Alter: " . $Alter;?>
Formular.html
Verarbeitung.php
35
IN
FO
RM
AT
IK
Übungen
Learning by doing…
36
IN
FO
RM
AT
IK
Vernetzung des Themas
• Dynamische Webseiten (z.B. mit PHP) bieten sich ideal an, Themen zu vernetzen: Darstellung von Informationen mit XHTML und CSS. Algorithmisches Problemlösen. In Teilen: Kommunikation in Rechnernetzen (Protokolle, …)
… und nicht zuletzt: Datenbanken
Datenbanken sind gut geeignet, um für dynamische Webseiten als Datenbasis genutzt zu werden.
37
IN
FO
RM
AT
IK
Zugriff auf MySQL über PHP
• Grundlegende Schritte jedes Datenbankzugriffs in PHP:
1. Verbindung mit dem Datenbanksystem aufbauen
Ergebnis der Verbindung ist eine Variable (Handle), mit der auf die Verbindung zugegriffen werden kann.
Fehler sollten (gerade hier) abgefangen (PHP-Konstrukt „or die“) und ausgegeben werden.
2. Datenbank auswählen
$link = mysql_connect($Host, $Benutzer, $Passwort) or die("DB-Verbindung unmöglich: " . mysql_error());
mysql_select_db($Datenbank) or die("Auswahl Datenbank unmöglich: " . mysql_error());
38
IN
FO
RM
AT
IK
Zugriff auf MySQL über PHP
3. Abfrage ausführen
Ergebnis ist eine Variable (Handle), mit der auf das Resultat der Anfrage zugegriffen werden kann.
4. Ergebnisse ausgeben Grundlegendes Problem
• Programmiersprachen sind iterativ• relationale Datenbanken (und damit SQL) sind
mengenorientiert Speicherung und „Durchlaufen“ der Ergebnisse notwendig
Für das Abrufen der Ergebnisse gibt es drei wesentliche Varianten:i. Arrayii. Assoziatives Arrayiii. Objektorientiert
5. Freigabe der Handles (kann entfallen)
$result = mysql_query($SQLText) or die("Anfrage fehlgeschlagen: " . mysql_error());
mysql_free_result($result);mysql_close($link);
39
IN
FO
RM
AT
IK
Zugriff auf eine Spalte der Ergebniszeile
Auslesen und Speichern einerErgebniszeile als Array
Zugriff auf MySQL über PHP
• Ausgabe der Ergebnisse als Array mysql_fetch_array liefert eine komplette Zeile des
Ergebnisses als Array (Alternative: mysql_fetch_row) Nach der letzten Zeile wird FALSE zurückgegeben
while ($arrRow = mysql_fetch_array($result)){ echo "$arrRow[0] : $arrRow[1]";}
Schleife über alle Zeilen
des Ergebnisses
40
IN
FO
RM
AT
IK
Zugriff auf eine Spalte der Ergebniszeile
Auslesen und Speichern einerErgebniszeile als Array
Schleife über alle Zeilen
des Ergebnisses
Zugriff auf MySQL über PHP
• Ausgabe der Ergebnisse als assoziatives Array mysql_fetch_array liefert auch ein assoziatives Array, d.h.
es kann über die Spaltennamen zugegriffen werden. Problem: Spaltennamen müssen eindeutig sein
while ($arrRow = mysql_fetch_array($result)){ echo "$arrRow[Land] : $arrRow[Sprache]";}
41
IN
FO
RM
AT
IK
Zugriff auf eine Spalte der Ergebniszeile
Auslesen und Speichern einer
Ergebniszeile als objekt
Zugriff auf MySQL über PHP
• Ausgabe der Ergebnisse als Objekt mysql_fetch_object liefert eine komplette Zeile des
Ergebnisses als Objekt Nach der letzten Zeile wird FALSE zurückgegeben
while ($oRow = mysql_fetch_object($result)){ echo "$oRow->Land : $oRow->Sprache";}
Schleife über alle Zeilen
des Ergebnisses
42
IN
FO
RM
AT
IK
Zugriff auf MySQL über PHP
• Weitere interessante Funktionen: mysql_num_rows($result)
• Gibt die Anzahl der Zeilen (Datensätze) im Ergebnis aus. mysql_num_fields($result)
• Gibt die Anzahl der Spalten im Ergebnis aus. mysql_field_name($result, 0)
• Name eines Feldes im Ergebnis. mysql_affected_rows()
• Liefert die Anzahl betroffener Datensätze einer vorhergehenden MySQL Operation wie z.B. DELETE, UPDATE
• Vereinfachung: Herstellen der Verbindung / Datenbankauswahl in einer
separaten Include-Datei, die immer wieder verwendet werden kann.• include "_DBVerbindung.inc";
43
IN
FO
RM
AT
IK
Vernetzung des Themas - Grenzen von SQL
• Problem: „Verfolgen eines Flusslaufes“ von der Quelle zum Meer
z.B. Spree
• Hier werden iterative Strukturenbenötigt, die SQL (als mengen-orientierte Sprache) im Standard nicht bietet.
Anknüpfung an Programmierung PHP, Delphi, Java
Rhein
Mosel
Main
NeckarDonau
Isar
Inn
FuldaWerra
Weser
Elbe
HavelSpreeAller
Elbe
HavelSpree
Nordsee
44
IN
FO
RM
AT
IK
Vernetzung des Themas - Grenzen von SQL
• Problem: „Verfolgen eines Flusslaufes“ vom Meer zu den Zuflüssen
z.B. Nordsee
Beispiel für eine (elegante?)rekursive Programmierung
Rhein
Mosel
Main
NeckarDonau
Isar
Inn
FuldaWerra
Weser
Elbe
HavelSpreeAller
Nordsee
Rhein
Mosel
Main
Neckar
FuldaWerra
Weser
Aller
Elbe
HavelSpree
Nordsee
45
IN
FO
RM
AT
IK
PHP und Datenbanken – Aufgaben
1. Erstellen Sie php-Anzeigeseiten für die Datenbank miniterra.Verwenden Sie dazu Abfragen aus dem SQL-Teil.
2. Erstellen Sie eine Abfrage, bei der der Kontinent eingegeben werden kann (HTML-Formular). Es werden dann alle Länder des Kontinents ausgegeben.
3. Geben Sie die Länder mit ihren Kontinenten aus.Es sollen Links in jeder Spalte sein, die eine Sortierung erlauben.
4. Geben Sie den Verlauf eines Flusses bis zur Mündung aus.(Achtung: evtl. Rekursion!)
46
IN
FO
RM
AT
IKWas kann PHP noch?
• Alle wichtigen Konstrukte sind vorhanden Verschiedene Schleifenformen (auch für assoziative Arrays) Prozeduren / Funktionen Klassen Exceptions etc.
• Strukturierung eines Projekts includes
Exceptions.txt
Klassen.txt
Includes.txt
Aus der PHP-Dokumentation
47
IN
FO
RM
AT
IK
Vorteile / Nachteile von PHP
• PHP ist eine Skriptsprache Einfachere Erlernbarkeit (?) Keine Notwendigkeit der Variablendefinitionen, etc. ( oder
?) Dennoch auch komplexere Programmierkonzepte
(z.B. Klassen, Exceptions) möglich
• PHP kann einfach in HTML eingebunden werden. Da HTML bekannt ist, muss die Ausgabe (Grafik, etc.) nicht
behandelt werden. Ergebnisse sind schnell sichtbar. Es muss kein weiteres Programm (IDE) erlernt werden. Schüler sind leicht zu motivieren, da außenwirksame
(Homepage) Projekte eingebracht werden. Es existiert kaum eine gute Möglichkeit des Debuggings. Umfangreichere Projekte werden leicht unübersichtlich. Vermischung von zwei Sprachen (HTML / PHP) erschwert den
Zugang. (Alternative: PHP zur Shell-Programmierung)
48
IN
FO
RM
AT
IK
Vorteile / Nachteile von PHP
• PHP ist Open-Source-Software In vielen Webpaketen der Provider verfügbar und damit für
die Schüler auch außerhalb der Schule leicht verfügbar. Kein finanzielles Problem bei Anschaffung an der Schule. Ängste bei „etablierten“ Kollegen bzgl. der Wartbarkeit und
Weiterentwicklung einer nicht-kommerziellen Software.
• …
49
IN
FO
RM
AT
IKInternet-Referenzen
• Installation Apache / PHP / mySQL als Paket (XAMPP) http://www.apachefriends.org/en/xampp.html
• PHP-Dokumentation: http://www.php.net/manual/de/
• Weitere PHP-Quellen PHP für Einsteiger
http://informatik.asn-graz.ac.at/phptutorial/index.html WikiBook http://de.wikibooks.org/wiki/Websiteentwicklung:_PHP PHP für dich (Einsteiger) http://www.schattenbaum.net/php/ …
50
IN
FO
RM
AT
IK
Geht es auch mit Python?
• Eine Möglichkeit, der Einbindung von PHP sehr ähnlich: Erweiterung für Apache: Spyce
(http://spyce.sourceforge.net/) Python-Zugriff auf MySQL: MySQL-Python Bibliothek
(http://sourceforge.net/projects/mysql-python/)
Rudimentäre Installationsanleitung / Beispiele in den Unterlagen<h1>Kugeluhr</h1>
[[\from time import *lt = localtime()Stunde = lt[3]Minute = lt[4]print "<p>Es ist %02i:%02i Uhr.<p>" % (Stunde, Minute)i=1while i<=Stunde: if (i%10)==0: print "<img src='kreisvoll10.gif' alt='' />" else: print "<img src='kreisvoll.gif' alt='' />" i=i+1]]
I N F O R M A T I K
Dynamische Webseiten mit PHP [und Python]
Thomas Mohr
Recommended