Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov

Форма с защитой от спама на PHP

Пример по созданию формы отправки письма (обратная связь) с антиспамом, каждый раз на картинке будет выводиться новое число. Пока пользователь не введёт цифры в поле, которые написаны на картинке, письмо не будет отправлено вам на почтовый ящик.

Создайте файл code.php, который будет генерировать число, которое пользователю нужно будет ввести в поле. Вставьте в него следующий код:

<?
Header("Pragma: no-cache");
$fp = fopen('code.txt','w');
fclose($fp);
$fp = fopen('code.txt','a');
$code="";
for ($i=1;$i<5;$i++)

fwrite($fp,mt_rand(0,9));
fclose($fp);
$fp = fopen('code.txt','r');
$code = fread($fp,4);
fclose($fp);
$pic = ImageCreateFromgif(dirname(__FILE__) . "/antispam.gif");
Header("Content-type: image/gif");
$color=ImageColorAllocate($pic, 0, 0, 0);
ImageString($pic,5,70,60,$code,$color);

Imagegif($pic);
ImageDestroy($pic);
?>

Затем создайте файл code.txt, в который будет записываться и читаться код. В него ничего не надо вставлять. Когда загрузите его к себе на сервер, поставьте ему CHMOD 777 или 0777.
После этого нам нужна форма, из которой будет происходить отправка письма на e-mail, для этого создайте файл, например: antispam2.php и вставьте в него следующий код:

<?
Header("Pragma: no-cache");
echo "<form action=\"antispam2.php\" method=\"POST\">";

echo "<textarea rows=4 cols=40 name=message>Текст письма</textarea>";
echo "<p><img src=\"code.php\"><p>";
echo "Введите цифры с картинки: <input type=text value='0000? name=code><p>";

echo '<p><input type=\'submit\'>';
echo '</form>';
if (isset($_POST['message']))
{
    $fp = fopen('code.txt','r');
    $realcode = fread($fp,4);

    fclose($fp);
    if ($_POST['code'] === $realcode)
    {
        mail('admin@yandex.ru','yandex.ru',$_POST['message']);
        echo "Ваше письмо было успешно отправлено";
        $fp = fopen('code.txt','w');
        for ($i=1;$i<5;$i++)
        fwrite($fp,mt_rand(0,9));

        fclose($fp);
    }
    else
        echo "<br>Неверный код!<br>";
}
?>

Осталось только вставить изображение, на котором будет выводиться код. Я взял вот такое изображение (первое попавшиеся мне под руку), взять его можно здесь. Изображение должно быть с расширением gif, если вам нужно другое расширение или название, вам нужно открыть файл code.php и найти там строчку

$pic = ImageCreateFromgif("antispam.gif");
Header("Content-type: image/gif");

И соответственно поменять на нужные вам параметры:
antispam.gif - название файла,
image/gif - поменяйте только второе значение.
Не забудьте картинке тоже поставить CHMOD 777 или 0777.

В этом примере вместо gif-файла у меня png-файл:

$pic = ImageCreateFromPNG("image.png");
Header("Content-type: image/png");

Вас заинтересует:


.