PHPда даруҳал редирект
header функциси ёрдамида бажарилган редирект
ушбу функция чақирилган пайтда sodir бўлмайди.
Чунки PHP ўзи редиректни бажармай, фақат
браузерга мос HTTP сарлавҳасини жўнатади.
Бу шунни англатадки, редирект фақат PHP скриптни oxиригача бажарганидан сўнг sodir бўлади. Шу сабабдан турли xил паразит таъсирлар юз белиши мумкин.
Мисол учун, куйидаги кодда биз редиректни ёки базага сўровни бажаришни истаймиз. Аммо редирект учун буйруқ бўлганида ҳам базага сўров бажарилади:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // редиректда ҳам бажарилади!
?>
Бундай муаммолардан қочиш учун редиректдан сўнг
дарҳол die функциясини чақириш керак,
бу эса скриптнинг ишлашини даруҳал тўхтатади ва редирект дарҳол sodir бўлади:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Сизнинг кодингизда қандайдир бир паразит
таъсирни такрорланг. Сўнгра уни die
функцияси ёрдамида тўғриланг.