Генератор форм

Для веб-мастера

Реклама

Комментарии к статье:
Создаем простую капчу для защиты формы обратной связи

Дата: 16 мая 2011 Просмотры 91953 Комментарии 47

    Получать новые материалы этого сайта на свой email адрес?

    Отправлять мне комментарии по эл. почте?

Лена
Лена 23 мая 2011 | 14:59
-1
Здравствуйте!
Вроде бы сделала все по инструкции - а картинки не выводятся :(
Положила их в папку img - не выводятся; без папки, рядом с остальными файлами - не выводятся:(
Что делать?
Шамшур Иван
Шамшур Иван 23 мая 2011 | 15:02
-1
По умолчанию, картинки надо хранить в папке images. Но вы можете это изменить в файле
есть строка
public $imgDir = 'images';
Вот ее и надо изменить!
Лена
Лена 23 мая 2011 | 15:21
-1
Переименовала папку в images - картинки не появились :(
А куда надо было подставить три метода - __construct(), draw() и getKeyString() ? Я их поставила в captcha.class.php друг за дружкой - как-то не очень понятно было куда конкретно ...
Шамшур Иван
Шамшур Иван 23 мая 2011 | 15:55
-1
Внизу статьи добавил ссылку на исходники
Лена
Лена 23 мая 2011 | 17:29
-1
Спасибо!
Оказалось, что все 3 метода поставила правильно :)
Но картинки ..... так и не открываются.
Почитала комменты на прежние статьи - попробовала поставить на страничку с формой расширение PHP - картинки появились :) но на страничке выскочило предупреждение: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/IATI/etrusova/public_html/php/contact_form.php:13) in /home/IATI/etrusova/public_html/php/captcha.php on line 3
Т.е. конфликтуют <?php require 'captcha.php';?> , которая должна выводить картинки в форме ввода и session_start(); в captcha.php
- даааа, может не приставать уже со своими неполучалостями ...
Шамшур Иван
Шамшур Иван 24 мая 2011 | 12:59
-1
Хм... Старнно! У меня все работает. Видимо что-то с настройками сервера. Eще как вариант попробуйте изменить кодировку файлов на ASCII
Юлия
Юлия 22 июня 2011 | 09:40
-1
добрый день! у меня такая же проблема, как у Лены. подскажите, пожалуйста, что можно сделать. изменение кодировки не помогает. спасибо
Шамшур Иван
Шамшур Иван 22 июня 2011 | 10:13
-1
А сессия у Вас запущена на странице, где размещена капча?
Frodox
Frodox 11 июля 2011 | 18:05
-1
Странные вы какие-то..)
Вам же всё написали:
Не могу запустить сессию, т.к. заголовки (header) уже отправлены.
Дело в том, что сессию нужно начинать до любого вывода текста в окно браузера, проверьте, что у Вас всё именно так))
Удачи ;-)
maaxim
maaxim 10 октября 2011 | 23:08
0
В файле captcha.php нужно закомментировать 1-ю строчку, в которой стартуется сессия, а сессию стартануть в том файле, где находится сама форма, которая вызывает капчу. Можно сразу, в первой строчке. Но обязательно перед тегом <head>.
Спасибо за статью. Прикольная капча, а главное, не нужно подключать в пхп графические модули.
Веди
Веди 26 ноября 2012 | 01:36
-1
я вообще перед <!DOCTYPE... стартовал сессию, однако после отправки формы, выдаёт ошибку:

Parse error: syntax error, unexpected T_STRING in Y:\home\site\www\send.php on line 10

в чём может быть дело?
Веди
Веди 26 ноября 2012 | 02:01
-1
всё решил, ступил просто надо было echo в сообщения добавить
Маркус
Маркус 7 июня 2011 | 23:58
-1
Здравствуйте, Иван!
Скажите, а чем плоха предыдущая версия? С этой у меня какие-то проблемы...- тоже не особо ставиться...
Шамшур Иван
Шамшур Иван 8 июня 2011 | 00:23
0
Тем, что защитный код передавался вместе с формой в скрытом поле, что очень сильно снижало эффективность этой капчи против СПАМ-роботов. А в чем заключаются проблемы? В файле где подключается капча сессия запущена? Там есть строка session_start();
Маркус
Маркус 8 июня 2011 | 00:42
-1
Да, все запущено... только картинка не появляется...((
Может проблема в том, что у меня сайт алиасом подключен?
Шамшур Иван
Шамшур Иван 8 июня 2011 | 10:23
-1
Да нет, дело не в этом. А путь к картинкам правильно прописан?
Маркус
Маркус 8 июня 2011 | 00:50
-1
хотя, сейчас на основном домене попробовал, вроде все работает, а картинки нет..?
Alex
Alex 5 июля 2011 | 13:54
-1
Отличный скрипт! Встал почти без напильника! =))) Если не отображаются картинки, просто гляньте на исходный код, там видно откуда скрипт пытается их тянуть и поправьте public $imgDir = 'images'; соответственно.
business success
business success 8 августа 2011 | 23:55
-1
Спасибо! Хотел узнать и узнал =)
Дмитрий
Дмитрий 8 сентября 2011 | 05:24
-1
Да, работает.
Большое спасибо!
Антон
Антон 7 декабря 2017 | 18:48
-1
Проверка почему-то не работает
fStrange
fStrange 11 января 2012 | 08:12
-1
Простовата. Разве что в качестве урока. Простейший бот с распознаванием по маске разберется. Каптча в форме для комментариев на порядок сложнее. Лучше использовать внешнее решение
Олекса
Олекса 23 февраля 2012 | 00:53
-1
Здравствуйте!
Пытаюсь поставить Вашу форму на свой сайт. В opere и IE все нормально. Но Firefox не видит картинки. Причина - в адресе, по которому браузер ищет их, появляется обратный слеш. Как это можно исправить?
EGORR
EGORR 3 марта 2012 | 13:43
-1
public function getKeyString(){
return implode($this->keystring);
}

Лучше так

public function getKeyString()
{
return implode( '\n', $this->keystring );
}

Mark
Mark 17 мая 2012 | 22:17
0
Вот тут по проще капча с исходниками и фоновым рисунком:
_http://lifeexample.ru/php-primeryi-skriptov/kapcha-na-php.html
Павел
Павел 3 июня 2012 | 08:13
-1
Спасибо за данную капчу-всё работает. НО в есть одна ОШИБКА о которой все тут говорят. Отвечаю на вопрос: почему не отображаются картинки? Дело в том что при формировании пути к картинки при помощи функции draw() ставится слеш такой "\", а надо "/ ". Поэтому в public $imgDir = 'images' делаем так: public $imgDir = 'images/', а в строчке $img .= '<img src="'.$this->imgDir.DIRECTORY_SEPARATOR.$keystring.'.gif" border="0">'; оставляем следующее: $img .= '<img src="'.$this->imgDir.$keystring.'.gif" border="0">'; Всё, наслаждаемся стабильной работой во всех браузерах!!!
Шамшур Иван
Шамшур Иван 3 июня 2012 | 23:20
-1
Совершенно верно! Глупая ошибка. В windows системах DIRECTORY_SEPARATOR равен обратному слешу, т.е. \, а не /. Спасибо, что поправили. Исходники заменил.
Игорь
Игорь 8 июня 2012 | 15:38
-1
Здравствуйте!
У меня тоже возникла ошибка, описанная Леной, но я решил ее с помощью метода, предложенного maaxim, а именно: закомментировал 1-ю строчку в файле capcha.php, а сессию стартанул в том же файле, где находится форма. Теперь ошибок не возникает. Но при попытке отправить сообщение, обработчик выдает "Вы неправильно ввели сумму чисел с картинки". И сообщение не отправляется.
Подскажите, пожалуйста, полный код обработчика, с учетом последних доработок.
Соня
Соня 25 июня 2012 | 20:12
0
я добавила session_start(); еще и в обработчик, все заработало. была та же проблема
Евгений
Евгений 17 июня 2012 | 17:09
-1
Здравствуйте!

У меня почему то не работает условие.

if (isset($_POST['pr']) && $_POST['pr'] == $_SESSION['keystring'])

Всегда FASLE, выходит сообщение об ошибке. Сразу после загрузки страницы.

<?php session_start();?> Стоит вначале документа.
Марина
Марина 2 июля 2012 | 00:42
-1
У меня тоже проблема с проверкой капчи, выдаёт, что код не верный. Где может быть проблема?
Шамшур Иван
Шамшур Иван 2 июля 2012 | 12:39
-1
Проверьте, у Вас в сессию вообще записывается код проверки или нет?
Дмитрий
Дмитрий 23 июля 2012 | 14:14
-1
Подскажите в какое место нужно прописать:
if (isset($_POST['pr']) && $_POST['pr'] == $_SESSION['keystring']){
Проверка прошла успешно
}
else{
Вывод сообщения об ошибке.
Шамшур Иван
Шамшур Иван 23 июля 2012 | 15:47
-1
В то место, где необходимо делать проверку. Например, в обработчик формы.
Дмитрий
Дмитрий 23 июля 2012 | 16:19
-1
А куда подставить в моём случае?

<title>Сообщение отправлено</title>
<?php
/* Проверяем существуют ли переменные, которые передала форма обратной связи.
Если не существуют, то мы их создаем.
Если форма передала пустые значения мы их удаляем */
if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}}
if (isset($_POST['email'])) {$email = $_POST['email']; if ($email == '') {unset($email);}}
if (isset($_POST['mess'])) {$mess = $_POST['mess']; if ($mess == '') {unset($mess);}}
if (isset($_POST['pr'])){$pr = $_POST['pr']; if ($pr == '') {unset($pr);}}
if (isset($_POST['captcha'])){$captcha = $_POST['captcha'];}



/* Проверяем заполнены ли все поля */
if (isset($name) && isset($email) && isset($mess) && isset($pr))
{

/* Убираем все лишние пробелы, а также преобразуем все теги HTML в символы*/
$name = htmlspecialchars(trim($name));
$email = htmlspecialchars(trim($email));
$mess = htmlspecialchars(trim($mess));

/* Проверяем правильность ввода email-адреса */
if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
{
echo "<p>Неправильный формат e-mail адреса!</p>";
echo "<p><a href=http://www.real-china.ru/contacts.html>Вернуться и правильно заполнить форму.</a></p>";
exit;
}

/* Проверяем правильность ввода капчи */
if ($captcha == $pr)
{
/* Формируем сообщение */
$address = "real-china@mail.ru";
$subject = iconv("windows-1251","UTF-8","Обратная связь");
$message = "Имя: $name\r\n";
$message .= "E-mail: $email\r\n";
$message .= "Сообщение: $mess\r\n";
$headers = 'From: Real Китай <real-china@mail.ru>' . "\r\n";

/* Отправка сообщения */
$verify = mail ($address,$subject,$message,$headers);
if ($verify == 'true')

{
echo header("Location: http://www.real-china.ru/contacts_back.html");
}
else
{
echo "<p>Сообщение не отправлено!</p>";
echo "<p><a href=http://www.real-china.ru/contacts.html>Вернуться и правильно заполнить форму.</a></p>";
exit;
}
}
else
{
echo "<p>Вы не правильно число с картинки!</p>";
echo "<p><a href=http://www.real-china.ru/contacts.html>Вернуться и правильно заполнить форму.</a></p>";
exit;
}


}
else
{
echo "<p>Вы заполнили не все поля!</p>";
echo "<a href=http://www.real-china.ru/contacts.html>Вернуться и правильно заполнить форму.</a>";
exit;
}
?>
Шамшур Иван
Шамшур Иван 23 июля 2012 | 18:14
-1
Вот сюда:
/* Проверяем правильность ввода капчи */
if ($captcha == $pr){}

А вообще рекомендую ознакомиться вот с этой статьей "Стильная форма обратной связи для сайта с капчей на PHP"
Дмитрий
Дмитрий 24 июля 2012 | 08:34
-1
Вставил, но теперь каждый раз пишет "Вы не правильно ввели число с картинки". Что не так подскажите?
<title>Сообщение отправлено</title>
<?php
/* Проверяем существуют ли переменные, которые передала форма обратной связи.
Если не существуют, то мы их создаем.
Если форма передала пустые значения мы их удаляем */
if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}}
if (isset($_POST['email'])) {$email = $_POST['email']; if ($email == '') {unset($email);}}
if (isset($_POST['mess'])) {$mess = $_POST['mess']; if ($mess == '') {unset($mess);}}
if (isset($_POST['pr'])){$pr = $_POST['pr']; if ($pr == '') {unset($pr);}}
if (isset($_POST['captcha'])){$captcha = $_POST['captcha'];}



/* Проверяем заполнены ли все поля */
if (isset($name) && isset($email) && isset($mess) && isset($pr))
{

/* Убираем все лишние пробелы, а также преобразуем все теги HTML в символы*/
$name = htmlspecialchars(trim($name));
$email = htmlspecialchars(trim($email));
$mess = htmlspecialchars(trim($mess));

/* Проверяем правильность ввода email-адреса */
if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
{
echo "<p>Неправильный формат e-mail адреса!</p>";
echo "<p><a href=http://www.real-china.ru/contacts.html>Вернуться и правильно заполнить форму.</a></p>";
exit;
}

/* Проверяем правильность ввода капчи */
if (isset($_POST['pr']) && $_POST['pr'] == $_SESSION['keystring'])
{
/* Формируем сообщение */
$address = "real-china@mail.ru";
$subject = iconv("windows-1251","UTF-8","Обратная связь");
$message = "Имя: $name\r\n";
$message .= "E-mail: $email\r\n";
$message .= "Сообщение: $mess\r\n";
$headers = 'From: Real Китай <real-china@mail.ru>' . "\r\n";

/* Отправка сообщения */
$verify = mail ($address,$subject,$message,$headers);
if ($verify == 'true')

{
echo header("Location: http://www.real-china.ru/contacts_back.html");
}
else
{
echo "<p>Сообщение не отправлено!</p>";
echo "<p><a href=http://www.real-china.ru/contacts.html>Вернуться и правильно заполнить форму.</a></p>";
exit;
}
}
else
{
echo "<p>Вы не правильно число с картинки!</p>";
echo "<p><a href=http://www.real-china.ru/contacts.html>Вернуться и правильно заполнить форму.</a></p>";
exit;
}


}
else
{
echo "<p>Вы заполнили не все поля!</p>";
echo "<a href=http://www.real-china.ru/contacts.html>Вернуться и правильно заполнить форму.</a>";
exit;
}
?>
Андрей Айдар
Андрей Айдар 25 января 2013 | 18:04
-1
Есть ещё интересный вариант реализации капчи для чего угодно вот пример можно посмотреть Как создать капчу на сайте
Антон
Антон 8 февраля 2013 | 14:31
-1
Добрый день! Такая проблема, при отправке формы выдает Warning: mail(): SMTP server response: 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=6596 gq9si11281026qab.41 - gsmtp in E:\Rooms\u000000\мой сайт.ru\www\options.php on line 38 Сообщение не отправлено!
Смысл в том что такого емейл как мой не существует и т.д., хотя мыло активное мое в чем может быть причина?
Chely
Chely 30 марта 2013 | 16:06
-1
в условии вот эту шнягу со спанами if (<span data-scayt_word="isset" data-scaytid="373">isset</span>($_POST['pr']) && $_POST['pr'] == $_SESSION['<span data-scayt_word="keystring" data-scaytid="362">keystring</span>'])
надо убрать и оставить нормальный код

(isset($_POST['pr'])) && ($_POST['pr'] == $_SESSION['keystring'])
WPixel
WPixel 15 апреля 2013 | 16:14
-1
Иван здраствуйте! Реально к этой капче приделать кнопку обновления изображения? Если да то как?
dadzen
dadzen 7 июня 2013 | 17:35
0
Да, ни хрена она не работает. Картинка не выводиться, пути проставлены верно. Видимо проблема с сессией. В общем помучился пару часиков, стер и забыл. Нашел способ проще и 100% рабочий. Автору большой минус.
Василий
Василий 4 ноября 2013 | 00:24
-1
Здравствуйте, стояла у меня на сайте точно такая же капча довольно длительное время. Но вот уже 2 дня мой почтовый ящик разрывается от спама - эта капча больше не помогает! Подскажите или дайте пожалуйста ссылку на статью с созданием хорошей капчи и подключением ее к уже готовой форме. Спасибо.
Антон
Антон 23 ноября 2013 | 19:43
-1
Единственная адекватная и нормальная статья о том, как создать капчу. Всё просто и понятно. Спасибо!
Юлия
Юлия 3 февраля 2014 | 17:12
-1
Здравствуйте, спасибо за материал. Сначала капчу видела, а потом она пропала... Видимо, что-то я нечаянно в своем кодее поменяла... Но до сих пор не получается у меня, чтобы движок работал с моим дизайном обратной формы. Все проверила... Помогите, пожалуйста! Заранее благодарна!
Константин
Константин 30 сентября 2014 | 16:24
-1
Здравствуйте, Иван!
У меня вот какая незадача. Мне отправляется письмо в любом случае: хоть правильные я цифры ввел, хоть неправильные! Что посоветуете?
Константин
Константин 30 сентября 2014 | 16:25
0
сайт www.consulting-msk.ru

Простая CRM