PHP/MySQL - register_globals - "Superglobale" Arrays
1. Die Abschnitte
- Überblick
- Die alte Variante
- "Superglobale" Arrays
- Lösungen
2. Der neue Weg
Da sich die Entwickler von PHP recht schnell über die Unzulänglichkeiten des alten Zugriffsmodells im Klaren waren, führten sie mit
PHP 4.0.1 (glaub ich zumindest) die so genannten "superglobalen" Arrays ein. Mit denen kann man dann auf die entsprechenden Inhalte
zugreifen, wenn register_globals
auf Off
steht. Gut, es funktioniert auch bei einem On
, aber
gnade Gott denjenigen, die noch mit dieser Steinzeitkonfiguration arbeiten.
3. Die alte Schreibweise
... sah so aus. Das Array begann mit dem obligatorischen $
-Zeichen, gefolgt von einem HTTP_
, danach kam
die Art der Übertragung also GET
, POST
oder SESSION
, gefolgt von einem _VARS
und
beendet wurde das Ganze mit dem Namen des jeweiligen Wertes, geschrieben in der Form eines assoziativen Arrays, also zum Beispiel
['blubb']
. In Reinform sah das dann so aus:
<?php
// siehe vorherige Beispiele
echo $HTTP_GET_VARS['id'];
echo $HTTP_POST_VARS['id'];
echo $HTTP_SESSION_VARS['id'];
?>
Das funktionierte aus Gründen der Abwärtskompatibilität auch sehr lange und wurde meines Wissens nach erst mit der PHP-Version 4.3 abgeschafft. Wenn ihr aber noch alte Scripte mit dieser Schreibweise habt, so solltet ihr sie entsprechend anpassen. Und natürlich nicht mehr damit arbeiten (mit der Schreibweise, nicht den Scripten).
4. Die neue Schreibweise
... wurde mit der Version 4.1 eingeführt. Wahrscheinlich, weil Programmierer schreibfaul sind, denn diese Variante ist deutlich kürzer.
Man beginnt mit einem $_
, worauf dann die Übertragungsart folgt (GET
, POST
, SESSION
)
und wie schon oben beschrieben, der entsprechende Name des gewünschten Wertes.
<?php
// siehe vorherige Beispiele
echo $_GET['id'];
echo $_POST['id'];
echo $_SESSION['id'];
?>
Und mit dieser Schreibweise solltet ihr ab sofort auch konsequent arbeiten, da sie die einzige ist, die auf allen aktuellen Systemen
reibungslos läuft. Kleiner Tipp am Rande. Wenn es dennoch hakt, so wirkt ein print_r
wahre Wunder. Siehe auch den
entsprechenden Abschnitt des Tutorials Fehlersuche zum Thema Testausgaben.
5. Zuweisungen
Das ist überhaupt kein Thema. Auch wenn man GET
- oder POST
-Werte auf diese Weise nicht zuweisen sollte.
<?php
// alte Vorgehensweise
$HTTP_GET_VARS['bls'] = 'blubb';
$HTTP_POST_VARS['bla'] = 'blubb';
$HTTP_SESSION_VARS['bls'] = 'blubb';
// neue Vorgehensweise
$_GET['bls'] = 'blubb';
$_POST['bla'] = 'blubb';
$_SESSION['bls'] = 'blubb';
?>
Noch ein Hinweis. Anstelle des veralteten session_register
arbeitet man heute nur noch(!) mit $_SESSION
.
Die Details dazu findet ihr in diesem Tutorial.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt