Sofortige Redirects in PHP
Ein Redirect, der mit der Funktion
header durchgeführt wird, erfolgt nicht im Moment
des Aufrufs dieser Funktion. Denn PHP selbst
führt den Redirect nicht aus, sondern sendet nur
den entsprechenden HTTP-Header an den Browser.
Das bedeutet, dass der Redirect erst dann stattfindet, wenn PHP das gesamte Skript bis zum Ende ausgeführt hat. Dadurch können verschiedene unerwünschte Effekte auftreten.
Beispielsweise möchten wir im folgenden Code entweder einen Redirect durchführen oder eine Datenbankabfrage. Aber die Datenbankabfrage wird auch dann ausgeführt, wenn der Redirect-Befehl gegeben wurde:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // wird auch beim Redirect ausgeführt!
?>
Um solche Probleme zu vermeiden, muss
unmittelbar nach dem Redirect die Funktion
die aufgerufen werden, die die Ausführung
des Skripts sofort beendet und der Redirect erfolgt
sofort:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reproduzieren Sie einen unerwünschten
Effekt in Ihrem Code. Korrigieren Sie ihn
anschließend mit der Funktion die.