2010-05-18 2 views
2

Быстрый вопрос, связанный с разработкой PHP, я, кажется, все больше и больше интересуюсь этим, когда разрабатываю более сложные сайты. В основном говорят, что у нас есть базовый почтовый ящик PHP/XHTML (система обмена сообщениями). Я выполняю проверки наверху (проверьте, зарегистрирован ли пользователь, проверьте, имеют ли пользователь правильные разрешения и т. Д.). Затем используйте функцию 'header (' location: www.abc.com) ', если аутентификация завершается с ошибкой. Вопрос в том, что я пишу остальную часть кода входящей почты в огромном блоке «else» или просто использую стандартный html. Я где-то читал о том, что плохо использовать код после использования функции «header».PHP/XHTML. Должен ли я разместить все в тегах эха?

ответ

4

Просто следуйте ваш заголовок с

exit(); 

Чем это не будет проблемой.

see third example here

Также вам не нужно большое эхо, как это, вы можете повторить HTML, как этот Aswell, если вы хотите:

<?php 
    //php stuff 
    if(test){ 
?> 

    html here 

<?php 
    } 
    else{ 
?> 

    other html 

<?php 
    } 
?> 
+0

Ах, это аккуратный трюк. Спасибо – greenimpala

+0

Еще лучше, если код HTML длинный, используйте include() и поместите html-код в два разных файла. – Palantir

+0

Я нахожу, что если youre swtiching in и out из php и htm в блоках управления лучше использовать альтернативный синтаксис, например: ' Html Html ' – prodigitalson

1

Причины вы читаете это плохо, что клиенты дон 't имеют, чтобы почтить заголовок Location: abc - поэтому, если вы продолжаете отправлять их данные, они могут просто показать его, возможно, чтобы отслеживать данные ваших пользователей.

Что вы можете сделать, это после того, как вы отправите заголовок Location: abc, вы просто выйти из сценария, как это:

if(!$user->is_authenticated()) { 
    header("Location: abc"); 
    exit(); 
} 
+0

ах! функция exit(), спасибо всем, это блестяще. – greenimpala

1

После перенаправления заголовка, вы помещаете жир «возвращение» или «выхода», поэтому ваш скрипт завершается там, тогда вы закрываете if. Тогда вы можете с радостью скопировать код, как обычно.

Неверно, что после вызова header() вы ничего не должны ставить. Однако вы должны помнить, что если вы выведете что-либо перед вызовом заголовка, сценарий завершится неудачно. Существуют заголовки, для которых требуется ввести код, например заголовок Content-type. После заголовка перенаправления, однако, вы всегда должны вызывать вызов exit(), если браузер не подчиняется инструкции.

1

Я где-то читал о том, что плохо использовать любой код после использования функции 'header'.

Это не совсем так, потому что не разрешено отправлять выходные данные (HTML или raw output) в браузер, прежде чем отправлять заголовок. Когда вы отправляете выходные данные перед отправкой заголовка, вы получите сообщение «Header уже отправлено».

После функции заголовка остальные не выполняются, поэтому возврат или выезд не требуется.

Задать вопрос, если вам нужно поместить все в структуру if/else: это также не требуется, вам нужно всего лишь проверить, если кто-то зарегистрировался, а если нет, вы выполните перенаправлять с помощью функции заголовка. Нет необходимости в обширной структуре if/else.

Смежные вопросы