Отображение такого типа сообщения часто называется «fla sh message»: отображение сообщения, которое появляется один раз, а не отображается после refre sh.
Ваша проблема связана с поведением браузера: если страница загружается из запроса POST, затем, если пользователь нажмет кнопку refre sh, он создаст новый запрос POST с тем же параметром POST
Но вам нужно: если страница загружается из POST запрос, затем, если пользователь нажмет кнопку refre sh, он создаст новый запрос GET (конечно: без параметра POST)
Это может быть достигнуто с помощью сеанса, шаг следующий:
пользователь нажимает кнопку (1 или 2)
POST to self button1 = Button1 или button2 = Button2
Страница, обрабатывающая запрос (выполняет функцию mail)
Перенаправление страницы / refre sh для отображения нового сообщения, ранее сохраненного в переменной сеанса.
<?php
session_start();
if(array_key_exists('button1', $_POST)) {
button1();
}
else if(array_key_exists('button2', $_POST)) {
button2();
}
function button1() {
$_SESSION["msg"] = "mail";
echo "<script>window.location = window.location.pathname;</script>";
exit();
}
function button2() {
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "test@example.de";
$to = "thisIsA@secret.de";
$subject = "Betreff";
$message = "Text";
$headers = "From:" . $from;
mail($to,$subject,$message, $headers);
$_SESSION["msg"] = "Test email sent";
echo "<script>window.location = window.location.pathname;</script>";
exit();
}
?>
<form method="POST">
<input type="submit" name="button1"
class="button" value="Button1" />
<input type="submit" name="button2"
class="button" value="Button2" />
</form>
<?php
if(isset($_SESSION["msg"]) && !empty($_SESSION["msg"])){
echo $_SESSION["msg"];
$_SESSION["msg"] = null;
unset($_SESSION["msg"]);
}
?>