Takojšnje preusmeritve v PHP

Preusmeritev, izvedena s funkcijo header, se ne zgodi v trenutku klica te funkcije. Konec koncev PHP sam ne izvede preusmeritve, ampak le pošlje ustrezno HTTP glavnico v brskalnik.

To pomeni, da se bo preusmeritev zgodila šele ko bo PHP izvedel celotno skripto do konca. Zaradi tega lahko pride do različnih neželenih učinkov.

Na primer, v naslednji kodi želimo izvesti bodisi preusmeritev bodisi poizvedbo v bazo. Toda poizvedba v bazo bo izvedena tudi če je bil ukaz za preusmeritev:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // bo izvedena tudi ob preusmeritvi!
?>

Da se izognemo takšnim težavam, je potrebno takoj po preusmeritvi poklicati funkcijo die, ki takoj konča izvajanje skripte in preusmeritev se bo zgodila takoj:

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

Ponazorite kakšen neželeni učinek v vaši kodi. Nato ga popravite z uporabo funkcije die.