Problém je v tom, že v horní části stránky spustíte html výstup bez ohledu na to, zda uživatel chce vidět soubory ke stažení, nebo si chce stáhnout soubor samotný. V tu chvíli se ze souboru ke stažení stane html stránka.
Váš kód by měl začínat kontrolou, zda je nastaven parametr id. Pokud ne, začněte generovat html stránku. Pokud ano, přečtete soubor z databáze, nastavíte záhlaví a pošlete obsah zpět.
Nebo použijte jinou stránku php pro zobrazení seznamu souborů a stažení jednoho ze souborů.