22
PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Embed Size (px)

Citation preview

Page 1: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

PHP Einführung

Dynamische Webseiten-Generierung

Jürgen Mangler

Page 2: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Dynamische Webseiten-Generierung

• PHP ist eine Skriptsprache, die direkt in HTML-Seiten eingebettet wird, d.h. der Autor schreibt PHP-Befehle zusammen mit HTML-Befehlen in eine Datei. Wird diese Datei von einem Betrachter angefordert, so werden diese PHP-Befehle von einer "Zusatzsoftware" des Webservers Schritt für Schritt ausgeführt und die Ergebnisse an den Betrachter weitergeleitet.

• Achtung: Der Webserver muß "PHP"-fähig sein. Standardmäßig funktionieren diese Befehle nicht.

• PHP wird seit etwa 1994 entwickelt und erfreut sich stetig wachsender Beliebtheit. Ein besonderer Schwerpunkt liegt auf der Einbindung verschiedener Datenbanken. Die Sprache ist an C, Java und Perl angelehnt.

• Eine ausführliche Beschreibung finden Sie unter http://at.php.net/manual/de/

Page 3: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

PHP Befehle in HTML einbauen

Dazu gibt es 4 Möglichkeiten:

<? ... ?> <?php ... ?> <script language="php"> ... </script> <% ... %>

"..." steht für beliebige PHP-Befehle.

Page 4: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Unser erster PHP-Befehl!

Der echo-Befehl gibt Texte (sogenannte Strings) aus: <? echo "Hallo"; ?>

Merke: Alle PHP-Befehle werden mit ";" abgeschlossen.

Es gibt eine Reihe von Sonderzeichen. Wichtigstes Sonderzeichen: "\n": Neue Zeile.C- oder Perl-Kennern sind diese Zeichen natürlich vertraut.

echo "Hallo\n"; echo "Hallo\n";

Man beachte dabei den Unterschied zu echo "Hallo<BR>"; echo "Hallo<BR>";

Im ersten Fall wird lediglich im vom Webserver ausgelieferten HTML-Text ein Zeilumbruch durchgeführt. Im zweiten Fall enthält der HTML-Text den HTML-Befehl zum Zeilenumbruch.

Page 5: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Vordefinierte Variablen

Da PHP speziell zur Erzeugung von dynamischen Webseiten geschaffen wurde, ist es ein Kinderspiel, Eingaben, die aus HTML-Formularen stammen, zu bearbeiten. Ein Beispiel. Die Formulardatei enthalte:

<form action="tuwas.php" method="post">

<input name="var">

<input type="submit">

</form>

Der HTML-Formular-Kenner sieht sofort: Beim Klicken auf den Submit-Button wird also die Datei tuwas.php aufgerufen.

Page 6: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Vordefinierte Variablen

Diese Datei könnte dann so aussehen: <?

print "Sie haben ${HTTP_POST_VARS["var"]} eingegeben. ";

?> Kurz gesagt: der Text, der in das Formularfeld “var” eingegeben wurde, ist dann in der PHP-Variablen ${HTTP_POST_VARS["var"]} enthalten.

Achtung: Anfänger sollten immer method="post" beim Formular angeben, bei "get" sind die Variablen analog in $HTTP_GET_VARS enhalten!

Achtung: Wenn Sie <input type="file"> verwenden müssen Sie unbedingt enctype="multipart/form-data" zusätzlich angeben und $HTTP_POST_FILES verwenden.

Page 7: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Einfache Rechenoperationen

Folgende Rechenoperationen stehen in PHP zur Verfügung: "+": Addition, $i+$j, "-": Subtraktion, $i-$j "*": Multiplikation, $i*$j "/": Division, $i/$j "%": Reste-Bildung, $i%$j: z.B. 23%17 ergibt 6, da 23

geteilt durch 17 gleich 1 Rest 6 ist. ".": Verknüpft Strings:

$l = "langer"; $k = "kurzer"; print $l.$k;

ergibt "langerkurzer"

Page 8: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Erste Schleifen

Gleich ein Beispiel:

$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>\n";$i = 0; while ($i<10) {

print $t; $i++;

}

Hier wird 10-mal der Text in der Variablen $t ausgegeben. Zu Beginn wird $i auf 0 gesetzt. $i wird in jedem Schleifendurchlauf um 1 erhöht, bis $i den Wert 10 erreicht. Dann ist die Bedingung ($i<10) nicht mehr wahr und die Schleife bricht ab.

Page 9: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Weitere Befehle zur Ablaufkontrolle

Alternativ dazu möglich:

$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>\n"; $i = 0; do {

print $t; $i++;

} while ($i<10);

Was ist der Unterschied? Man bemerkt den Unterschied, wenn z.B. statt $i=0; zu Beginn $i=10; gesetzt wird. Im ersten Fall ist die Bedingung ($i<10) nicht wahr und die Befehle innerhalb der geschweiften Klammern werden nicht ausgeführt.

Page 10: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Weitere Befehle zur Ablaufkontrolle

Eine weitere Möglichkeit, eine Schleife zu programmieren, ist der for-Befehl. Gleich ein Beispiel:

$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>\n";for ($i=0;$i<10;$i++) {

print $t; }

Der for-Befehl besteht aus drei Ausdrücken.

for (ausdruck1;ausdruck2;ausdruck3) { ... } – Mit ausdruck1 wird die Schleife initialisiert, d.h. normalerweise wird die

Variable, die die Schleifendurchläufe zählt, auf den Anfangswert gesetzt. – ausdruck2 gibt die Abbruchbedingung an. – In ausdruck3 steht ein beliebiger Ausdruck. Zumeist wird eine in der

Abbruchbedingung enthaltene Variable verändert (z.B. Die Laufvariable wird erhöht bzw. erniedrigt).

Page 11: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Weitere Befehle zur AblaufkontrolleZur Fallunterscheidung gibt es den if-Befehl:

if ($i<0) { echo "$i ist kleiner als Null\n";

} else if ($i>0) { echo "$i ist groesser als Null\n";

} else { echo "$i ist Null\n";

}

Hat man mehrere Tests der gleichen Variable, so kann man mit dem switch-Befehl evtl. Arbeit einsparen:

switch ($name) { case "Jürgen":

echo "Ich bin der kluge Jürgen"; break;

default: echo "Wir sind der Rest";

}

Page 12: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Weitere Vergleichsmöglichkeiten

Bisher konnten wir testen, ob $i<10 oder $i>10 gilt. Es gibt aber noch mehr Möglichkeiten:

$i == 10: Ist $i gleich 10? $i != 10: Ist $i ungleich 10? $i >= 10: Ist $i größer oder gleich 10? $i <= 10: Ist $i kleiner oder gleich 10?

Man kann auch kombinieren:

($i==10) && ($j>0): Ist $i gleich 10 und $j größer als 0?($i==10) || ($j==0): Ist $i gleich 10 oder $j gleich 0?

Page 13: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Nochmals vordefinierte Variablen

Wir haben gelernt, daß in einer PHP-Datei, die aus einem Formular gestartet wird, die Namen der Formular-Elemente als Variablen zur Verfügung stehen. Dies kann man nützen, um Formular und Befehle, die das Formular behandeln, in eine einzige Datei zu schreiben:

Angenommen die Formulardatei "einformular.php" enthält: <form action="einformular.php" method="post">

<input name="var"><input type="submit">

</form>

Dann ruft sich beim Klicken auf submit die Datei selbst auf. Allerdings ist dann die Variable "var" gesetzt.

Page 14: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Nochmals vordefinierte Variablen

Dies können wir folgendermaßen ausnützen: <?

if (isset($HTTP_POST_VARS["var"])) { print "Sie haben ${HTTP_POST_VARS["var"]} eingegeben. ";exit;

} ?> <form action="einformular.php" method="post">

<input type="text" name="var"><input type="submit">

</form>

Wird die Datei zum ersten Mal aufgerufen, d.h. ohne daß man auf den submit-Button klickt, so ist die Variable $HTTP_POST_VARS["var"] nicht gesetzt.

Page 15: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Nochmals vordefinierte Variablen

Füllt man das Formular dann aus und klickt auf submit,

– so ist die Variable gesetzt,– isset ($HTTP_POST_VARS["var"]) ist wahr– es wird "Sie haben test eingegeben\n" ausgegeben.

Eine weiter Möglichkeit wäre exit; wegzulassen und stattdessen folgendes zu verwenden.

<input type="text" name="var" value="<?= $HTTP_POST_VARS["var"] ?>">

Dadurch erscheint das Formular im vorausgefüllten Zustand.

Page 16: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Nochmals vordefinierte Variablen

Füllt man das Formular dann aus und klickt auf submit, – so ist die Variable gesetzt,– isset ($HTTP_POST_VARS["var"]) ist wahr– es wird "Sie haben test eingegeben\n" ausgegeben.

Eine weiter Möglichkeit wäre exit; wegzulassen und stattdessen folgendes zu verwenden.

<input type="text" name="var" value="<?= $HTTP_POST_VARS["var"] ?>">

Dadurch erscheint das Formular im vorausgefüllten Zustand.

Page 17: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

Funktionen

Ein wichtiger Bestandteil einer jeden Programmiersprache ist die Fähigkeit, mehrere Befehle zu einem einzigen Befehl zusammenzufassen, d.h. neue Funktionen zu definieren. PHP hat diese Fähigkeit selbstverständlich auch.

Ein Beispiel: Wir wollen für eine Anzahl von Tagen berechnen, wieviele Sekunden diese Tage zusammen haben:

function tag ($anzahl) { $sekunden = 3600 * 24 * $anzahl; return $sekunden;

} $x = tag(7); print "7 Tage bestehen aus ${x} Sekunden !";

Page 18: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

SQL GrundlagenSQL-Datenbanken bestehen aus 1 oder mehreren sogenannten Tabellen. Jeder Datensatz der Datenbank ist genau eine Zeile in einer Tabelle. Beispiel: Ein Mensaführer für Wien. Die Tabelle mensen:

Man kann nun auf eine dieser Tabellen zugreifen, aber auch Tabellen verküpfen.

Es gibt im wesentlichen vier Abfragemöglichkeiten: Auslesen: SELECT Einfügen: INSERT Überschreiben: UPDATE Löschen: DELETE

…………

Schlecht angezogene Gäste4WU-Mensa2

Gutes Essen1Katholische Mensa1

KommentarNoteNameID

Page 19: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

SQL Grundlagen

Will man z.B. alle mensennamen, die sich in der Datenbank befinden, auslesen, gibt man folgenden den SQL-Befehl ein:

SELECT Name FROM mensen;

Will man Name und Note der Mensa auslesen:SELECT Name,Note FROM kneipen;

Die Datensätze können noch weiter spezifiziert werden: SELECT * FROM kneipen WHERE Note=1 order by Name;

Neue Datensätze werden folgendermaßen hinzugefügt:INSERT mensen (ID,Name,Note,Kommentar) VALUES (1,'TU','1','Super!');

Vorhandene Datensätze können mit UPDATE mensen SET Note='5',Kommentar='Wäh!' WHERE ID=3;

Page 20: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

SQL mit Oracle und PHP

Wie greifen wir nun konkret auf unsere Datenbank zu? Zuerst müssen wir eine Verbindung zum Oracle SQL Server aufbauen:

$connection = OCILogon("a6666666", "test1234");

wobei a6666666 dar Benutzername ist, und test1234 das Passwort. Wir bekommen dann einen connection zurückgeliefert, die wir in der Variable $connection speichern.

Mit $stmt = OCIParse($connection, "SELECT * FROM mensen");

OCIExecute($stmt);

führen wir den SQL Befehl "SELECT * FROM mensen" für die Verbindung $connection aus, das Ergebnis wird in $stmt gespeichert.

Page 21: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

SQL mit Oracle und PHP

Nun müssen wir nur noch die einzelnen Zeilen des Ergenisses ausgeben

while(OCIFetch($stmt)) {

print OCIResult($stmt, "ID") . " ";

print OCIResult($stmt, "NAME") . " ";

print OCIResult($stmt, "NOTE") . " ";

print OCIResult($stmt, "KOMMENTAR") . "<br>";

}

Mit OCIFetch werden die einzelnen Zeilen abgerufen, mit OCIResult wird auf die Spalten einer Zeile zugegriffen.

Wichtig: am Ende $stmt abschliessen und Verbindung schliessen:

OCIFreeStatement($stmt);

OCILogoff($connection);

Page 22: PHP Einführung Dynamische Webseiten- Generierung Jürgen Mangler

SQL mit Oracle und PHP

Tips:– $stmt immer leeren– $connection immer schliessen– Bei OCIResult müssen die Spaltennamen in Grossbuchstaben

angegeben werden

Das hier besprochene Beispiel finden Sie unterhttp://almighty.pri.univie.ac.at/~a6666666/db.php