基本上我有一个访问我制作的电子邮件脚本的表单,并发送一条消息,其中包含用户在给定字段中设置的内容。我想知道是否有可能通过PHP脚本禁止多次提交...
这是一个电子邮件表单,因此如果用户按下"提交"按钮不止一次,它会不止一次发送电子邮件。如果一个人按下提交按钮100次,将向我的电子邮件发送100条消息。
所以,我的问题是,无论如何都要阻止PHP脚本在提交后再次运行?
以下是表格的代码。
<form action="http://sebastianalsina.com/contact/sendmail.php" method="post">
<input type="text" placeholder="Name" name="name">
<input type="text" placeholder="Email" name="email">
<input type="text" placeholder="Subject" name="subject">
<textarea placeholder="Write your message here" name="message" rows="6"></textarea>
<input type="submit" name="submit" class="sendmessage" value="Send message">
</form>
这是sendmail.php:
<?php
require 'PHPMailerAutoload.php';
include 'variables.php';
// receiver message
if ($_POST['name'] != "" && $_POST['email'] != "" && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) && $_POST['message'] != "") {
$mail = new PHPMailer;
$mail->AddReplyTo($_POST['email'], $_POST['name']);
$mail->setFrom($fromEmail, $_POST['name'] . ' (' . $companyName . ' Web Mailer)');
$mail->addAddress($toEmail);
$mail->isHTML(true);
$mail->Subject = $_POST['subject'];
$mail->Body = '**CODE WAS REMOVED HERE BECAUSE IT WAS REALLY LONG**';
$mail->AltBody = $_POST['message'];
if(!$mail->send()) {
header("Location: error.php");
} else {
header("Location: thankyou.php");
}
} else {
header("Location: error.php");
}
?>
答案 0 :(得分:0)
处理此问题的一种方法是在单击按钮后禁用该按钮。这样,只有一次点击才能重新加载页面(你已经在PHP中进行了重定向)
首先,您需要为表单提供ID:
<form id="message_form" action="http://sebastianalsina.com/contact/sendmail.php" method="post">
现在使用Javascript来提供功能:
var form = document.getElementById("message_form");
form.addEventListener('submit', function () {
form.submit.disabled = true;
});
希望这会有所帮助。