Sobre este tema ya se ha hablado varias veces en el foro.
La clave está en no mezclar los procesos y la presentación.
Cuando alguien quiere descargar algo, lo hace a través de un enlace. Ese enlace lo envía a un script que no muestra nada... simplemente actualiza la base de datos y al final redirecciona con header() a la página que quieras. De esa manera no tendrás el problema del "refresh".
saludos