Problemet er, at du øverst på siden starter html-outputtet, uanset om brugeren ønsker at se de filer, der skal downloades, eller vil downloade selve filen. I det øjeblik bliver filen, der skal downloades, en HTML-side.
Din kode bør starte med en kontrol, om id-parameteren er indstillet. Hvis ikke, så begynder du at generere html-siden. Hvis ja, så læser du filen fra db'en, indstiller overskrifterne og sender indholdet tilbage.
Eller brug bare en anden php-side til at vise listen over filer og downloade en af filerne.