Domanda

Sto creando un modulo di commento a popup JQuery Ajax, ma sto avendo un problema con il modo in cui sto configurando il mio "honeypot" in PHP.

il honeypot ($ robotest) non funziona;Invece lo script ritorna "L'e-mail non è corretta".Qualcuno può indicare il mio errore?Grazie

Il modulo HTML è:

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

Modifica:

Grazie a @jamwaffles per il supporto.Di seguito è riportato il modo corretto per implementare il honeypot.(E come notato Kamalo, vorrai avere l'ID del set di "robotest" per visualizzare: nessuno nel tuo CSS):

<?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";
}   
?>
.

È stato utile?

Soluzione

filter_var() restituisce un valore non falso quando l'e-mail è valida, non false.Rimuovere il ! prima di filter_var( nel if():

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

Stai eseguendo il codice all'interno del if() quando filter_var() non riesce , motivo per cui stai ricevendo

.

E-mail non è corretto

per e-mail valide.


.

Qualcos'altro che ho perso anche è il fatto che sei assegnazione a $robotest invece di confrontarlo da una stringa vuota.È necessario utilizzare il doppio operatore di confronto del confronto invece del singolo operatore di assegnazione.Il tuo if() dovrebbe assomigliare a questo:

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

Altri suggerimenti

Per una risposta alternativa, ho impostato un ingresso "Pentola di miele" nel mio html con display: nessuno

<input type="text" name="honeypot" id="honeypot" style="display:none;"/>
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top