Author: Progman, zuletzt bearbeitet von progman @ 2005/03/05 18:25:14
Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.
Variablenübergabe mittels GET
1. Was ist GET?
Manchmal möchte man einem Script Werte übergeben. Dies kann man über Cookies, Formulare oder über die URL machen. Wie man Werte über eine URL übergibt hat man bestimmt schonmal gesehen.
http://www.example.com/index.php?section=news http://www.example.com/datei.php?clan=345&action=show_stat ...
Die Technik, Variablen über die URL zu übergeben, nennt man GET-Methode.
2. Variablen über die URL
Um bestimmte Werte an ein Script zu senden, damit es damit arbeiten kann, kann man diese Werte in der URL mit angeben. Dabei müssen die Variablen vom Dateinamen eindeutig getrennt werden. Dies macht man mit einem ?.
http://www.example.com/index.php?variablen
Hinter dem ? kommen die Variablen die man einem Script über die URL senden möchte. Dabei ist jede Variable so aufgebaut: name=wert. Und dies hängt man dann hinten an das ? dran.
http://www.example.com/index.php?var=4
Wenn man mehrere Variablen an ein Script senden möchte, muss man die mit & trennen.
http://www.example.com/index.php?var=4&bla=bli&foo=bar
Als erstes ein ? um den Dateinamen und die 1. Variable zu trennen und alle weiteren Variablen werden dann mit & getrennt.
3. Auslesen der Werte
In PHP können wir dann diese Werte auslesen. Alle diese Werte sind im Array $_GET vorhanden (GET für die Übertragungsmethode GET). Dieses Array hat genausoviele Arrayelemente wie Variablen übergeben wurden. Und der Schlüssel eines Arrayelements ist der Name der Variable und der Wert des Arrayelements ist gleich dem Wert aus der URL. Nehmen wir an wir rufen ein Script wie folgt auf.
http://www.example.com/index.php?section=news&action=add
Wir haben dann im Script index.php folgende Variablen.
$_GET['section'] mit dem Wert "news" $_GET['action'] mit dem Wert "add"
Dieses Array $_GET ist immer vorhanden. Die Arrayelemente hingegen sind nur vorhanden, wenn entsprechend eine Variable name=wert übergeben wurde. Wenn man also keine Variable übergibt ist das Array vorhanden, doch es hat keine Arrayelemente. Kommt in der URL ein Variablennamen mehrfach vor, so wird der letzte Wert aus der URL genommen.
http://www.example.com/index.php?section=news§ion=clanwars
Bei diesem Aufruf hat das Arrayelement $_GET['section'] den Wert clanwars.
Zu Testzwecken kann man folgendes Script erstellen.
<?php
error_reporting(E_ALL);
echo "<pre>\n";
print_r($_GET); // einfache Ausgabe
var_dump($_GET); // ausführliche Ausgabe.
echo "</pre>\n";
?>
Durch ein bischen rumtesterei findet man folgende Gesetzmäßigkeiten.
-
Egal welcher Wert in der URL angegeben wurde, das Arrayelement ist immer vom Typ String.
-
Wenn man bei einer Variable in der URL die Zuweisung weglässt wird das Arrayelement mit dem entsprechenden Index erstellt, doch es beinhalten einen leeren String (String(0) "").
-
Man kann nicht ohne weiteres ein & als Wert angeben, weil PHP dies dann wieder als Trennzeichen für Variablen erkennt.
4. Beispiel zum Auslesen
Nehmen wir an wir haben folgendes Beispielscript.
<?php
error_reporting(E_ALL);
echo "Sie haben den Wert '".$_GET['xy']."' übergeben.\n";
?>
Wenn wir nun http://www.example.com/index.php?xy=hallo öffnen erhalten wir folgende Ausgabe.
Sie haben den Wert 'hallo' übergeben
Jetzt rufen wir mal das Script ohne die Variable in der URL auf. Also http://www.example.com/index.php. Jetzt sehen wir folgende Ausgabe.
Notice: Undefined index: xy in /..../index.php on line 4 Sie haben den Wert '' übergeben
Wir haben den Wert 'xy' nicht übergeben, also gibt es auch kein Arrayelement mit dem Index 'xy'. Aber wir haben versucht darauf zuzugreifen. Deshalb sagt PHP, dass es kein Arrayelement mit dem Index 'xy' gibt. Wir brauchen also eine Abfrage die prüft ob der Wert für 'xy' übergeben wurde. Dies machen wir mit der Funktion isset.
5. Die Funktion isset()
Die Funktion isset liefert true, wenn die übergeben Variable oder das übergebene Arrayelement definiert ist und false, wenn dies nicht so ist.
<?php
$var = "";
$x = isset($var);
var_dump($x); // gibt "bool(true)" aus
$y = isset($andere_var);
var_dump($y); // gibt "bool(false)" aus
$array = array("bla" => "wert");
$x = isset($array['bla']);
var_dump($x); // gibt "bool(true)" aus
$y = isset($array[10]);
var_dump($y); // gibt "bool(false)" aus
?>
In unserem Fall können wir diesen Rückgabewert von isset in eine Variable schreiben lassen und diese dann mit einer If-Abfrage untersuchen oder wir können den Befehl direkt in die If-Abfrage schreiben.
<?php
error_reporting(E_ALL);
if(isset($_GET['xy'])) { // guckt nach ob 'xy' übergeben wurde
echo "Die Variable 'xy' wurde übergeben<br />\n";
echo "Sie hat den Wert: ".$_GET['xy']."<br />\n";
} else {
echo "Die Variable 'xy' wurde nicht übergeben.\n";
}
?>
Wenn man hier nun die Variable 'xy' nicht übergibt dann wird der else Teil aufgerufen. Sonst wird der Wert ausgegeben. Man sollte immer daran denken, dass Variablen nicht immer übergeben werden. Vertraue niemals dem User der Seite. Man muss immer eine Fehlerabfrage einbauen. Lieber eine zuviel als eine zuwenig. Es gibt nix schlimmeres wenn man ein Projekt fertigstellt und der User sich dann beschwert dass dann in bestimmten Situationen bestimmte Fehler kommen.
Fragen zum aktuellen Thema
- Wo sind alle Variablen aus der URL?
-
Alle Variablen aus der URL stecke im Array $_GET drin. Bei jedem Arrayelement ist der Index der Name und der Wert der Wert aus der URL
- Wie prüft man nach ob eine Variable vorhanden ist oder nicht?
-
Mit der Funktion isset kann man gucken ob eine Variable definiert/vorhanden/gesetzt ist oder nicht.