Одной из возможностей является реализация подхода post-redirect-get.
Проще говоря, запрос POST никогда не будет доставлен в браузер.Вместо этого вы выполняете все необходимые действия и сохраняете необходимую информацию в сеансе, а затем выполняете перенаправление с кодом 303.
$page = 'show_result.php';
header('Location: '.$page, true, 303);
exit;
При этом браузер покажет «show_result.php».page (запрос GET) вместо страницы, запрашиваемой с помощью POST.Это также страница, которая добавляется в историю, поэтому при обновлении и использовании кнопки «назад» никогда не будет выполнен другой запрос POST.В качестве приятного побочного эффекта вы избавляетесь от предупреждений браузера о повторной отправке данных, обычно пользователь в любом случае не может решить, что делать дальше.
Я думаю, что самая большая проблема этого подхода заключается в том, что вам необходим сеанс для хранения ошибкисообщения, это означает, что вы должны полагаться на куки.Если вы не будете перенаправлять сообщения об ошибках, браузер отобразит предупреждение о повторной отправке данных.