Twój problem polega na tym, że zabierasz się za pisanie stron internetowych bez wiedzy o tym, jak to się w ogóle dzieje, że strona magicznie się pojawia w przeglądarce.
Otóż szkielet komunikacji między serwerem a przeglądarką wygląda tak: `nagłówki` + `treść strony` *(w takiej dokładnie kolejności)*.
Nagłówki to na przykład:
-
Content-Length
określający rozmiar wysyłanej/odbieranej (zależy kto pyta) strony,
-
Content-Type
mówiący o rodzaju odbieranych danych, przykładowo może mieć wartość text/html;charset=UTF-8
,
- czy też właśnie
Location
wskazujący o przeniesieniu zasobu w inne miejsce.
W momencie, gdy wywołujesz echo
/print
czy też po prostu pojawia się jakiś HTMLowy kod, wysyłanie nagłówków przestaje być możliwe*, ponieważ - jak pewnie się już domyśliłeś - nagłówki muszą się pojawić przed treścią strony.
W Twoim przypadku sugerowałbym wrzucić do sesji treść komunikatu do wyświetlenia, przekierować za pomocą `Location` od razu na stronę główną i tam wyświetlić dopiero komunikat.
Przykładowo:
logout.php
<?php
if (isset($_SESSION['zalogowany']) && $_SESSION['zalogowany']) {
unset($_SESSION['zalogowany']);
$_SESSION['wiadomosc'] = 'Zostałeś pomyślnie wylogowany.';
}
header('Location: /index.php');
index.php
<?php if (isset($_SESSION['wiadomosc'])): ?>
<h3><?= $_SESSION['wiadomosc'] ?></h3>
<?php unset($_SESSION['wiadomosc']); ?>
<?php endif; ?>
W taki sposób od razu następuje przekierowanie na stronę główną, zostaje mniej-więcej zachowana zasada pojedynczej odpowiedzialności (wylogowywanie w osobnym, przeznaczonym do tego pliku) oraz przy okazji masz gotowy mechanizm do wyświetlania innych powiadomień na stronie głównej.
BTW rozszerzenie mysql
(wszystkie funkcje mysql_*
) są zdeprecjonowane i zostały usunięte wraz z PHP 7; wykorzystuj PDO.
*
chyba że wykorzystasz buforowanie: http://php.net/manual/en/function.ob-start.php - wtedy można wywoływać sobie header
z niemalże dowolnego miejsca kodu, lecz w tym konkretnym przypadku przyniosłoby to inne rezultaty niż Ci się może wydawać.