Honeypot PHP для формы комментария
-
12-11-2019 - |
Вопрос
Я создаю всплывающую форму комментариев jquery ajax, но у меня возникла проблема с тем, как я настраиваю свой "honeypot" в php.
Медовый горшочек ($robotest) не работает;вместо этого скрипт возвращает "Адрес электронной почты неверен".Кто-нибудь может указать на мою ошибку?Спасибо
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>
РЕДАКТИРОВАТЬ:
Спасибо @JamWaffles за поддержку.Ниже приведен правильный способ реализации honeypot.(И, как отметил Камало, вы захотите, чтобы идентификатор "robotest" был установлен для отображения:none в вашем 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";
}
?>
Решение
filter_var()
возвращает значение, не являющееся ложным, если электронное письмо является действительным, а не false
.Удалите !
до filter_var(
В вашем if()
:
if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest = ""))
Вы выполняете код внутри if()
когда filter_var()
неудачи, и именно поэтому вы получаете
Неверный адрес электронной почты
для действительных электронных писем.
Что-то еще, что я тоже пропустил, так это тот факт, что ты присвоение $robotest
вместо того, чтобы сравнивать его с пустой строкой.Вам нужно использовать оператор сравнения double equals вместо оператора присваивания single equals.Ваш if()
должно выглядеть примерно так:
if((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($robotest == ""))
Другие советы
Для альтернативного ответа я настроил «горшок с медом» в моем HTML с дисплеем: нет
<input type="text" name="honeypot" id="honeypot" style="display:none;"/>
.