2016-03-23 28 views
0

Temelde, verdiğim bir e-posta komut dosyasına erişen ve kullanıcının belirtilen alanlarda belirlediği içeriğe mesaj gönderen bir form var. PHP betiği aracılığıyla, bir kereden fazla gönderilmesinin devre dışı bırakılmasının mümkün olup olmadığını merak ediyordum ...Formu iptal et PHP betiği ile spam gönder

Bu bir e-posta formu, eğer kullanıcı "submit" düğmesine bir defadan fazla basarsa, ' e-postayı bir kereden fazla gönderirim. Bir kişi gönder düğmesine 100 kez basarsa, e-postama 100 mesaj gönderilecektir.

Öyleyse, sorum şu, bir PHP betiğinin zaten gönderildikten sonra tekrar çalışmasını durdurmak için var mı?

Formun kodu aşağıdadır. İşte

<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 şudur: sizin PHP görünüyor ve form kodu ok görünüyor

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

Bir oturum değişkeni ayarlarsanız, komut her başladığında kontrol edin. eğer ayarlanmışsa, o zaman betik zaten yürütülmüştür. –

+2

Evet, captcha kullanın. – ops

+0

@MarcB bana bunu nasıl yapacağımı gösterecek kadar nazik misiniz? –

cevap

0

Tamam böylece. Sorun, kullanıcının mesajı gönderirken bu düğmeye basması/tıklaması engellenmemesidir.

Bunu işlemenin bir yolu, tıklandığında düğmeyi devre dışı bırakmaktır. Bu şekilde, sadece tek bir tıklamayla sayfa yeniden kadar izin verilir

Öncelikle formu bir kimlik vermek gerekir (zaten PHP'de bir yönlendirme ile yapıyoruz olan):

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

şimdi Javascript kullanmak, işlevselliği vermek için:

Bunun yardımcı olacağını umuyorum.

+0

Evet, bu işe yarayacak ve başka bir yerde benzer bir öneri buldum, ancak spam betiğini PHP betiği yoluyla durdurmanın mümkün olup olmadığını görmek istedim çünkü eğer spam (HTML) sayfası üzerinden spam'i durdurursam PHP üzerinden yapsaydım, sadece script'i düzenlemek zorunda kalırsam, formu 10+ farklı yerde (müşteriler sitelerim için) güncellemeliyim. bu mantıklı mı? –

+0

spam'ı durdurmak için, Captcha'yı belirtilen kişiler olarak kullanmaktan daha iyidir. Tam olarak ne tür bir spam yapmak istiyorsunuz? – CodeGodie

+0

Maalesef, spam’e başvurduğumda, kullanıcı birden fazla kez gönderdiğinde, ileti birden çok kez gönderilecek demektir. Mümkünse PHP betiği ile bundan kaçınmak istiyorum. –