Получение предупреждения: невозможно изменить информацию заголовка на GoDaddy, но не на Wamp - PullRequest
0 голосов
/ 11 февраля 2012

Я получаю Warning: Cannot modify header information.Я НЕ получаю эту ошибку при тестировании исходного кода на WAMP.Также в некоторые PHP включены определенные классы, и при необходимости вызываются функции для работы с html.Может кто-то указать мне верное направление?Вот точная ошибка и процитированные файлы.

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с / home / content / 39/8810539 / html / pagoda / view / header.php: 2) в /home/content/39/8810539/html/pagoda/controller/login.php в строке 9

login.php:

<?php

    global $session;
    global $view;

    if (isset($_POST['login']))
    {
        if ($session->logIn($_POST["uname"],$_POST["password"]))
            header("Location: $_SERVER[REQUEST_URI]");
        else
            $view->RenderMsg("Your username and/or password was incorrect.");
    }
    if (isset($_POST['logout']))
    {
        $session->logOut();
        header("Location: $_SERVER[REQUEST_URI]"); 
    }


?>

заголовок.PHP-фрагмент:

<head>
<link rel="stylesheet" type="text/css" href="<?php echo BASEPATH; ?>/view/css/homepageStyle.css" />
</head>
<div id="header">
    <div id="banner">
        Pagoda
    </div>
    <div id="login">

<?php 

    //This controls the login/logout header on the top of each page.

    global $session;
    if ($session->isLoggedIn())
    {
?>
    <div id="nametag">
        <form method="POST" name="logout" action="">
        Welcome, <?php echo $session->getName()." (".$session->getRole().")"?>
        <input name="logout" type="hidden" value="Log Out"/>
        </form>
    </div>  
    ....
    ....
    ....

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

Я решил это с помощью ob_start (). ob_start сначала записывает html в буфер, затем записывает его в браузер после изменения заголовка. ob_start идет перед вашим HTML-кодом. Нет необходимости, но рекомендуется закрывать буфер после header () с помощью ob_end_flush ();

Фрагмент header.php:

<?php
     ob_start()
 ?>

<head>
<link rel="stylesheet" type="text/css" href="<?php echo BASEPATH; ?>/view/css/homepageStyle.css" />
</head>
<div id="header">
    <div id="banner">
        Pagoda
    </div>
    <div id="login">

<?php 

    //This controls the login/logout header on the top of each page.

    global $session;
    if ($session->isLoggedIn())
    {
?>
    <div id="nametag">
        <form method="POST" name="logout" action="">
        Welcome, <?php echo $session->getName()." (".$session->getRole().")"?>
        <input name="logout" type="hidden" value="Log Out"/>
        </form>
    </div>  
    ....
    ....
    ....

login.php

<?php

    global $session;
    global $view;

    if (isset($_POST['login']))
    {
        if ($session->logIn($_POST["uname"],$_POST["password"]))
            header("Location: $_SERVER[REQUEST_URI]");
            ob_end_flush();
        else
            $view->RenderMsg("Your username and/or password was incorrect.");
    }
    if (isset($_POST['logout']))
    {
        $session->logOut();
        header("Location: $_SERVER[REQUEST_URI]");
        ob_end_flush(); 
    }


?>
0 голосов
/ 11 февраля 2012

Кстати, некоторые ошибки в вашем коде:

1) Не используйте «?>», Иначе вы получите то же предупреждение, если у вас будут пробелы в конце файлов (некоторые редакторы это делают)

2) Вы забыли экранирование HTML в "<? Php echo $ session-> getName () ...": используйте htmlspecialchars ()

3) Не используйте глобалы. Никогда.

4) Логика и вид должны быть разделены.

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