Øjeblikkelig omdirigering i PHP
En omdirigering udført med funktionen
header sker ikke i det øjeblik
denne funktion kaldes. PHP udfører nemlig
ikke selv omdirigeringen, men sender kun
den tilsvarende HTTP-header til browseren.
Det betyder, at omdirigeringen først vil finde sted når PHP har kørt hele scriptet færdigt. På grund af dette kan der opstå forskellige uønskede effekter.
Som et eksempel: i følgende kode ønsker vi at udføre enten en omdirigering eller en databaseforespørgsel. Men databaseforespørgslen vil blive udført, selvom der var en kommando til omdirigering:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // vil udføres selv ved omdirigering!
?>
For at undgå sådanne problemer skal man
umiddelbart efter omdirigeringen kalde funktionen
die, som øjeblikkeligt afslutter
scriptets udførelse, og omdirigeringen vil ske
med det samme:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Genskab en uønsket effekt i din kode. Ret den derefter
med hjælp fra funktionen die.