L'en-tête de la requête contient des données POST. Quoi que vous fassiez, lorsque vous rechargez la page, la requête est à nouveau envoyée.
La solution simple consiste à rediriger vers une nouvelle page (si ce n'est la même). Ce modèle est très courant dans les applications web, et est appelé Poster/Rediriger/Retrouver . Il est courant que tous les formulaires fassent un POST, puis, en cas de succès, une redirection.
Essayez autant que possible de toujours séparer (dans des fichiers différents) votre vue script (html principalement) de votre contrôleur script (logique métier et autres). De cette façon, vous posterez toujours des données dans un contrôleur séparé script et vous redirigerez ensuite vers une vue script qui, une fois rendue, ne contiendra aucune donnée POST dans l'en-tête de la requête.