Problem polega na tym, że u góry strony uruchamiasz wyjście html niezależnie od tego, czy użytkownik chce zobaczyć pliki do pobrania, czy też chce pobrać sam plik. W tym momencie plik do pobrania staje się stroną html.
Twój kod powinien zaczynać się od sprawdzenia, czy parametr id jest ustawiony. Jeśli nie, to zaczynasz generować stronę html. Jeśli tak, to czytasz plik z bazy danych, ustawiasz nagłówki i odsyłasz zawartość.
Lub po prostu użyj innej strony php do wyświetlenia listy plików i pobrania jednego z plików.