Итак, я работаю над своим сайтом и прихожу к месту, где я добавил контактную форму. У меня он работает, он отправляет электронные письма на почту моего сервера, но я продолжаю получать одно и то же письмо каждый раз, когда перезагружаю сайт, и здесь возникает вторая проблема. Когда я нажимаю кнопку F5, я получаю окно с предупреждением с надписью «Подтвердить повторную отправку формы» «Страница, которую вы ищете, использовала введенную вами информацию. Возврат на эту страницу может привести к повторению любых ваших действий. Хотите ли вы Продолжать?"
Я старался изо всех сил, но не смог это изменить, может ли кто-нибудь объяснить, что не так в моем коде? Спасибо, что ответили мне!
<?php
// define variables and set to empty values
$name_error = $email_error = "";
$name = $email = $message = $success = "";
//form is submitted with POST method
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$name_error = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$name_error = "Only letters and white space allowed";
}
}
if (empty($_POST["email"])) {
$email_error = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$email_error = "Invalid email format";
}
}
if (empty($_POST["message"])) {
$message = "";
} else {
$message = test_input($_POST["message"]);
}
if ($name_error == '' and $email_error == ''){
$message_body = '';
unset($_POST['submit']);
foreach ($_POST as $key => $value){
$message_body .= "$key: $value\n";
}
$to = '[email protected]';
$subject = $email;
if (mail($to, $subject, $message)){
$success = "Message sent, thank you for contacting us!";
$name = $email = $message = '';
}
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
И HTML:
<form id = "contact" action = "<?= htmlspecialchars($_SERVER[" PHP_SELF "]) ?>" method = "post">
<h3>Contact me</h3>
<h4>Just send me an email and I will respond as fast as I can!</h4>
<fieldset>
<input placeholder = "Your name" type = "text" name = "name" value = "<?= $name ?>" tabindex = "1" autofocus>
<span class = "error"><?= $name_error ?></span>
</fieldset>
<fieldset>
<input placeholder = "Your Email Address" type = "text" name = "email" value = "<?= $email ?>" tabindex = "2">
<span class = "error"><?= $email_error ?></span>
</fieldset>
<fieldset>
<textarea value = "<?= $message ?>" name = "message" tabindex = "3">
</textarea>
</fieldset>
<fieldset>
<button name = "submit" type = "submit" id = "contact-submit" data-submit = "...Sending">Submit</button>
</fieldset>
<div class = "success">
<?= $success ?>
</div>
</form>
Кстати, вы пытаетесь проверить ввод после отправки формы? Вероятно, вам следует сделать это с помощью JavaScript, а не PHP.
@PauloHgo Никогда просто полагается на JavaScript для проверки. Это удобство, который можно легко обойти. Всегда проверяется на стороне сервера, даже если у вас уже есть проверка на стороне клиента.
@PauloHgo Никогда не полагайтесь только на проверку на стороне клиента. Его легко обойти. Если вы собираетесь использовать проверку на стороне клиента, она должна сопровождаться проверкой на стороне сервера также.
Понятно, спасибо, ребята.






перенаправить на новую страницу в конце скрипта, чтобы избежать повторной отправки формы