Frage

Ich erstelle ein JQuery-Ajax-Popup-Kommentarformular, habe aber ein Problem mit der Art und Weise, wie ich meinen „Honeypot“ in PHP einrichte.

Der Honeypot ($robotest) funktioniert nicht;Stattdessen gibt das Skript „E-Mail ist nicht korrekt“ zurück.Kann jemand auf meinen Fehler hinweisen?Danke

Das HTML-Formular lautet:

<form class="cmxform" id="commentForm" method="POST" action="">
   <p>
     <label for="cname">Name</label>
     <input id="cname" name="name" size="25" class="required" minlength="2" />
   </p>
   <p>
     <label for="cemail">E-Mail</label>
     <input id="cemail" name="email" size="25"  class="required email" />
   </p>
   <p>
     <label for="curl">URL</label>
     <input id="curl" name="url" size="25"  class="url" value="" />
   </p>
   <p>
     <label for="ccomment">Your comment</label>
     <textarea id="ccomment" name="comment" cols="22"  class="required"></textarea>
   </p>
    <p class="robotic" id="pot">
        <label>Please leave this blank:</label>
        <input name="robotest" type="text" id="robotest" class="robotest" />
    </p>
   <p>
     <input class="submit" type="submit" value="Submit"/>
   </p>

BEARBEITEN:

Vielen Dank an @JamWaffles für die Unterstützung.Nachfolgend erfahren Sie, wie Sie den Honeypot richtig implementieren.(Und wie Kamalo bemerkte, möchten Sie, dass die ID von „robotest“ in Ihrem CSS auf „display:none“ eingestellt ist):

<?php
$robotest = $_POST['robotest'];
$email = $_POST['email'];   
if((!filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == "")) { 
    print "E-mail is correct";      
    $to      = 'asdfdsafasdfsda@gmail.com';
    $subject = 'the subject';
    $message = 'hello';
    $headers = 'From: webmaster@example.com';       
    mail($to, $subject, $message, $headers);        
} else {
    print "E-mail is not correct";
}   
?>
War es hilfreich?

Lösung

filter_var() gibt einen nicht falschen Wert zurück, wenn die E-Mail gültig ist, nicht false.Entferne das ! Vor filter_var( in deinem if():

if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest = "")) 

Sie führen Code innerhalb des aus if() Wann filter_var() scheitert, weshalb Sie bekommen

E-Mail ist nicht korrekt

für gültige E-Mails.


Etwas anderes, was mir auch entgangen ist, ist die Tatsache, dass du es bist zuordnen zu $robotest anstatt es mit einer leeren Zeichenfolge zu vergleichen.Sie müssen den Double-Equals-Vergleichsoperator anstelle des Single-Equals-Zuweisungsoperators verwenden.Dein if() sollte so aussehen:

if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == "")) 

Andere Tipps

Für eine alternative Antwort stellte ich einen "Honigtopf" in mein HTML mit Display ein: Keine generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top