Onmiddellijke redirect in PHP
Een redirect, uitgevoerd met de functie
header, vindt niet plaats op het moment
van aanroepen van deze functie. PHP voert
zelf namelijk geen redirect uit, maar stuurt alleen
het bijbehorende HTTP-header naar de browser.
Dit betekent dat de redirect alleen zal plaatsvinden wanneer PHP het hele script helemaal heeft uitgevoerd. Hierdoor kunnen allerlei ongewenste effecten optreden.
Als voorbeeld: in de volgende code willen we ofwel een redirect uitvoeren, ofwel een query naar de database. Maar de databasequery wordt uitgevoerd, zelfs als er een opdracht was voor een redirect:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // wordt uitgevoerd zelfs bij redirect!
?>
Om dergelijke problemen te voorkomen, moet je
direct na de redirect de functie
die aanroepen, die onmiddellijk de
uitvoering van het script beëindigt en de redirect zal direct
plaatsvinden:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reproduceer een ongewenst effect
in je code. Corrigeer het vervolgens
met behulp van de functie die.