Il problema è che nella parte superiore della pagina si avvia l'output html indipendentemente dal fatto che l'utente voglia vedere i file da scaricare o voglia scaricare il file stesso. In quel momento il file da scaricare diventa una pagina html.
Il tuo codice dovrebbe iniziare con un controllo se il parametro id è impostato. In caso contrario, inizi a generare la pagina html. Se sì, allora leggi il file dal db, imposti le intestazioni e rispedisci il contenuto.
Oppure usa semplicemente una pagina php diversa per visualizzare l'elenco dei file e scaricare uno dei file.