Hauptmenü

Untermenü

PHP/MySQL - register_globals - "Superglobale" Arrays

1. Die Abschnitte

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