Инстант редирект во PHP
Редиректот, извршен со функцијата
header не се случува во моментот
на повикување на таа функција. Бидејќи PHP самиот
не извршува редирект, туку само испраќа
соодветен HTTP заглавие до прелистувачот.
Ова значи дека редиректот ќе се случи само кога PHP ќе го изврши целиот скрипт до крај. Поради ова може да се појават разни паразитни ефекти.
На пример, во следниот код ние сакаме да извршиме или редирект, или барање до базата. Но барањето до базата ќе се изврши дури и ако имаше наредба за редирект:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // ќе се изврши дури и при редиректот!
?>
За да се избегнат вакви проблеми потребно е
веднаш по редиректот да се повика функцијата
die, која инстантно ќе го заврши
извршувањето на скриптот и редиректот ќе се случи
веднаш:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Репродуцирајте некој паразитен
ефект во вашиот код. Потоа поправете го
со помош на функцијата die.