В принятом ответе на Лучшая реализация Honeypot (Форма Анти-Спам)
Это PHP для страницы обработки, которую отправляет ваша форма.
Копированиекод из поста Николаса Саммерса, я добавлю некоторый пример HTML, чтобы прояснить его.
<?php
$honeypot = FALSE;
if (!empty($_REQUEST['contact_me_by_fax_only']) && (bool)
$_REQUEST['contact_me_by_fax_only'] == TRUE) {
$honeypot = TRUE;
log_spambot($_REQUEST);
// treat as spambot -- here we will place the HTML "inline"
?>
<html>
<body>
<p>Tasty spam, thanks!</p>
</body>
</html>
<?php
exit(); // all done if a spambot
} else {
// process as normal -- here we will use a function, note that in PHP
// scope rules will hide most global variables from the function!
process_human_response();
}
function process_human_response()
{
//... get data from $_REQUEST
//... process data
?>
<html>
<body>
<p>Thank you good human!</p>
</body>
</html>
Это показывает размещение вашего кода и HTML "inline" на глобальном уровне для первого случая (спам) и вфункция для людей, просто чтобы показать другой путь.
Как уже отмечалось, код часто короче и проще в обслуживании, если вы не дублируете какой-либо общий HTML-код, например:
Общее начало страницы:
<html>
<head> <!-- and shared CSS, JS files here --> </head>
<body>
Некоторая логика PHP, позволяющая определить, является ли она спамботом
<?php
if (isset($_REQUEST['contact_me_by_fax_only']) && (bool)
$_REQUEST['contact_me_by_fax_only'] == TRUE) {
$honeypot = TRUE;
log_spambot($_REQUEST);
// treat as spambot -- here we will place the HTML "inline"
?>
Включить HTML-ответ для спамбота, выполненный "inline". Поскольку в случае PHP-кода «if» этот HTML-код будет отправляться в браузер только в том случае, если тест if равен true (= spambot)
<p>Tasty spam, thanks!</p>
Продолжить код PHP для if
case, затем переключитесь на else
case.
<?php
exit(); // all done if a spambot
} else {
// process as normal -- here we will use a function, note that in PHP
// scope rules will hide most global variables from the function!
process_human_response();
}
?>
Общий HTML для конца страницы
</body>
</html>
Функция, вызываемая для обработки ответа человека
function process_human_response()
{
//... get data from $_REQUEST
//... process data
?>
Этот HTML-код находится внутри функции, поэтому он отправляется только в том случае, если эта функция вызывается
<p>Thank you good human!</p>
Завершить функцию
<?php
}
?>