停止表单通过PHP脚本提交垃圾邮件

时间:2016-03-23 19:05:57

标签: php html forms email spam

基本上我有一个访问我制作的电子邮件脚本的表单,并发送一条消息,其中包含用户在给定字段中设置的内容。我想知道是否有可能通过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");
}
?>

1 个答案:

答案 0 :(得分:0)

好的,所以看起来你的PHP和表单代码看起来还不错。问题是在发送消息时没有阻止用户点击/点击该按钮。

处理此问题的一种方法是在单击按钮后禁用该按钮。这样,只有一次点击才能重新加载页面(你已经在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;
});

希望这会有所帮助。