Код PHP не будет выполняться, если в определенном месте не будет эхо.Почему это? - PullRequest
0 голосов
/ 14 декабря 2011
    $result=mysql_query($sql_info) or die("Error 1: ".mysql_error());
    $no= mysql_fetch_array($result);

    $groups_no = $no['number'];
    mysql_num_rows($result) or die("Error 2: ".mysql_error());    

//  echo "what's going on?"; if I uncomment this line then the echo below executes
    if(($this->user_group=="I am Talent") &&($groups_no==0)) {              
        header("Location: ".MAIN_URL.$this->groups_page);  
                    echo "what's going on?"; //THIS DOESN'T EXECUTE BY ITSELF...WHY NOT?? 
    } 
    if(mysql_result(mysql_query(sprintf("SELECT last_update FROM `users_profile` WHERE users_id=%d LIMIT 1",$this->id)),0)==0) {

        header("Location: ".MAIN_URL.$this->groups_page);
    }
        echo "what's going on?"; //won't execute unless the line above 

Кто-нибудь знает, почему вышеприведенный код не будет работать, если нет оператора echo?Я подтвердил посредством ручных проверок базы данных, что первый оператор if должен выполняться.

Это должно вызвать перенаправление страницы на ссылку, хранящуюся в переменной MAIN_URL. $ This-> groups_page (и это отсутствие перенаправления было первоначальной проблемой).Тем не менее, часть заголовка ("Location: ...") не выполняется, если нет эха в операторе if или над оператором if.С какой стати это будет?Я помещаю эхо-оператор ПОСЛЕ заголовка ("Location:" .MAIN_URL. $ This-> groups_page);строка в первом операторе if, и он не выполняется.Он будет выполняться только если бы у меня был оператор echo перед строкой header (...).

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Это эхо действительно не влияет на другое эхо. Я подозреваю, что происходит второе эхо, которое обычно не выполняется, потому что перенаправления местоположения отправляются в браузер первыми и, следовательно, последний эхо никогда не отображается.

Однако, когда вы включаете первый эхо, а затем один из заголовков местоположения отправляется в браузер, PHP должен выдать ошибку, сообщающую, что вывод уже начался (по первому эхо). В этом случае второе эхо может показываться сквозным, т.к. заголовки не могут быть отправлены в этот момент.

@ То же самое; Я был в середине сообщения об этом, когда ваш ответ пришел;)

1 голос
/ 14 декабря 2011

Потому что вы ничего не можете вывести до установки заголовков HTTP.Обычно вы должны получить ошибку PHP вроде Headers already sent by....Заголовки HTTP (в вашем случае: Location: ...) отправляются в браузер перед телом.

Согласно PHP: header :

Помните, что заголовок() должен вызываться перед отправкой любого фактического вывода, либо обычными тегами HTML, пустыми строками в файле, либо из PHP.Это очень распространенная ошибка при чтении кода с помощью функций include () или require (), или другой функции доступа к файлу, с пробелами или пустыми строками, которые выводятся до вызова header ().Та же проблема существует при использовании одного файла PHP / HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...