Dynamische Webseiten-Generierung, Vorlesung 2
7) Weitere Befehle zur Ablaufkontrolle
In 6) haben wir die erste Möglichkeit kennengelernt, eine Programm-Schleife zu erzeugen. Statt $t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>\n";
$i = 0;
while ($i<10) {
echo $t;
$i++;
}
kann man auch schreiben: $t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>\n";
$i = 0;
do {
echo $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.
Im zweiten Fall werden zuerst die Befehle innerhalb der geschweiften Klammern ausgeführt, danach wird getestet, ob ($i<10). Dies ist nicht der Fall, also wird abgebrochen. D.h. aber, die Schleife wird mindestens einmaldurchlaufen.
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++) {
echo $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 wird die Variable, die die Schleifendurchläufe zählt, erhöht bzw. erniedrigt.
$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>\n";
for ($i=10;$i>0;$i--) {
echo $t;
}
8) Fallunterscheidungen
Zur Fallunterscheidung gibt es den if-Befehl: if ($i<0) {
echo "$i ist kleiner als Null\n";
}
oder auch if ($i<0) {
echo "$i ist kleiner als Null\n";
} else {
echo "$i ist nicht kleiner als Null\n";
}
Man kann diesen Befehl auch schachteln: 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 "Heinrich":
echo "Ich bin der kluge Heinrich";
break;
case "Hans":
echo "Ich bin der dumme Hans";
break;
case "Agathe":
echo "Ich bin die Agathe und klüger als Heinrich und Hans";
break;
default:
echo "Wir sind der Rest";
}
Falls die Variable $name den Wert "Hans" hat, wird als nächster Befehlecho "Ich bin der dumme Hans";ausgeführt. Normalerweise würden dann alle nachfolgenden Befehle ausgeführt werden, u.a.
echo "Ich bin die Agathe und klüger als Heinrich und Hans";Dies ist meist nicht erwünscht, man springt deshalb mit break aus dem switch-Befehl heraus.
9) 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?
- ($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?
10) Nochmals vordefinierte Variablen
In 4) haben wir 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 unsere Datei form.html enthält folgendes Formular:
<FORM ACTION="form.html" METHOD=POST> <INPUT NAME="beliebigername"> <INPUT TYPE="submit"> </FORM>Dann ruft sich beim Klicken auf submit die Datei selbst auf. Allerdings ist dann die Variable beliebigername beliebiger Name gesetzt. Dies können wir folgendermaßen ausnützen:
<?
if (isset($beliebigername)) {
echo "Sie haben $beliebigername eingegeben\n";
}
?>
<P>
<FORM ACTION="form.html" METHOD=POST>
<INPUT NAME="beliebigername">
<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 $beliebigername nicht gesetzt, der Ausdruck isset($beliebigername) ist also nicht wahr. Füllt man das Formular dann aus und klickt auf submit, so ist die Variable gesetzt, isset($beliebigername) ist wahr, und es wird "Sie haben $beliebigername eingegeben\n"; ausgegeben.
Will man danach abbrechen, so sollte der Befehl
exit;verwendet werden.
11) Dateien hinzuladen
Der Befehl include("dateiname");
liest den Inhalt der Datei dateiname so, als ob er an dieser Stelle stehen würde. Damit kann z.B. einheitliches Layout bei einer größeren Anzahl von Dateien erreicht werden.12) Dateien lesen und schreiben
Wir wollen nun von Dateien, die auf dem Server liegen, lesen, bzw. in diese Dateien etwas hineinschreiben. Dies ist nützlich, um z.B. Zähler oder Gästebücher zu erzeugen.
Wichtig:
Aus Sicherheitsgründen ist der Webserver einem Benutzer auf dem Server-Computer zugeordnet, der sehr wenig Rechte hat. U.a. darf er nicht einfach in eine Datei in ihrem Verzeichnis schreiben. Genausowenig darf er eine Datei in Ihrem Verzeichnis erzeugen.
Aus Sicherheitsgründen ist der Webserver einem Benutzer auf dem Server-Computer zugeordnet, der sehr wenig Rechte hat. U.a. darf er nicht einfach in eine Datei in ihrem Verzeichnis schreiben. Genausowenig darf er eine Datei in Ihrem Verzeichnis erzeugen.
| Leider ist es mit dem ftp-Programm, das mit dem ASS-Zugang der Uni Bayreuth zur Verfügung steht, nicht möglich die Zugriffsrechte zu ändern (jedenfalls weiß ich nicht wie).
Um z.B. eine Datei xxx zu erzeugen, in die der Webserver schreiben darf, müssen Sie telnet benutzen:
Verwenden Sie Windows 95 oder Windows NT, so kann man im ftp-Programm die Datei-Anwählen, auf die rechte Maustaste klicken und dann den Befehl chmod verwenden.
|
OK. Gehen wir davon aus, daß wir nun eine Datei mit dem Namen xxx haben, deren Inhalt wir lesen wollen.
- Zuerst müssen wir die Datei öffnen, dabei muß angegeben werden, was mit der Datei geschehen soll: Wollen wir lesen, schreiben, anhängen,...
Der Befehl lautet$datei = fopen("xxx","r");Das heißt, wir öffnen die Datei mit dem Namen xxx und wollen darin lesen ("r"). Die technischen Details lassen wir dabei von der Variablen $datei regeln, d.h. wenn wir später aus der Datei lesen wollen, so benützen wir die Variable $datei. - Nun lesen wir zeilenweise den Inhalt der Datei, und zwar so lange, bis wir ans Ende der Datei gelangt sind:
while (!feof($datei)) { $zeile = fgets($datei,1000); echo $zeile; }feof($datei) ist wahr, sobald wir an das Datei-Ende gelangt sind. $zeile = fgets($datei,1000); liest maximal die nächsten 1000 Zeichen, hört aber auf, sobald eine neue Zeile beginnt, oder das Ende der Datei erreicht ist.
echo $zeile; gibt einfach das Gelesene wieder aus. - Schließlich muß die Datei noch geschlossen werden:
fclose($datei);
- "r": nur lesen, begonnen wird am Dateianfang.
- "r+": lesen und schreiben, begonnen wird am Dateianfang.
- "w": nur schreiben. Existiert die Datei bereits, wird der bisherige Inhalt gelöscht. Existiert sie nicht, wird versucht. sie zu erzeugen.
- "w+": lesen und schreiben. Ansonsten wie "w".
- "a": nur schreiben. Begonnen wird am Ende der Datei (a wie append, anhängen). Existiert sie nicht, wird versucht. sie zu erzeugen.
- "a+": lesen und schreiben. Ansonsten wie "a". Achtung: Es wird beim Lesen natürlich auch am Ende der Datei begonnen (dort steht natürlich nichts mehr...)
fwrite($datei, "Ein Text");kann der String Ein Text in die Datei geschrieben werden.
Keine Kommentare:
Kommentar veröffentlichen