Обратите внимание на форму, расположенную ниже, где предлагается сложить два числа.
Как видите, для того чтобы отправить текст, необходимо сложить два числа, которые при каждом обновлении странички разные. Плюсом является то, что в исходном коде странички нет ответа, т.к. ответ хранится в переменной сессии.
Если ввести неверную сумму чисел, то появится сообщение \"Дан неверный ответ!\" и отправленный текст не будет обработан.
Давайте рассмотрим код, которые реализует такую простейшую защиту от ботов спамеров. Код состоит из двух частей: кода обработки отправленных данных и кода формы для отправки текста. Для начала приведем код обработки отправленных данных, который необходимо разместить в самом начале странички до вывода на экран любой информации:
<?php
session_start();
if ($_POST[submit]) {
if ($_POST[otvet] == $_SESSION[summ]) {
$_SESSION[message] = '<font color="blue">Ответ правильный!</font>';
// Тут обработка поступившего сообщения из поля text
}
else {
$_SESSION[message] = '<font color="red">Дан неверный ответ!</font>';
}
header("Location: forms_protection_number.php"); //сбрасываем отправленное
exit();
}
?>
Далее идет сама форма, через которую и был отправлен некоторый текст:
<?php
$a = rand(10,50);
$b = rand(1,10);
$_SESSION[summ] = $a + $b;
echo "<b>$_SESSION[message]</b>";
unset($_SESSION[message]);
?>
<form method="Post" action="forms_protection_number.php">
<table border="0">
<tr>
<td>Текст: </td>
<td><input type="text" name="text"></td>
</tr>
<tr>
<td><?php echo "$a + $b = "; ?></td>
<td><input type="text" name="otvet"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="Отправить"></td>
</tr>
</table>
</form>