Сайтостроительство (8)

PHP-кодинг (25)

Веб-дизайн (9)

DHTML/JavaScript (8)

Подкастинг (1)

Безопасность в PHP (3)

Секретный раздел

Карта блога

Регистрация пользователей на PHP+MySQL

Скрипт гостевой книги с красивым дизайном

Галерея на jQuery

Простая система регистрации пользователей на сессиях

Форма обратной связи с защитой типа капча

Галерея на php+jquery

Шаблоны запросов и placeholders

Быстрое перенаправление средствами php

Flash плеер для вашего сайта

Сортировка столбцов в таблице на php+mysql

Шаблоны запросов и placeholders

Форма обратной связи с защитой типа капча

История развития Всемирной паутины

Сохраняем IP-адрес посетителя, оставившего комментарий

Природа красок в фотошопе

За весь период

За 2010-11

За 2009-06

За 2009-05

За 2009-04

За 2009-03

За 2009-02

За 2008-08

Бегун контекстная реклама

Ruseller видеоуроки

Letitbit файлообменник

Tak.Ru $$$ вебмастеру

WMmail почтовые рассылки

WMlink продажа трафика

Sape.Ru продажа ссылок

Главная » PHP-кодинг

Форма обратной связи с защитой типа капча

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

А теперь к реализации. Создайте на сервере отдельную папку. Назовите её к примеру feedback. В ней создайте 2 папки: kcaptcha (защита от ботов и спама) и style (стили CSS, необязательно) и 2 файла: config.php (конфигурационный), index.php (форма+обработчик). Рассмотрим лишь как реализованы 2 файла config.php и index.php, поскольку скрипт капчи(kcaptcha) является свободнораспространяемым сторонним ПО, реализован профессиональными программистами и как я уже сказал независит от самой формы обратной связи(обработчика) и может быть подключен и настроен для любого другого скрипта формы обратной связи.
Исходный код файла config.php (вывод предупреждающих сообщений). Настройте его по своему вкусу:


<?
$mailto = ""; //тут запишите свой емайл-адрес
$charset = "windows-1251"; //кодировка символов
$subject = $_POST['posRegard'];
$content = "text/plain"; //тип данных поля "content"
$message = $_POST['posText'];
$statusError = "";
$statusSuccess = "";
/*ошибки, выводимые при неправильном вводе или 
отсутствии значения поля*/
$errors_name = 'Введите ваше имя';
$errors_mailfrom = 'Введите E-mail адрес';
$errors_incorrect = 'Заполните правильно E-mail адрес';
$errors_message = 'Наберите текст вашего сообщения';
$errors_subject = 'Введите тему сообщения';
$captcha_error = 'Проверьте правильность ввода 
защитного кода';
$send = 'Ваше сообщение успешно отправлено';
?>

Теперь привожу главный файл скрипта формы обратной связи(index.php), включающий обработчик формы(проверка полей и отправка на емайл) и собственно саму html-форму.


<?
include('kcaptcha/kcaptcha.php'); //подкл. капчу
session_start();  //стартуем сессию
require_once("config.php"); //подкл. конфиг

if ($_POST['act']== "y") //проверка значения скрытого поля
{
    if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] ==  $_POST['keystring'])
    {
        /*проверка полей заполненной формы с выводом предупреждающих сообщений*/
        if (isset($_POST['posName']) && $_POST['posName'] == "")
        {
         $statusError = "$errors_name";
        }
        elseif (isset($_POST['posEmail']) && $_POST['posEmail'] == "")
        {
         $statusError = "$errors_mailfrom";
        }
        elseif(isset($_POST['posEmail']) && !preg_match("/^([a-z,._,0-9])+@([a-z,._,0-9])+(.([a-z])+)+$/", $_POST['posEmail']))
        {
         $statusError = "$errors_incorrect";

         unset($_POST['posEmail']);
        }
        elseif (isset($_POST['posRegard']) && $_POST['posRegard'] == "")
        {
         $statusError = "$errors_subject";
        }
        elseif (isset($_POST['posText']) && $_POST['posText'] == "")
        {
         $statusError = "$errors_message";
        }

elseif (!empty($_POST)) // иначе, если в $_POST не пусто 
{   
 /*формируем заголовки для будующего сообщения в стандартном формате*/
 $headers  = "MIME-Version: 1.0\r\n";
 $headers .= "Content-Type: $content  charset=$charset\r\n";
 $headers .= "Date: ".date("Y-m-d (H:i:s)",time())."\r\n";
 $headers .= "From: \"".$_POST['posName']."\" <".$_POST['posEmail'].">\r\n";
 $headers .= "X-Mailer: My Send E-mail\r\n";

 mail("$mailto","$subject","$message","$headers"); //отправляем письмо

 unset($name, $posText, $mailto, $subject, $posRegard, $message);//удаляем переменные сессии(значения полей формы)

 $statusSuccess = "$send"; //устанавливаем флаг статуса "отправлено"
}

       }else{ //иначе, выводим сообщение об ошибке
             $statusError = "$captcha_error";
             unset($_SESSION['captcha_keystring']);
        }
}
?>
<h2>Форма обратной связи</h2>
<p id="emailSuccess"><strong style="color:green;"><? echo "$statusSuccess" ?></strong></p>
<p id="emailError"><strong style="color:red;"><? echo "$statusError" ?></strong></p>
<div id="recom"></div>

<link href="style/main.css" rel="stylesheet" type="text/css" media='screen,projection' />
<form action="index.php" method="post" id="cForm">
<input type="hidden" name="act" value="y" />
<fieldset>
<label for="posName"><b>Ваше имя:</b></label>
<input class="inputIE" type="text" size="47" name="posName" id="posName" />
<label for="posEmail"><b>Ваш E-mail адрес:</b></label>
<input class="inputIE" type="text" size="47" name="posEmail" id="posEmail" />
<label for="posRegard"><b>Тема сообщения:</b></label>
<input class="inputIE" type="text" size="47" name="posRegard" id="posRegard" />
<label for="posText"><b>Сообщение:</b></label>
<textarea class="inputIE" cols="47" rows="5" name="posText" id="posText"></textarea> <label for="posCaptcha"><b>Текст на изображении</b>:</label>
<img src="kcaptcha?<?php echo session_name()?>=<?php echo session_id()?>"><br>
<input class="inputIE" type="text" size="47" name="keystring" id="keystring" />
<label><input class="inputIE" type="submit" name="selfCC" value=" Отправить " /></label>
</fieldset>
</form>

Принцип действия защиты типа "капча" таков: При каждом последующем вводе генерируется картинка на изображении в виде трудноразличимого текста, нужно в поле рядом ввести текст, который на ней изображен. Если введёте правильно, то поле защитается правильным и обработчик продолжит действие, если введете неверно, то выведется сообщение об ошибке. При этом генерация картинки расчитана на время действия одной сессии(сессионной переменной), которая привязана к значению атрибута "src" тэга <img> в следующем виде:


<img src="kcaptcha?<?php echo session_name()?>=<?php
 echo session_id()?>">

Отсюда видно, что адрес картинки генерируется на основе имени сессионной переменной(session_name()) и её идентификатора(session_id()). Более подробнее о принципе работы сессий в php вы можете прочитать из официальной документации по php или из этого учебника по PHP4.

Внешний вид получившейся формы приведен на рисунке ниже:

Скачать скрипт формы обратной связи с защитой типа капча

Комментировать

Автор: admin | Добавлена: 17.03.2009 | Просмотров: 21565
Рейтинг: 46 | Голосов: 12

Оцените заметку: 1 2 3 4 5

Последние обновления в категории: PHP-кодинг

Комментарии (0)

Комментариев пока нет!

Только авторизованные пользователи могут добавлять комментарии. Зарегистрироваться.

Логин:
Пароль:
 

Регистрация

: Тема:

Заметок в базе: 56
Комментариев: 0
Всего юзеров: 114
Сейчас онлайн: 3