Välitön uudelleenohjaus PHP:ssä
Uudelleenohjaus, joka suoritetaan
header-funktiolla, ei tapahdu
heti funktion kutsun yhteydessä. Loppujen lopuksi PHP
ei itse suorita uudelleenohjausta, vaan ainoastaan lähettää
vastaavan HTTP-otsikon selaimelle.
Tämä tarkoittaa, että uudelleenohjaus tapahtuu vasta kun PHP on suorittanut koko skriptin loppuun. Tämän vuoksi voi ilmetä erilaisia haitallisia vaikutuksia.
Esimerkkinä seuraavassa koodissa haluamme suorittaa joko uudelleenohjauksen tai tietokantakyselyn. Mutta tietokantakysely suoritetaan, vaikka uudelleenohjauskomento olisi annettu:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // suoritetaan vaikka uudelleenohjaus!
?>
Välttääksesi tällaiset ongelmat tulee
heti uudelleenohjauksen jälkeen kutsua
die-funktiota, joka keskeyttää välittömästi
skriptin suorituksen ja uudelleenohjaus tapahtuu
samantien:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Toteuta jokin haitallinen vaikutus
koodissasi. Korjaa sitten
se die-funktion avulla.