刷新网页后表单数据尝试重新发送
Posted
技术标签:
【中文标题】刷新网页后表单数据尝试重新发送【英文标题】:Form data tries to resend after I refresh the webpage 【发布时间】:2020-10-22 11:26:42 【问题描述】:我并没有真正使用 php,而且这样做超出了我的范围。我正确设置了 XAMPP 及其“sendmail”文件夹,这样我就可以从我创建的网站发送电子邮件。电子邮件被发送给该人,但问题是,每当我在第一次发送邮件后尝试刷新时,网页都会告诉我“您正在寻找您输入的已使用信息的页面。返回该页面可能导致您采取的任何行动被重复”。所以如果我点击继续,页面会刷新,但邮件会再次发送。
我尝试使用标头进行重定向,但它并没有真正起作用。我收到一条错误消息,指出“无法修改标头信息 - 标头已发送”。 我也尝试了一些 AJAX 功能但没有成功。我真的无法理解这一点,我现在非常感谢一些帮助
这是我的表单 html
<form method="post" action="#" class="contact-form" autocomplete="off">
<div class="row">
<div class="col span-1-of-3">
<label for="name">Name</label>
</div>
<div class="col span-2-of-3">
<input type="text" name="name" id="name" placeholder="Your name" required>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label for="email">Email</label>
</div>
<div class="col span-2-of-3">
<input type="email" name="email" id="email" placeholder="Your email" required>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label for="find-us">How did you find about us?</label>
</div>
<div class="col span-2-of-3">
<select name="find-us" id="find-us">
<option value="friends" selected>Friends</option>
<option value="search">Seach Engine</option>
<option value="other">Other</option>
</select>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label>Newsletter</label>
</div>
<div class="col span-2-of-3">
<input type="checkbox" name="newsletter" id="newsletter" checked>Yes, please
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label>Mesaj</label>
</div>
<div class="col span-2-of-3">
<textarea name="message" placeholder="Your message" require></textarea>
</div>
</div>
<div class="row">
<div class="col span-1-of-3">
<label> </label>
</div>
<div class="col span-2-of-3 btn-send">
<input name="sendmail" type="submit" value="Send!">
</div>
</div>
</form>
</div>
这是我使用的 PHP 代码:
<?php
if(isset($_POST['sendmail']))
mail($_POST['email'], 'Store' , 'Thanks for the message '.$_POST['name'].' !');
echo "Sent";
else
echo "Fail";
?>
【问题讨论】:
【参考方案1】:您需要使用POST/REDIRECT/GET pattern 将用户重定向到另一个页面或同一页面以避免这种情况。发送303 HTTP response 将告诉浏览器在其历史记录中替换该页面并避免重新发送已发布的数据。
if (mysqli_query($connection, $register))
if(isset($_POST['sendmail']))
mail($_POST['email'], 'Store' , 'Thanks for the message '.$_POST['name'].' !');
header('Location: index.php', true, 303);
exit;
else
// Handle error
这是一个非常基本的例子。您需要为对mail()
的调用添加错误检查/处理,因为它可能会失败。您还应该有某种消息让用户知道电子邮件已发送。
【讨论】:
以上是关于刷新网页后表单数据尝试重新发送的主要内容,如果未能解决你的问题,请参考以下文章