Question

Je crée un formulaire de commentaire popup jQuery Ajax, mais j'ai un problème avec la façon dont je configure mon "pot de miel" en PHP.

Le pot de miel ($ robotest) ne fonctionne pas; Au lieu de cela, le script renvoie "le courrier électronique n'est pas correct". Quelqu'un peut-il signaler mon erreur? Merci

Le formulaire HTML est:

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

ÉDITER:

Merci à @jamwaffles pour le soutien. Vous trouverez ci-dessous la bonne façon d'implémenter le pot de miel. (Et comme Kamalo l'a noté, vous voudrez avoir l'ID de «Robotest» à afficher: Aucun dans votre 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";
}   
?>
Était-ce utile?

La solution

filter_var() Renvoie une valeur non modeste lorsque l'e-mail est valide, pas false. Retirer le ! avant de filter_var( dans ton if():

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

Vous exécutez du code à l'intérieur du if() lorsque filter_var() échoue, c'est pourquoi vous obtenez

Le courriel n'est pas correct

pour les e-mails valides.


Quelque chose d'autre que j'ai manqué aussi, c'est le fait que vous attribution à $robotest Au lieu de le comparer à une chaîne vide. Vous devez utiliser l'opérateur de comparaison double égaux au lieu de l'opérateur d'attribution égal unique. Ton if() devrait ressembler à ceci:

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

Autres conseils

Pour une réponse alternative, j'ai configuré une entrée "Honey Pot" dans mon HTML avec l'affichage: aucun

<input type="text" name="honeypot" id="honeypot" style="display:none;"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top