WWW-Programmierung II, Vorlesung 8

<- Vorlesung 7 Übungen Vorlesung 9 ->


26) Variable Variable

Dies ist nun schon fortgeschrittene PHP-Programmierung: In manchen Fällen will man Schleifen über eine Menge von Variablen laufen lassen. Zum Beispiel wenn man viele Eingabefelder in einem Formular hat:
	<INPUT NAME="feld0" >
	<INPUT NAME="feld1" >
	<INPUT NAME="feld2" >
	...
	<INPUT NAME="feld99" >
Nun ist es sehr mühsam, alle Felder einzeln zu behandeln. Will man z.B. einfach den Inhalt aller Eingabefelder ausgeben, so kann man statt der folgenden 100 Befehle
	echo "feld0: $feld0 <BR>\n";
	echo "feld1: $feld1 <BR>\n";
	...
	echo "feld99: $feld99 <BR>\n";
auch folgendermaßen vorgehen. Wir basteln uns den jeweiligen Variablennamen zusammen:
	for ($i=0;$i<100;$i++) {
		$v = "feld".$i;
		echo "$v: ${$v} <BR>\n";
	}
Mit einem $v erhalten wir den Variablennamen, mit ${$v} greifen wir auf den Inhalt der Variablen mit dem Namen $v zu.


27) Arrays aus Formularen

Ein weiterer nützlicher Trick: Wenn wir in einem Formular aus einer Menge von HTML-Checkboxen mit PHP ermitteln wollen, welche Checkboxen angeklickt wurden, dann scheitert die bisherige Vorgehensweise:
	<INPUT TYPE=CHECKBOX NAME="x" VALUE=1 > Option 1
	<INPUT TYPE=CHECKBOX NAME="x" VALUE=2 > Option 2
	...
Schickt man dieses Formular ab, so hat die PHP-Variable $x nur den Wert der ersten angeklickten Checkbox. Der Trick ist, in HTML die Checkbox zum Beispiel so zu benennen:
	<INPUT TYPE=CHECKBOX NAME="x[]" VALUE=1 > Option 1
	<INPUT TYPE=CHECKBOX NAME="x[]" VALUE=2 > Option 2
	...
Dadurch wird in PHP ein Array mit dem Namen $x existieren. Die Werte können dann so ausgelesen werden:
	for ($i=0;$i<sizeof($x);$i++) {
		echo "$x[$i] ";
	}


28) Sessions

Seit PHP 4 gibt es in PHP das Konzept einer Session. Was kann man sich darunter vorstellen? Bisher sind Werte einer Variablen lediglich in der PHP-Datei gültig, in der sie definiert werden. Wollen wir den Wert einer Variablen in einer weiteren Datei verwenden, so mußten wir bisher relativ aufwendig mit Cookies oder versteckten Variablen arbeiten.
Ein Beispiel dafür war die Übungsaufgabe, bei der jeweils 20 Datensätze der Tabelle kneipen ausgegeben werden sollten, und es jeweils einen Vor- und Zurück-Button gab.

Dieses Weiterreichen einer oder mehrerer Variablen ist in PHP 4 sehr benutzerfreundlich realisiert. Normalerweise wird PHP versuchen, Werte einer Variablen per Cookie weiterzugeben. Wir können aber die Weitergabe so organisieren, daß der Wert der Variablen über den URL weitergegeben wird, falls der Betrachter Cookies verbietet.

Das Konzept von PHP 4 ist, eine sogenannte Session (Sitzung) zu definieren. Diese Sitzung kann einen eigenen Namen haben, kann aber auch einen Namen selbst vergeben. Dies funktioniert mit

	session_start();
oder mit
	session_start("testsitzung");

Nun wollen wir die Variable $zaehler über die momentane Datei hinaus verfügbar machen. Dazu muß die Variable in der Session registriert werden:

	session_register("zaehler");
Wir beachten, daß zaehler hier ohne Dollar-Zeichen verwendet wird. Setzen wir die Variable $zaehler auf einen bestimmten Wert
	$zaehler = 5;
so können wir diesen Wert in einer anderen Datei abfragen und überschreiben. Dazu melden wir uns in der neuen Datei bei der Session an:
	session_start();
	echo "$zaehler<br>\n";
	$zaehler++;
und haben automatisch die Variable $zaehler zur Verfügung, die wir ausgeben und verändern können. Wollen wir die Session beenden, so gibt es den Befehl
	session_destroy();
Ein Befehl ist oft recht nützlich:
	if (!session_is_registered("zaehler")) {
		session_register("zaehler");
	}
session_is_registered() überprüft, ob die Variable schon registriert ist. Es können im übrigen sowohl einzelne Variable, als auch Felder als Session-Variable übergeben werden.

Eine Variable kann mit session_unregister() wieder aus der Session herausgenommen werden. Zum Beispiel

		session_unregister("zaehler");

Wie bereits erwähnt, werden die Daten per Cookie weitergegeben. Hat der Betrachter das Setzen von Cookies verboten, so gibt es immer noch die Möglichkeit, die Daten über den URL weiterzugeben. Dazu muß man bei Verweisen die sogenannte Session-ID weitergeben. Die Vorgehensweise läßt sich leicht durch ein Beispiel veranschaulichen. Wollen wir die Datei x.php aufrufen, in der die Session weiterlaufen soll, so geben wir folgenden Verweis an:

	<a href="x.php?<?=SID?>">weiter</a>
Damit wird PHP wenn möglich Cookies verwenden, andernfalls den URL. Es gibt noch einige weitere Funktionen, um das Verhalten der Session zu beeinflussen. Dies kann alles im Handbuch nachgelesen werden. Hier nochmal ein komplettes Beispiel, das die Variable $zaehler von der Datei x.php an die Datei y.php - und umgekehrt - weitergibt:
<!-- Datei x.php  -->
<?
	session_start();
	if (!session_is_registered("zaehler"))
		session_register("zaehler");
	$zaehler++;
?>
<html>
<body>
Der Wert von </tt>zaehler<tt> ist jetzt <? echo $zaehler ?>.
<p>
<a href="y.php?<?=SID?>">weiter</a><p>
</body>
</html>
und
<!-- Datei y.php  -->
<?
	session_start();
	if (!session_is_registered("zaehler"))
		session_register("zaehler");
	$zaehler++;
?>
<html>
<body>
Der Wert von </tt>zaehler<tt> ist jetzt <? echo $zaehler ?>.
<p>
<a href="x.php?<?=SID?>">zurück</a><p>
</body>
</html>


<- Vorlesung 7 Übungen Vorlesung 9 ->

Alfred.Wassermann@uni-bayreuth.de