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


-
Комментарии (47)
- Сайт
Facebook
Вроде бы сделала все по инструкции - а картинки не выводятся :(
Положила их в папку img - не выводятся; без папки, рядом с остальными файлами - не выводятся:(
Что делать?
есть строка
public $imgDir = 'images';
Вот ее и надо изменить!
А куда надо было подставить три метода - __construct(), draw() и getKeyString() ? Я их поставила в captcha.class.php друг за дружкой - как-то не очень понятно было куда конкретно ...
Оказалось, что все 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
- даааа, может не приставать уже со своими неполучалостями ...
Вам же всё написали:
Не могу запустить сессию, т.к. заголовки (header) уже отправлены.
Дело в том, что сессию нужно начинать до любого вывода текста в окно браузера, проверьте, что у Вас всё именно так))
Удачи ;-)
Спасибо за статью. Прикольная капча, а главное, не нужно подключать в пхп графические модули.
Parse error: syntax error, unexpected T_STRING in Y:\home\site\www\send.php on line 10
в чём может быть дело?
Скажите, а чем плоха предыдущая версия? С этой у меня какие-то проблемы...- тоже не особо ставиться...
Может проблема в том, что у меня сайт алиасом подключен?
Большое спасибо!
Пытаюсь поставить Вашу форму на свой сайт. В opere и IE все нормально. Но Firefox не видит картинки. Причина - в адресе, по которому браузер ищет их, появляется обратный слеш. Как это можно исправить?
Лучше так
_http://lifeexample.ru/php-primeryi-skriptov/kapcha-na-php.html
У меня тоже возникла ошибка, описанная Леной, но я решил ее с помощью метода, предложенного maaxim, а именно: закомментировал 1-ю строчку в файле capcha.php, а сессию стартанул в том же файле, где находится форма. Теперь ошибок не возникает. Но при попытке отправить сообщение, обработчик выдает "Вы неправильно ввели сумму чисел с картинки". И сообщение не отправляется.
Подскажите, пожалуйста, полный код обработчика, с учетом последних доработок.
У меня почему то не работает условие.
if (isset($_POST['pr']) && $_POST['pr'] == $_SESSION['keystring'])
Всегда FASLE, выходит сообщение об ошибке. Сразу после загрузки страницы.
<?php session_start();?> Стоит вначале документа.
if (isset($_POST['pr']) && $_POST['pr'] == $_SESSION['keystring']){
Проверка прошла успешно
}
else{
Вывод сообщения об ошибке.
<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;
}
?>
/* Проверяем правильность ввода капчи */
if ($captcha == $pr){}
А вообще рекомендую ознакомиться вот с этой статьей "Стильная форма обратной связи для сайта с капчей на PHP"
<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;
}
?>
Смысл в том что такого емейл как мой не существует и т.д., хотя мыло активное мое в чем может быть причина?
надо убрать и оставить нормальный код
(isset($_POST['pr'])) && ($_POST['pr'] == $_SESSION['keystring'])
У меня вот какая незадача. Мне отправляется письмо в любом случае: хоть правильные я цифры ввел, хоть неправильные! Что посоветуете?