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($_POSTtrue));
    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'].

IMAGE SUBMIT Variablen-Bezeichner

Zur Übertragung eines Formulars kann auch ein Bild statt eines Übertragungs-Schalters (Submit-Button) benutzt werden, dessen Tag wie folgt aussieht:

<input type="image" src="image.gif" name="sub" />

Klickt der Benutzer irgendwo auf das Bild, wird das entsprechende Formular an den Web-Server übertragen. Hierbei sind zwei zusätzliche Variablen vorhanden, sub_x und sub_y. Diese enthalten die Koordinaten des Klick-Punktes innerhalb des Bildes. Die Erfahreneren werden bemerken, dass die Variablen, die vom Browser gesendet werden, einen Punkt enthalten statt eines Unterstrichs. Dieser Punkt wird von PHP automatisch in einen Unterstrich verwandelt.

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:

<?php
  setcookie
("MeinCookie[foo]""Ich teste 1"time()+3600);
  
setcookie("MeinCookie[bar]""Ich teste 2"time()+3600);
?>

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'$counttime()+3600);
setcookie("Cart[$count]"$itemtime()+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

Changelog

Version Beschreibung
5.4.0 Globals registrieren, Magic Quotes and register_long_arrays wurde entfernt
5.3.0 Globals registrieren, Magic Quotes and register_long_arrays wurde missbilligt
4.2.0 register_globals Direktive ist standardmässig off.
4.1.0 Superglobale Arrays, wie $_POST oder $_GET wurden verfügbar gemacht