Как и в случае с переполнением стека, возникает вопрос о том, как перенаправить пользователя при вводе или после изменения значений, а в PHP стандартным ответом является изменение заголовков для достижения этой цели.
Однако в PHP заголовки должны быть изменены в начале, прежде чем любой HTML или текст будет опубликован.
Поэтому я регулярно выкладываю свое личное решение, которое выглядит следующим образом:
«Завершите тег PHP, если вы хотите выполнить перенаправление, и напишите следующее:
<script>
location.replace("Whatever.php");
</script>
А затем, наконец, возьмите свой тег PHP еще раз, чтобы завершить ваш код. «
Каждый раз, когда я писал это, ответ был почти сразу забыт. Однако, насколько мне известно, это работает, в целом.
Итак, мой вопрос: почему это так сильно отвергается? Что это за использование этого решения, которое так неодобрительно?
Пример полного использования (исключая escape-функции):
if(isset($_GET['role'])){ //If value set in GET
$role = $_GET['role']
if($role == "Admin"){ ?> // Drop PHP tag
<script>location.replace("AdminPage.php");</script> //Solution
<?php else{ ?>
<script>location.replace("StandardPage.php");</script> //Solution
<?php } } ?> //Pick up Tag final time and Close isset.
Просто потому, что это работает, не означает, что вы не должны предпочитать более подходящий способ сделать это. Так почему же вы предпочитаете перенаправлять заголовок?
exit;
сразу после заголовка Location это помешает). Это означает меньше накладных расходов и более быстрое время реакции для конечного пользователя.Во-первых, клиент может просто отключить Javascript. Итак, ваш код сразу же нарушается.
Не давайте клиенту никаких шансов изменить или нарушить ваш рабочий процесс.
Во-вторых, плохая практика, потому что неуправляемый. Держите его в отдельном стиле, скрипты и PHP-коды.