Het probleem is dat u bovenaan de pagina de html-uitvoer start, ongeacht of de gebruiker de te downloaden bestanden wil zien of het bestand zelf wil downloaden. Op dat moment krijgt het te downloaden bestand een html-pagina.
Uw code moet beginnen met een controle of de id-parameter is ingesteld. Zo niet, dan begint u met het genereren van de html-pagina. Zo ja, dan leest u het bestand uit de db, stelt u de headers in en stuurt u de inhoud terug.
Of gebruik gewoon een andere php-pagina om de lijst met bestanden weer te geven en een van de bestanden te downloaden.