Variablen aus externen Quellen
HTML-Formulare (GET and POST)
Sobald ein Formular an ein PHP-Skript übergeben wird, werden die
Informationen dieses Formulars dem Skript automatisch zur Verfügung
gestellt. Es gibt ein paar Möglichkeiten, auf diese Informationen
zuzugreifen, zum Beispiel:
Beispiel #1 Ein einfaches HTML-Formular
<form action="foo.php" method="post">
Name: <input type="text" name="username" /><br />
E-Mail: <input type="text" name="email" /><br />
<input type="submit" name="submit" value="Und ab!" />
</form>
Von PHP 5.4.0 an gibt es nur zwei Möglichkeiten, um auf die Daten der HTML-Formulare
zuzugreifen. Die zurzeit verfügbaren Methoden werden unten aufgeführt:
Beispiel #2 Zugriff auf die Daten eines einfachen POST-HTML-Formular
<?php
echo $_POST['username'];
echo $_REQUEST['username'];
?>
Es gab einige weitere Möglichkeiten, um auf Nutzereingaben in alten PHP-Versionen
zuzugreifen. Diese werden unten aufgeführt. Weitere Details sind dem Changelog
am Ende der Seite zu entnehmen.
Beispiel #3 Alte Methoden zum Zugriff auf Nutzereingaben
<?php
// OBACHT: diese Methoden WERDEN NICHT mehr unterstützt.
// Gültige Methoden werden weiter oben beschrieben.
// Verwendung von import_request_variables() - diese Funktion wurde in PHP 5.4.0 entfernt
import_request_variables('p', 'p_');
echo $p_username;
// Diese langen vordefinierten Variablen wurden in PHP 5.4.0 entfernt
echo $HTTP_POST_VARS['username'];
// Verwendung von register_globals. Dieses Feature wurde in PHP 5.4.0 entfernt
echo $username;
?>
Die Verwendung eines GET Formulars ist, davon abgesehen, dass Sie
stattdessen die entsprechende vordefinierte GET-Variable erhalten,
ähnlich. Außerdem wird GET auch für den QUERY_STRING
(die
Information nach dem '?' in einer URL) verwendet. So enthält zum
Beispiel http://www.example.com/test.php?id=3
GET-Daten, auf die mit $_GET['id'] zugegriffen
werden kann. Siehe auch $_REQUEST.
Hinweis:
Punkte und Leerzeichen in Variablennamen werden in Unterstriche umgewandelt.
Zum Beispiel wird <input name="a.b" />
zu
$_REQUEST["a_b"]
.
Im Zusammenhang mit Formular-Variablen versteht PHP auch
Arrays (siehe auch die verwandte Faq).
Sie können z.B. die betreffenden Variablen gruppieren oder dieses
Leistungsmerkmal nutzen, um Werte aus Mehrfach-Auswahl-Eingabeelementen
zu erhalten. Schicken wir zum Beispiel ein Formular an sich selbst,
und lassen nach dem Versand die Daten anzeigen:
Beispiel #4 Komplexere Formular-Variablen
<?php
if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
echo '</pre>';
}
?>
<form action="" method="post">
Name: <input type="text" name="personal[name]" /><br />
E-Mail: <input type="text" name="personal[email]" /><br />
Bier: <br />
<select multiple name="bier[]">
<option value="warthog">Öttinger</option>
<option value="guinness">Bitburger</option>
<option value="stuttgarter">Stuttgarter Schwabenbräu</option>
</select><br />
<input type="submit" name="submit" value="Und ab!" />
</form>
Hinweis:
Beginnt der Name einer externen Variablen mit einer gültigen Array-Syntax,
dann werden darauf folgende Zeichen stillschweigend ignoriert. Zum
Beispiel wird <input name="foo[bar]baz">
zu
$_REQUEST['foo']['bar']
.
HTTP-Cookies
PHP unterstützt HTTP-Cookies, wie in
» RFC 6265 definiert.
Cookies ermöglichen die Daten-Speicherung innerhalb der
jeweiligen Browser-Umgebung zum Tracken oder zur
Identifikation von Benutzern. Sie können Cookies erzeugen, indem
Sie die Funktion setcookie() benutzen. Cookies
sind Teil des HTTP-Headers, deshalb muss die setcookie-Funktion
aufgerufen werden, bevor irgendeine Ausgabe an den Browser
gesendet wird. Dabei handelt es sich um die gleiche
Einschränkung, die auch für die
header()-Funktion gilt. Cookie-Daten stehen
dann in den entsprechenden Cookie-Daten-Arrays, wie zum
Beispiel $_COOKIE, als auch in
$_REQUEST zur Verfügung. Für weitere Details
und Beispiele lesen Sie bitte die
setcookie()-Seite des Handbuchs.
Wenn Sie einer einzelnen Cookie-Variable mehrere Werte zuweisen
wollen, müssen Sie diese als Array zuweisen. Zum Beispiel:
Das erzeugt zwei einzelne Cookies obwohl MyCookie in Ihrem
Skript nun ein einziges Array ist. Wenn Sie nur ein Cookie mit
mehreren Werten setzen wollen, sollten Sie erwägen
serialize() oder explode()
auf das Array anzuwenden.
Bedenken Sie, dass ein Cookie ein vorhergehendes Cookie
gleichen Namens überschreibt, es sei denn, der Pfad oder
die Domain ist anders. Für eine Warenkorb-Anwendung können
Sie deshalb z.B. einen Zähler bilden und diesen weiterleiten:
Beispiel #5 Ein setcookie()-Beispiel
<?php
if (isset($_COOKIE['zaehler'])) {
$count = $_COOKIE['zaehler'] + 1;
} else {
$count = 1;
}
setcookie('zaehler', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
?>
Punkte in eingehenden Variablen-Bezeichnern
Normalerweise verändert PHP die Variablen-Bezeichner nicht,
wenn sie einem Skript übergeben werden. Es sollte aber beachtet
werden, dass der Punkt (".") kein gültiger Bestandteil eines
Variablen-Bezeichners ist. Deshalb achten Sie auf folgendes:
<?php
$varname.ext; /* ungültiger Variablen-Bezeichner */
?>
Der PHP-Parser sieht eine Variable namens
$varname,
gefolgt von einem Zeichenketten-Verbindungs-Operator, dieser wiederum
gefolgt von der offenen Zeichenkette 'ext' (also nicht eingegrenzt
durch '"' und auch keinem Schlüsselwort oder reserviertem Bezeichner
entsprechend). Das kann natürlich nicht zum gewünschten Ergebnis
führen.
Deshalb ist es wichtig zu wissen, dass PHP in den ihm übergebenen
Variablen alle Punkte (.) automatisch durch einen
Unterstrich (_) ersetzt.
Bestimmung des Variablen-Typs
Da PHP den Typ der Variablen bestimmt und (im Allgemeinen) selbst
eine entsprechende Umformung vornimmt, ist es nicht immer klar,
welchen Typ eine Variable gerade hat. PHP beinhaltet einige
Funktionen, die dies herausfinden, wie zum Beispiel:
gettype(), is_array(),
is_float(), is_int(),
is_object() und
is_string(). Lesen Sie bitte auch das Kapitel
über Typen.
Da HTTP ein Text-Protokoll ist, werden die meisten, wenn nicht alle, Inhalte von
superglobalen Arrays,
wie $_POST und $_GET, als Zeichenketten
erhalten bleiben. PHP wird nicht versuchen die Werte in spezifische Typen umzuwandeln.
Im Beispiel weiter unten wird $_GET["var1"] die Zeichenkette
"null" und $_GET["var2"] die Zeichenkette "123" enthalten.
/index.php?var1=null&var2=123