Tūlītējais pāradresējums PHP

Pāradresējums, kas izpildīts, izmantojot funkciju header, nenotiek šīs funkcijas izsaukšanas brīdī. Galu galā PHP pats neveic pāradresējumu, bet tikai nosūta atbilstošu HTTP galveni pārlūkprogrammai.

Tas nozīmē, ka pāradresējums notiks tikai tad, kad PHP izpildīs visu skriptu līdz beigām. Šī iemesla dēļ var rasties dažādi parazitāri efekti.

Piemēram, sekojošajā kodā mēs vēlamies veikt vai nu pāradresējumu, vai vaicājumu uz datu bāzi. Bet vaicājums uz datu bāzi tiks izpildīts pat tad, ja bija komanda pāradresēt:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // izpildīsies pat pāradresējuma gadījumā!
?>

Lai izvairītos no šādām problēmām, ir nepieciešams uzreiz pēc pāradresējuma izsaukt funkciju die, kas tūlītēji pārtrauks skripta izpildi un pāradresējums notiks nekavējoties:

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

Reproducējiet kādu parazitāru efektu savā kodā. Pēc tam izlabojiet to, izmantojot funkciju die.