Natychmiastowe przekierowania w PHP

Przekierowanie wykonane za pomocą funkcji header nie następuje w momencie wywołania tej funkcji. W końcu PHP sam nie wykonuje przekierowania, a tylko wysyła odpowiedni nagłówek HTTP do przeglądarki.

Oznacza to, że przekierowanie nastąpi tylko wtedy, gdy PHP wykona cały skrypt do końca. Z tego powodu mogą występować różne niepożądane efekty.

Dla przykładu, w następnym kodzie chcemy wykonać albo przekierowanie, albo zapytanie do bazy. Ale zapytanie do bazy wykona się nawet jeśli była komenda na przekierowanie:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // wykona się nawet przy przekierowaniu!
?>

Aby uniknąć podobnych problemów należy natychmiast po przekierowaniu wywołać funkcję die, która natychmiast zakończy wykonywanie skryptu i przekierowanie nastąpi od razu:

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

Odtwórz jakiś niepożądany efekt w swoim kodzie. Następnie popraw go za pomocą funkcji die.