Okamžité presmerovanie v PHP

Presmerovanie vykonané pomocou funkcie header neprebehne v okamihu volania tejto funkcie. Lebo PHP samo nevykonáva presmerovanie, ale iba odosiela príslušnú HTTP hlavičku do prehliadača.

To znamená, že presmerovanie prebehne až vtedy, keď PHP vykoná celý skript až do konca. Kvôli tomu môžu nastať rôzne parazitné efekty.

Napríklad, v nasledujúcom kóde chceme vykonať buď presmerovanie, alebo dopyt do databázy. Ale dopyt do databázy sa vykoná aj keď bola zadaná príkaz na presmerovanie:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // vykoná sa aj pri presmerovaní!
?>

Na vyhnutie sa podobným problémom je potrebné hneď po presmerovaní zavolať funkciu die, ktorá okamžite ukončí vykonávanie skriptu a presmerovanie prebehne okamžite:

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 nejaký parazitný efekt vo vašom kóde. Potom ho opravte pomocou funkcie die.