Masalahnya adalah bahwa di bagian atas halaman Anda memulai keluaran html terlepas dari apakah pengguna ingin melihat file yang akan diunduh, atau ingin mengunduh file itu sendiri. Pada saat itu file yang akan diunduh menjadi halaman html.
Kode Anda harus dimulai dengan tanda centang jika parameter id disetel. Jika tidak, maka Anda mulai membuat halaman html. Jika ya, maka Anda membaca file dari db, mengatur header dan mengirim kembali isinya.
Atau gunakan saja halaman php yang berbeda untuk menampilkan daftar file dan mendownload salah satu file.