Upaguzi wa Mara moja katika PHP
Upaguzi, uliotekelezwa kwa kutumia kitendo
header haufanyiki wakati
wa wito wa kitendo hicho. Kwani PHP yenyewe
haitekelezi upaguzi, bali hupeleka tu
kichwa (header) cha HTTP kinachofaa kwenye kivinjari.
Hii inamaanisha kuwa upaguzi utafanyika tu wakati PHP itakapomaliza kutekeleza skripti yote hadi mwisho. Kwa sababu hii, athari mbali mbali zisizotakiwa zinaweza kutokea.
Kwa mfano, katika msimbo unaofuata tunataka kutekeleza ama upaguzi, ama ombi kwa hifadhidata. Lakini ombi kwa hifadhidata litatekelezwa hata kama kulikuwa na amri ya upaguzi:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // litatekelezwa hata kwa upaguzi!
?>
Ili kuepuka matatizo kama haya, hitaji
baada ya upaguzi tu, kuita kitendo
die, ambacho kitamaliza
utekelezaji wa skripti mara moja na upaguzi utafanyika
papo hapo:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Tengeneza athari yoyote isiyotakiwa
katika msimbo wako. Kisha uitengenezee kwa
kutumia kitendo die.