2016-03-23 21 views
0

Grundsätzlich habe ich ein Formular, das auf ein E-Mail-Skript, das ich gemacht habe, zugreifen und senden Sie eine Nachricht mit dem Inhalt, den der Benutzer in den angegebenen Feldern setzt. Ich habe mich gefragt, ob es möglich war, durch das PHP-Skript zu verhindern, dass es mehr als einmal gesendet wird ...Stop form submit spamming über PHP script

Es ist ein E-Mail-Formular, wenn der Benutzer also mehrmals auf die Schaltfläche "Senden" klickt, Ich werde die E-Mail mehrmals senden. Wenn eine Person den Absenden-Knopf 100 Mal drückt, werden 100 Nachrichten an meine E-Mail gesendet.

Also meine Frage ist, gibt es sowieso, um ein PHP-Skript zu stoppen wieder ausgeführt, sobald es bereits eingereicht wurde?

Unten ist der Code des Formulars.

<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> 

Hier ist 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

Legen Sie eine Sitzungsvariable fest, überprüfen Sie sie jedes Mal, wenn das Skript gestartet wird. Wenn es gesetzt ist, dann hat das Skript offensichtlich bereits ausgeführt. –

+2

Ja, benutze Captcha. – ops

+0

@MarcB wärst du nett genug, mir zu zeigen, wie das geht? –

Antwort

0

ok, so dass es Ihre PHP und Form Code scheint in Ordnung aussieht. Das Problem besteht darin, dass der Benutzer nicht daran gehindert wird, beim Senden der Nachricht auf diese Schaltfläche zu klicken.

Eine Möglichkeit, dies zu umgehen, besteht darin, die Schaltfläche zu deaktivieren, sobald sie angeklickt wurde. Auf diese Weise nur einen Klick erlaubt wird, bis die Seite neu geladen wird

Zuerst Sie Ihr Formular eine ID geben muß (die Sie bereits mit einer Umleitung in PHP zu tun):

<form id="message_form" action="http://sebastianalsina.com/contact/sendmail.php" method="post"> 

jetzt Javascript verwenden, um die Funktionalität zu geben:

var form = document.getElementById("message_form"); 
form.addEventListener('submit', function() { 
    form.submit.disabled = true; 
}); 

hoffe das hilft.

+0

Ja, das wird funktionieren, und ich habe einen ähnlichen Vorschlag an anderer Stelle gefunden, aber ich wollte wirklich sehen, ob es möglich ist, das Spamming über das PHP-Skript zu stoppen, denn wenn ich den Spam über die HTML-Seite (das Formular) aufhalte Ich muss das Formular an 10 verschiedenen Stellen aktualisieren (für meine Kunden-Websites), während ich, wenn ich es über PHP machen würde, nur das Skript bearbeiten müsste. Ist das sinnvoll? –

+0

um mit dem Spammen aufzuhören, ist es besser, mit Captcha zu arbeiten, wie schon erwähnt .. Was für eine Art von Spam meinst du genau? – CodeGodie

+0

Entschuldigung, wenn ich mich auf Spamming beziehe, meine ich, dass die Nachricht mehrfach gesendet wird, wenn der Benutzer mehrmals auf "Senden" klickt. Ich möchte das, wenn möglich, über das PHP-Skript vermeiden. –