Ciao! Scusa ho riletto ora il messaggio che ho scritto ieri sera e io stesso ho stentato a capirne il senso. Riparto da capo. 
Il concetto di fondo è che non puoi inviare più di una volta gli headers al browser dell'utente: questo significa che se vuoi reindirizzare il browser tramite comandi php verso una qualsiasi altra pagina devi farlo PRIMA di inviare qualsiasi tipo di output (sia esso html o risultati di "echo", ecc...).
Per esempio:
Codice PHP:
<HTML>
<HEAD>
<TITLE>Ciao</TITLE>
</HEAD>
<BODY>
<?php
header("Location: nuovapagina.php");
?>
</BODY>
</HTML>
non funzionerà: infatti hai già inviato questo output prima dell'header:
codice:
<HTML>
<HEAD>
<TITLE>Ciao</TITLE>
</HEAD>
<BODY>
Per lo stesso motivo questo non funzionerà:
Codice PHP:
<?php
echo "Ciao, stai per venire rimandato ad un'altra pagina";
header("Location: nuovapagina.php");
?>
perchè prima di inviare l'header hai mandato in output una stringa. 
Per far funzionare le cose (limitatamente al primo esempio) dovresti fare:
Codice PHP:
<?php
header("Location: nuovapagina.php");
?>
<HTML>
<HEAD>
<TITLE>Ciao</TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
Per quanto riguarda il secondo c'è un "trucco" che sarebbe meglio evitare: tale trucco sta nella gestione del buffer. Per intenderci, se modifichi il secondo script così:
Codice PHP:
<?php
ob_start();
echo "Ciao, stai per venire rimandato ad un'altra pagina";
header("Location: nuovapagina.php");
?>
allora tutto funzionerà a meraviglia, anche se l'utente non avrà nemmeno il tempo di vedere il messaggio "ciao, stai..." perchè verrà subito reindirizzato alla nuova pagina.
Concludendo: una buona regola è spostare gli header PRIMA di qualsiasi output, sia esso un echo o html o qualsiasi altra cosa che "stampi" qualcosa sul browser dell'utente.
Il "trucco" dell'ob_start() usalo solo quando proprio non ne puoi fare a meno...
Spero di esser stato più chiaro adesso!
Ciaooo