Chuyển hướng tức thì trong PHP
Chuyển hướng được thực hiện bằng hàm
header không xảy ra ngay tại thời điểm
gọi hàm đó. Bởi vì bản thân PHP
không thực hiện chuyển hướng, mà chỉ gửi
tiêu đề HTTP tương ứng tới trình duyệt.
Điều này có nghĩa là chuyển hướng sẽ chỉ xảy ra khi PHP thực thi toàn bộ script cho đến cuối. Do đó có thể xảy ra các hiệu ứng phụ không mong muốn.
Ví dụ, trong đoạn code sau, chúng ta muốn thực hiện hoặc là chuyển hướng, hoặc là truy vấn cơ sở dữ liệu. Nhưng truy vấn cơ sở dữ liệu vẫn sẽ được thực hiện ngay cả khi có lệnh chuyển hướng:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // sẽ thực thi ngay cả khi chuyển hướng!
?>
Để tránh các vấn đề tương tự, cần
ngay lập tức sau khi chuyển hướng gọi hàm
die, hàm này sẽ lập tức kết thúc
việc thực thi script và chuyển hướng sẽ xảy ra
ngay lập tức:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Hãy tái tạo một hiệu ứng phụ nào đó
trong code của bạn. Sau đó sửa chữa
nó bằng hàm die.