Prima di tutto ti invito a leggere il regolamento su come postare correttamente il codice all'interno del messaggio.
Venendo alle tue domande:
1) si, in tutta onesta' il codice postato e' un'enciclopedia di errori: come hai giustamente dedotto, nessun output puo' essere generato prima di inviare header, quindi dovresti ristrutturare il codice per avere prima tutto cio' che riguarda eventuali redirect e poi l'output, di qualunque tipo. La cosa migliore, direi anzi necessaria, e' separare COMPLETAMENTE codice PHP e HTML, possibilmente usando un template engine: anche sistemando il problema degli header, un codice del genere e' un incubo di leggibilita' e manutenzione. Era comprensibile nei primi tempi di PHP, ma ormai una struttura del genere e' come usare un modem 56k al posto della fibra ottica.
Oltre a questo, c'e' la nota positiva dell'utilizzo di PDO, ma la cosa e' completamente vanificata dalla serie di addslashes() e stripslashes() il cui scopo inteso e' fare quello che i prepared statements fanno nel modo giusto.
2) lo sconsiglio e non so nemmeno se funziona correttamente, ma puoi provare a mettere un semplice
come prima riga dello script, ma l'output buffering in teoria serve a tutt'altro, e usato cosi' e' la soluzione sbagliata a un problema che e' solo di progettazione del codice.Codice PHP:
<?php ob_start(); ?>