Как остановить многократную повторную отправку phpmailer на refre sh? (и показать сообщение об ошибке) - PullRequest
0 голосов
/ 03 марта 2020

Когда я обновляю sh страницу, phpmailer всегда пересылает письмо. Что я сделал? Использовал header("Location: home.php");

Но как я могу сделать Местоположение для дома. php и показать мое сообщение об ошибке $ error = "Спасибо за сообщение!";

if($mail->send()){
    header("Location: home.php");
    $error = "Thank you for message!";
} else {
    $error .= "Error {$mail->ErrorInfo}";
}

проблема в том, что когда я делаю заголовок, он не показывает мне сообщение об ошибке ...

<div class="text-center impact">
<?php echo $error; ?>
</div>

Ответы [ 3 ]

0 голосов
/ 03 марта 2020

Вы можете передать GET-parameter, чтобы проверить его при перезагрузке страницы. Попробуйте этот пример кода:

if($mail->send()){
    header("Location: home.php?success");
} else {
    $error .= "Error {$mail->ErrorInfo}";
} 

И на вашей странице:

<div class="text-center impact">
<?php echo isset($_GET['success']) ? "Thank you for message!" : $error; ?>
</div>
0 голосов
/ 03 марта 2020

Вы не передаете переменную $error между своими страницами, поэтому, когда вы повторяете ее, она не определена, и вы не получите никакого вывода. Вам нужно либо передать его через параметр запроса URL-адреса:

header("Location: home.php?error=" . rawurlencode($error));

, а затем извлечь его на этой странице:

echo $_GET['error'];

или альтернативно передать его через переменную сеанса (вероятно, лучше выбор):

$_SESSION['errors'] = $error;
header("Location: home.php");

, а затем:

echo $_SESSION['error'];
0 голосов
/ 03 марта 2020

Вы не увидите его, потому что ваш браузер выполняет переадресацию немедленно, прежде чем вы сможете его увидеть.

Сверхпростое решение будет заключаться в перенаправлении на: header ("Местоположение: отправить-подтверждение. php" );

с информацией о том, что сообщение было отправлено. Конечно, вы можете сделать более продвинутое решение и передать параметр apropiate на домашнюю страницу или использовать cookies / session на своей странице phpmailer, чтобы избежать повторной отправки.

...