Trenutni preusmeravanja u PHP

Preusmeravanje izvršeno pomoću funkcije header ne dešava se u trenutku pozivanja te funkcije. Na kraju krajeva, PHP sam ne vrši preusmeravanje, već samo šalje odgovarajući HTTP zaglavlje u pregledač.

To znači da će se preusmeravanje desiti samo kada PHP izvrši celu skriptu do kraja. Zbog toga mogu nastati razni neželjeni efekti.

Na primer, u sledećem kodu želimo da izvršimo ili preusmeravanje, ili upit ka bazi. Ali upit ka bazi će se izvršiti čak i ako je bila komanda za preusmeravanje:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // izvršiće se čak i pri preusmeravanju!
?>

Da bi se izbegli slični problemi potrebno je neposredno nakon preusmeravanja pozvati funkciju die, koja će trenutno prekinuti izvršavanje skripte i preusmeravanje će se desiti odmah:

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 neki neželjeni efekt u vašem kodu. Zatim ga ispravite pomoću funkcije die.