有这个:
<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()函数重定向到一个页面,例如具有类似于: 的上下文,这会导致您被重定向到具有HTTP 3xx 的页面,然后回答与GET HTTP 200 一起提供,它为您提供页面,从而避免表单不再通过另一个时间发送。
enviado.php
Formulario enviado con exito
enviado.php
HEADER
enviado.php
POST
我给你留下一个更具描述性的图像:
图片来源:维基百科 - 发布/重定向/获取
然后您的代码将如下所示,并记住您必须将此代码块放在您的代码之前
HTML
,以避免Header 已发送...错误:您可以使用 的功能
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-say. 在编辑 2 中结婚。例如:
form.php:包含 html 并在标签中
<form>
添加属性action="enviar.php"
send.php:包含将数据插入数据库的 php:
没有必要使用 unset 来删除
$_POST
,在保存数据后,它会再次将您重定向到表单,并使用名为 result 的 url 的值,您可以使用 a$_GET
来控制结果消息。使用unset,如果你将它设置为另一个值,你不会破坏它,它只会有另一个值,无论是 undefined 还是 null,但它会被定义。
更简单...我这样解决了:1.在表单的方法中我使用GET和2.通过ajax我通常通过POST发送表单数据,我忘记了这个问题......谢谢你的帮助。 ..一切都对我有用
通过在我更新的地方插入这个脚本,它对我有用。