Okamžité přesměrování v PHP

Přesměrování provedené pomocí funkce header neproběhne v okamžiku volání této funkce. PHP samo neprovádí přesměrování, pouze odesílá příslušnou HTTP hlavičku do prohlížeče.

To znamená, že k přesměrování dojde pouze tehdy, když PHP dokončí celý skript až do konce. Kvůli tomu mohou vznikat různé parazitní efekty.

Jako příklad, v následujícím kódu chceme provést buď přesměrování, nebo dotaz do databáze. Ale dotaz do databáze se provede, i když byl vydán příkaz k přesměrování:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // provede se i při přesměrování!
?>

Pro zabránění podobným problémům je potřeba ihned po přesměrování zavolat funkci die, která okamžitě ukončí provedení skriptu a přesměrování proběhne okamžitě:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
    die();
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query);
?>
Задание 1

Reprodukujte nějaký parazitní efekt ve vašem kódu. Poté jej opravte pomocí funkce die.