Powerpoint-Präsentation

Werbung
Dynamische Webseiten mit PHP [und Python]
Thomas Mohr
I
N
F
O
R
M
A
T
I
K
Beschränkung (X)HTML
K
• (X)HTML ist rein „statisch“, d.h.
A
T
I
 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.).
M
• Zur Erinnerung der Ablauf:
N
F
O
R
 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.
I
• eine Lösung:
Skriptsprachen (PHP, Python, ASP, …) auf dem Server
2
T
I
K
Abruf von Webseiten
A
Webanfrage
R
M
HTML-Datei
im Dateisystem
Webserver
http://server.com/Datei.html
HTML
Datei.html
HTML
I
N
F
O
Datei.html
Internet
3
Web-Client
mit Browser
K
Wie kommt die Seite auf den Server?
PC
R
M
HTML
A
T
HTML
I
„Programmieren“
der HTML-Datei
O
Webserver
Ftp-Server
Web-Client
I
N
F
Abrufen der Seite
über http
Web-Client
4
Internet
Web-Client
I
K
… und auf den Übungsrechnern?
R
M
HTML
A
T
„Programmieren“
der HTML-Datei
O
Webserver
F
Abrufen der Seite
über http
I
N
Browser
5
Verzeichnisstruktur Apache-Webserver
I
K
• In der Standard-Installation von xampp liegen die HTML-Dateien
im Unterverzeichnis htdocs.
T
 Weitere (virtuelle) Web-Verzeichnisse können in der
Konfigurationsdatei angelegt werden.
M
A
xampplite
R
(Webserver-Programm)
php.ini, um Einstellungen für PHP zu ändern
conf
Konfiguration des Webservers in httpd.conf
(z.B. Anlegen weiterer Verzeichnisse)
logs
Logdateien des Webservers (Zugriffe / Fehler)
N
bin
O
Basisverzeichnis des Webservers
F
apache
I
htdocs
wb
mysql
6
Standardverzeichnis für HTML-Dateien
Bitte Anlegen, um eigene HTML-Dateien abzulegen.
Verzeichnis der MySQL-Datenbank
(auch der Datenbanken selbst)
Was ist PHP?
K
• PHP (rekursives Akronym für „PHP: Hypertext Preprocessor“)
I
 ursprünglich „Personal Home Page Tools“
T
• PHP
A
 ist eine Skriptsprache,
M
• d.h. man braucht ein spezielles Programm (Interpreter), um das PHPProgramm auszuführen (Bestandteil des XAMPP-Paketes).
R
 dient hauptsächlich zur Erstellung „dynamischer“ Webseiten,
• d.h. die Webseite kann sich bei jedem Aufruf verändern.
O
 ist „Open-Source“-Software, d.h.
I
N
F
• die Software ist kostenlos .
• die Software darf von jedem weiter entwickelt werden und unter der
gleichen Lizenz weitergegeben werden.
7
PHP erweitert HTML
K
• Mit PHP kann HTML so erweitert werden, dass
I
 Anteile der HTML-Seite erst beim Aufruf eingefügt werden.
• z.B. das aktuelle Datum oder die Uhrzeit
M
A
T
 auf Benutzereingaben reagiert wird.
 Inhalte von Datenbanken abgerufen werden können.
 …
R
• PHP wird in der HTML-Datei „programmiert“.
I
N
F
O
 Der Webserver besitzt ein besonderes Programm, den PHPInterpreter, der das PHP-Programm im HTML ausführt.
 Die Ausgabe des PHP-Programms wird in die HTML-Datei eingefügt.
8
I
K
PHP erweitert HTML
T
PHP-Datei im
Dateisystem
HTML
&
PHP
Datei.php
A
Webanfrage
M
http://server.com/Datei.php
R
PHPInterpreter
Webserver
HTML
F
Datei.php
I
HTML
N
O
Datei.php
Internet
9
Web-Client
mit Browser
• PHP-Bereiche im HTML werden durch eine bestimmte
Schreibweise (Syntax) vom eigentlichen HTML-Code getrennt.
I
N
F
O
R
M
A
T
I
K
Trennung HTML - PHP
<h1>Aktuelles Datum</h1>
<p>
<?php
echo 'Datum:' . date("d. M Y");
?>
</p>
PHP-Bereich innerhalb einer
HTML-Datei.
PHPInterpreter
<h1>Aktuelles Datum</h1>
<p>
Datum: 14. Nov 2008
</p>
Vom PHP-Bereich auf dem Server
erzeugte Ausgabe (reiner HTML-Code).
Browser
(HTML-Interpreter)
Im Browser angezeigte HTML-Seite.
10
T
I
K
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.
<h1>Ein PHP-Beispiel</h1>
<?php
echo "<h2>Mein erstes PHP-Programm</h2>";
echo "<p>...mit zwei Anweisungen</p>";
?>
PHPInterpreter
I
N
F
O
R
M
A
• In der Regel sollte nur eine Anweisung in einer Zeile stehen.
11
<h1>Ein PHP-Beispiel</h1>
<h2>Mein erstes PHP-Programm</h2>
<p>...mit zwei Anweisungen</p>
Hier wurden auch HTML-Tags durch PHP erzeugt.
Zwei PHP-Anweisungen
zur Ausgabe eines Textes
• Welche Uhrzeit wird am Client angezeigt?
I
K
„Dynamische“ Inhalte
T
Webanfrage
Webserver
Datei.php
HTML
Web-Client
mit Browser
Standort: Atlanta USA
Uhrzeit: 2:20 am
Standort: Speyer
Uhrzeit: 9:20 Uhr
I
N
F
O
http://server.com/Datei.php
Datei.php
R
M
A
HTML
&
PHP
12
Da die PHP-Datei in Atlanta umgewandelt wird, wird auch die Zeit
des Webservers eingesetzt, also 2:20 am.
• Variablen können
 Werte zugewiesen werden.
<h2>Variablen in PHP</h2>
<?php
$MeinText = 'Hallo Welt!';
$Zahl
= 4711.0815;
?>
Namen von Variablen beginnen
immer mit einem $-Zeichen.
 ausgelesen werden.
<?php
echo "<p>Text: $MeinText</p>";
echo '<p>Zahl: ' . $Zahl . '</p>';
?>
PHPInterpreter
I
N
F
O
R
M
A
T
I
K
Variablen
<h1>Variablen in PHP</h1>
<p>Text: Hallo Welt!</p>
<p>Zahl: 4711.0815</p>
13
Zwei Varianten zur Ausgabe
• Abhängig von der Uhrzeit soll die Homepage „Vormittag“ oder
„Nachmittag“ anzeigen.
 Den Ablauf des Programms kann man sich im Struktogramm
klarmachen.
M
A
T
I
K
Bedingte Ausführung – Struktogramm
R
O
Wenn ($Stunde < 12)
F
Ja
Ausgabe: „Vormittag“
I
$Stunde : = Stundenanteil(Zeit)
N
$Zeit : = aktuelle Uhrzeit
14
Nein
Ausgabe: „Nachmittag“
• Sollen Programmteile nur unter bestimmten Bedingungen
ausgeführt werden, so kommt die if-Anweisung zum Einsatz:
if (Bedingung) {Anweisungen} else {Anweisungen}
<?php
$Zeit = getdate();
$Stunde = $Zeit["hours"];
O
R
M
A
T
I
K
Bedingte Ausführung – If-Anweisung
I
N
F
if ($Stunde<12)
{
echo "Vormittag!";
}
else
{
echo "Nachmittag!";
}
?>
15
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
O
R
M
A
T
I
K
Kommentare
• Wie in HTML können / sollen Kommentare benutzt werden, um
die Funktionsweise eines PHP-Programms zu beschreiben:
 Einzeilige Kommentare
<?php
// ich bin ein Kommentar
echo "Hallo Welt!";
?>
 Es können auch ganze Bereiche als mehrzeilige Kommentare markiert
werden.
I
N
F
• z.B. um ein Stück PHP-Programm zeitweise „außer Betrieb zu setzen“.
19
<?php
echo "Vor dem Kommentarbereich";
/* Dies ist ein Kommentar
mit mehreren Zeilen */
echo "Nach dem Kommentarbereich";
?>
• 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>
I
N
F
O
R
M
A
T
I
K
Kommentare
Viele Kommentare
… sind wichtig!
20
• 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:
Name und
Anfangswert
der Zählvariable
R
O
$Summe = 0
Solange $i<=20
I
N
$i = 1
F
M
A
T
I
K
PHP – Schleifen
$i=$i+1
$Summe=$Summe+$i;
Bedingung, ob
die Schleife
wiederholt wird.
$i=1;
$Summe=0;
while ($i<=20)
{
$Summe=$Summe+$i;
$i=$i+1;
}
Veränderung der
Zählvariable
24
Schleifenrumpf
mehrfach ausgeführt
• 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
25
$i:21
$i= $i +1
...
$i:20
$i= $i +1
$i:2
while ($i<=20)
{
$Summe=$Summe+$i;
$i=$i+1;
}
$i:1
$i=1;
$Summe=0;
$i=$i +1
N
F
O
R
M
A
T
I
K
Schleifen
I
N
F
O
R
M
A
T
I
K
Schleifen
26
• 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:
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
 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.
K
Solange $x<=10
$y=f($x)
$x=$x+0.5
A
T
$x = 0
I
Funktionen
Wert(e), der an die
Funktion übergeben
wird.
$x=0;
while ($x<=10)
{
$y=f($x);
echo "$y <br />";
$x= $x+1;
}
function f($eingabe)
{
$rueckgabe= $eingabe*$eingabe;
return $rueckgabe;
}
I
N
F
O
R
M
Name der
Funktion
Aufrufendes
Programm
28
Funktion
(Unterprogramm)
Wert, der
zurückgegeben wird
I
N
F
O
R
M
A
T
I
K
Übungen
29
Endlich – Sie sind dran!
I
N
F
O
R
M
A
T
I
K
Eingaben?? - Formulare in HTML
30
• 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.
K
Exkurs – Formulare in der „realen“ Welt
A
Harry Potter
M
Formulare
31
Auswerten
der Daten
Herr Potter!
Verarbeitung
Ausgabe des Ausweises
I
N
F
O
R
Formular
Ausweis #4711
Bibliotheksausweis
Bibliothek
Benutzer
Ausfüllen
von Daten
T
I
Frage nach Formular
K
Formulare in HTML
I
Rufe Eingabe-Seite auf
Harry Potter
M
A
Formular.html
Auswerten
der Daten
HTML
&
PHP
32
Herr Potter!
Verarbeitung.php
Ergebnis der Verarbeitung
I
N
F
O
R
Formular.html
Kunde #4711
Verarbeitung.php
Webserver
Web-Client
Eingabe
von Daten
T
HTML
• Das Formular erfordert spezielle HTML-Tags
 (PHP ist für das Eingabeformular nicht notwendig).
I
K
Formulare in HTML
T
• Bsp.:
I
33
<form action="Verarbeitung.php" method="post">
...
<input type="text" name="Benutzer" />
Text-Eingabefeld
mit Namen „Benutzer“
...
<input type="submit" value="abschicken" />
</form>
Button zum Aufruf
Verarbeitungsseite
Formularblock
N
F
O
R
M
A
Verarbeitungsseite
• 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>
Formular.html
I
N
F
O
R
M
A
T
I
K
Formulare in HTML
<?php
echo "Name: " . $Benutzer;
echo "Alter: " . $Alter;
?>
Verarbeitung.php
34
I
N
F
O
R
M
A
T
I
K
Übungen
35
Learning by doing…
• 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
I
N
F
O
R
M
A
T
I
K
Vernetzung des Themas
36
 Datenbanken sind gut geeignet, um für dynamische Webseiten als
Datenbasis genutzt zu werden.
•
Grundlegende Schritte jedes Datenbankzugriffs in PHP:
1. Verbindung mit dem Datenbanksystem aufbauen
$link = mysql_connect($Host, $Benutzer, $Passwort)
or die("DB-Verbindung unmöglich: " . mysql_error());
M
A
T
I
K
Zugriff auf MySQL über PHP

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.
N
F
O
R

I
2. Datenbank auswählen
37
mysql_select_db($Datenbank)
or die("Auswahl Datenbank unmöglich: " . mysql_error());
Abfrage ausführen
$result = mysql_query($SQLText)
or die("Anfrage fehlgeschlagen: " . mysql_error());

4.
Grundlegendes Problem
F
O
•
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
N
i.
ii.
iii.
5.
38
Ergebnis ist eine Variable (Handle), mit der auf das Resultat der
Anfrage zugegriffen werden kann.
Ergebnisse ausgeben

R
M
A
I
3.
T
K
Zugriff auf MySQL über PHP
Array
Assoziatives Array
Objektorientiert
Freigabe der Handles
(kann entfallen)
mysql_free_result($result);
mysql_close($link);
 mysql_fetch_array liefert eine komplette Zeile des Ergebnisses
als Array (Alternative: mysql_fetch_row)
 Nach der letzten Zeile wird FALSE zurückgegeben
A
I
• Ausgabe der Ergebnisse als Array
T
K
Zugriff auf MySQL über PHP
Schleife über
alle Zeilen
des Ergebnisses
while ($arrRow = mysql_fetch_array($result))
{
echo "$arrRow[0] : $arrRow[1]";
}
I
N
F
O
R
M
Auslesen und Speichern einer
Ergebniszeile als Array
Zugriff auf eine Spalte der Ergebniszeile
39
• 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
A
T
I
K
Zugriff auf MySQL über PHP
Schleife über
alle Zeilen
des Ergebnisses
while ($arrRow = mysql_fetch_array($result))
{
echo "$arrRow[Land] : $arrRow[Sprache]";
}
I
N
F
O
R
M
Auslesen und Speichern einer
Ergebniszeile als Array
Zugriff auf eine Spalte der Ergebniszeile
40
• Ausgabe der Ergebnisse als Objekt
 mysql_fetch_object liefert eine komplette Zeile des Ergebnisses
als Objekt
 Nach der letzten Zeile wird FALSE zurückgegeben
A
T
I
K
Zugriff auf MySQL über PHP
Schleife über
alle Zeilen
des Ergebnisses
while ($oRow = mysql_fetch_object($result))
{
echo "$oRow->Land : $oRow->Sprache";
}
I
N
F
O
R
M
Auslesen und Speichern einer
Ergebniszeile als objekt
Zugriff auf eine Spalte der Ergebniszeile
41
K
Zugriff auf MySQL über PHP
• Weitere interessante Funktionen:
T
I
 mysql_num_rows($result)
• Gibt die Anzahl der Zeilen (Datensätze) im Ergebnis aus.
 mysql_num_fields($result)
M
A
• Gibt die Anzahl der Spalten im Ergebnis aus.
 mysql_field_name($result, 0)
• Name eines Feldes im Ergebnis.
I
N
F
O
R
 mysql_affected_rows()
42
• 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";
• Problem: „Verfolgen eines Flusslaufes“
 von der Quelle zum Meer
z.B. Spree
Nordsee
T
I
K
Vernetzung des Themas - Grenzen von SQL
• Hier werden iterative Strukturen
benötigt, die SQL (als mengenorientierte Sprache) im Standard
nicht bietet.
Weser
Rhein
Fulda
Mosel
Neckar
Donau
Inn
F
I
N
Werra
Main
 Anknüpfung an Programmierung
 PHP, Delphi, Java
Havel
Aller
O
R
M
A
Elbe
Isar
43
Spree
• Problem: „Verfolgen eines Flusslaufes“
 vom Meer zu den Zuflüssen
z.B. Nordsee
Nordsee
T
I
K
Vernetzung des Themas - Grenzen von SQL
R
M
A
Elbe
Havel
Aller
 Beispiel für eine (elegante?)
rekursive Programmierung
Weser
Rhein
O
Fulda
Werra
F
Main
Neckar
Donau
Inn
I
N
Mosel
Isar
44
Spree
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.
I
N
F
O
R
M
A
T
I
K
PHP und Datenbanken – Aufgaben
45
4. Geben Sie den Verlauf eines Flusses bis zur Mündung aus.
(Achtung: evtl. Rekursion!)
• Alle wichtigen Konstrukte sind vorhanden





Verschiedene Schleifenformen (auch für assoziative Arrays)
Prozeduren / Funktionen
Klassen
Exceptions
etc.
R
M
A
T
I
K
Was kann PHP noch?
• Strukturierung eines Projekts
I
N
F
O
 includes
46
Aus der PHP-Dokumentation
I
N
F
O
R
M
A
T
I
K
Vorteile / Nachteile von PHP
47
• 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)
• 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.
I
N
F
O
R
M
A
T
I
K
Vorteile / Nachteile von PHP
48
• …
I
K
Internet-Referenzen
• Installation Apache / PHP / mySQL als Paket (XAMPP)
 http://www.apachefriends.org/en/xampp.html
 http://www.php.net/manual/de/
I
N
F
O
R
M
A
T
• PHP-Dokumentation:
49
• 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/
…
• 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/)
I
N
F
O
R
M
A
T
I
K
Geht es auch mit Python?
50
 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=1
while i<=Stunde:
if (i%10)==0:
print "<img src='kreisvoll10.gif' alt='' />"
else:
print "<img src='kreisvoll.gif' alt='' />"
i=i+1
]]
Dynamische Webseiten mit PHP [und Python]
Thomas Mohr
I
N
F
O
R
M
A
T
I
K
Herunterladen