Имея это:
<footer>
<div class="row no-margin no-padding">
<div class="col-md-4 col-xs-6 oneplayer">
<br>
<a class="logo navbar-brand no-margin no-padding" href="index.php"><img class="logo-img" src="res/images/oneplayer_logo.png"></img></a>
</div>
<div class="col-md-8 col-xs-12">
<div class="row no-margin no-padding">
<div class="col-md-4 footer-links-container">
<a href="aboutus.php" class="header-links"><?php echo $lang['footer_string_1']; ?></a><br><br>
<a href="index.php#contact" class="header-links"><?php echo $lang['footer_string_4']; ?></a>
</div>
<div class="col-md-4 footer-links-container">
<a href="politica_privacidad.php" class="header-links"><?php echo $lang['footer_string_2']; ?></a><br><br>
<a href="condiciones.php" class="header-links"><?php echo $lang['footer_string_3']; ?></a>
</div>
<div class="col-md-4 footer-links-container">
<form action="" method="post">
<p class="footer-contact-info"><?php echo $lang['footer_string_5']; ?></p>
<input type="email" class="my-form-control" placeholder="<?php echo $lang['footer_string_6']; ?>" name="newsemail" /> <button class="newsletter-button"><?php echo $lang['footer_string_7'];?></button><br> <br>
</form>
<?php
if (isset ($_POST['newsemail'])){
include("db_files/db.php");
$newsemail = mysqli_real_escape_string($db, $_POST['newsemail']);
$strSQL = "INSERT INTO newsletter (`email`) VALUES ( '$newsemail')";
$query = mysqli_query($db, $strSQL);
unset($_POST['newsemail']);
}
?>
<p class="footer-contact-info"> 999 999 999
</div>
</div>
</div>
</div>
</footer>
Я хочу, чтобы после выполнения insert
переменная $_POST['newsemail']
удалялась, так как при перезагрузке страницы она пытается выполнить insert
.
Так же стоило бы сделать это каким-то другим способом, но мне в голову не приходит, так как эта форма находится на одной footer
из страниц ( она footer
находится в отдельном файле "template/footer.php")
Какие варианты у меня есть, чтобы сделать что-то подобное?
Я изменил название вопроса
Существует способ под названием PRG (Post-Redirect-Get) Pattern , который не позволяет вам отправлять формы дважды.
То есть, когда форма отправляется через POST , вы должны ПЕРЕНАПРАВИТЬ через функцию header() на страницу, например
enviado.php
, с контекстом, подобным:Formulario enviado con exito
это приводит к тому, что вы будете перенаправлены на страницуenviado.php
сHEADER
HTTP 3xx, а затем ответите на обслуживается с помощью GET HTTP 200, и он обслуживает страницуenviado.php
и, таким образом, предотвращает повторную отправку формы вPOST
другое время.Я оставляю вам более описательное изображение:
Источник изображения: Википедия - Post/Redirect/Get
Тогда ваш код будет выглядеть следующим образом, и помните, что вы должны поместить этот блок кода перед своим кодом
HTML
, чтобы избежать уже отправленных заголовков... ошибок :Вы можете воспользоваться функцией
php
unset
.unset()
уничтожает указанные переменные.Поведение
unset()
внутри функции может варьироваться в зависимости от типа переменной, которую вы пытаетесь уничтожить.Если глобальная переменная находится
unset()
внутри функции, уничтожается только локальная переменная. Переменная в среде вызова сохранит то же значение до вызоваunset()
.Вот ссылка на руководство: http://php.net/manual/es/function.unset.php
Пример:
РЕДАКТИРОВАТЬ
Попробуйте добавить это:
Затем в метке
form
вы должны добавить следующее:onSubmit="return enviado()"
РЕДАКТИРОВАТЬ 2
Решение в этом случае простое, но требует небольшого изменения в функции, сохраняющей данные формы. Чтобы избежать этого сообщения, вам нужно перенаправить пользователя после сохранения изменений.
Представьте, что текущая ситуация:
Что нужно изменить, так это то, что contact.php после сохранения данных формы должен перенаправлять на другую страницу (например, на главную страницу) вместо отображения результата на той же странице. Это больше не будет показывать это сообщение, подтверждающее повторную отправку формы. Если вы программируете PHP без презерватива, перенаправление так же просто, как выполнение
header('Location: '.$url);
Я получил это отсюда: http://librosweb.es/foro/pregunta/983/como-hago-para-evitar-el-mensaje-confirmar-reenvio-del-formulario/
Я контролировал это, выполнив что-то вроде следующего, хотя это служит только для пропуска повторной обработки последнего отправленного при обновлении страницы с помощью клавиши F5, но меня это устраивает, когда то, что я отправляю, исчезает из списка ожидающих обработки:
Отвечая более кратко и ясно, более распространенным решением является то, что у вас есть два файла, один с html формы, а другой с php, который обрабатывает данные и перенаправляет в конце процесса, более или менее как @aldanux и @ alberto- скажем.Ср. в РЕДАКТИРОВАТЬ 2. Например:
form.php : содержит html и в теге
<form>
добавляет атрибутaction="enviar.php"
send.php : содержит php, который вставляет данные в базу данных:
Нет необходимости использовать unset для удаления
$_POST
, после сохранения данных он снова перенаправляет вас в форму со значением по URL-адресу, называемому результатом, который вы получаете с помощью$_GET
, чтобы вы могли управлять сообщением о результате, если хотите.Используйте unset , если вы установите его равным другому значению, вы его не уничтожите, у него просто будет другое значение, будь то undefined или null, но оно будет определено.
еще проще... я решил это так: 1. в методе формы я использую GET и 2. с помощью ajax я обычно отправляю данные формы через POST, и я забыл о проблеме... спасибо за вашу помощь. .. у меня все работало
У меня сработало, вставив этот скрипт там, где я обновлялся.