Se eksempelvis på følgende formular:
<form action="nyside.php" method="post">
<input type="text" name="fornavn" value="" /><br />
<input type="text" name="efternavn" value="" /><br />
<input type="submit" name="send" value="Send" />
<input type="reset" value="Nulstil" />
</form>
Når formularen 'submittes' får du på siden 'nyside.php' automatisk adgang til følgende variabler:
$fornavn (indeholder det brugeren indtastede som fornavn)
$efternavn (indeholder det brugeren indtastede som efternavn)
På samme måde gælder det for følgende URL:
http://domaene.dk/nyside2.php?artikelID=125&side=3
Her får vi i 'nyside2.php' adgang til:
$artikelID (125)
$side (3)
Det er naturligvis dejlig nemt, men desværre ikke særlig heldigt set ud fra et sikkerhedsmæssigt synspunkt (Læs mere på http://dk.php.net/ (...)).
Derfor sætter man ofte register_globals = Off. Det betyder, at variablerne i overnstående eksempel ikke længere er tilgængelige per automatik. Har man baseret sin kode på register_globals = On virker den naturligvis ikke længere!
Variablerne ligger dog stadig gemt i følgende superglobale arrays:
$_POST - Her ligger variablerne sendt med post-metoden (fx $_POST['variabel'])
$_GET - Her ligger variablerne sendt med get-metoden (fx $_GET['variabel'])
$_REQUEST - Her ligger variablerne fra fra både $_POST, $_GET (og $_COOKIE - se senere)
Personligt bruger jeg $_POST og $_GET i stedet for $_REQUEST, så har jeg bedre styr på hvor variablerne kommer fra.
Det nemmeste er at gemme variablerne under nogle nemmere navne, i vores tilfælde ville vi indsætte følgende inden vi skal bruge dem:
$fornavn = $_POST['fornavn'];
$efternavn = $_POST['efternavn'];
$artikelID = $_GET['artikelID'];
$side = $_GET['side'];
Eller alternativet:
$fornavn = $_REQUEST['fornavn'];
$efternavn = $_REQUEST['efternavn'];
$artikelID = $_REQUEST['artikelID'];
$side = $_REQUEST['side'];
Herefter kan vi bruge variablerne præcis som vi gjorde med register_globals = On.
Det er naturligvis ikke nødvendigt at gemme dem først, vi kan også bruge dem direkte:
if (isset($_POST['fornavn']) && $_POST['fornavn'] == 'Peter')
{
echo 'Hej Peter, du er min ven :-)';
}
else
{
echo 'Du er ikke min ven :-(';
}
Hvis du skal konvertere din kode fra register_globals = On til register_globals = Off, er det nemmest at bruge den første metode. Så slipper du med at gemme dine variabler i starten af koden - i stedet for at foretage ændringer mange steder i din kode.
Som du forhåbentlig kan se, er det ikke så avanceret at konvertere til register_globals = Off og absolut noget du bør overveje uanset din konfigurationen!
Der findes i alt 9 superglobale arrays, her følger en liste:
$GLOBALS : Alle globale variabler, også andre superglobale variabler
$_COOKIE : Variabler modtaget fra cookies (HTTP cookies)
$_ENV : Variabler fra serverens miljø - se i phpinfo() hvilke der er tilgængelige på din server
$_FILES : Special array der kommer ved HTTP-POST-upload af filer
$_GET : Variabler fra adresselinien eller en formular hvor method="get" (HTTP GET)
$_POST : Variabler modtaget fra en formular hvor method="post" (HTTP POST)
$_REQUEST: Samling af $_GET, $_POST og $_COOKIE
$_SERVER : Variabler fra serveren - se i phpinfo() hvilke der er tilgængelige på din server
$_SESSION: Variabler fra brugerens session
Du kan læse mere om dem på http://dk.php.net/ (...)
Her på falderebet en lille funktion jeg har fundet og tilrettet. Den er til alle jer, der må lide under register_globals = On :-)
Smid den i starten af din kode (før du begynder at arbejde med variabler) så skal du bare se løjer ;-)
<?php
/* Funktion der 'sætter' register_globals = Off */
/* Void unregister_globals() */
function unregister_globals()
{
$COOKIE = $_COOKIE;
$ENV = $_ENV;
$FILES = $_FILES;
$GET = $_GET;
$POST = $_POST;
$REQUEST = $_REQUEST;
$SERVER = $_SERVER;
if (isset($_SESSION))
{
$SESSION = $_SESSION;
}
foreach ($GLOBALS as $key => $value)
{
if ($key != 'GLOBALS')
{
unset($GLOBALS[$key]);
}
}
$_COOKIE = $COOKIE;
$_ENV = $ENV;
$_FILES = $FILES;
$_GET = $GET;
$_POST = $POST;
$_REQUEST = $REQUEST;
$_SERVER = $SERVER;
if (isset($SESSION))
{
$_SESSION = $SESSION;
}
}
/* Husk at bruge funktionen */
unregister_globals();
?>
Derudover kan du smide følgende i din '.htaccess':
php_flag register_globals off
Det kan bruges på nogle servere, alt efter hvad du har tilladelse til.
Bemærk: ini_set() kan ikke benyttes!
Håber du blev en smule klogere, vi ses på Eksperten!


