BloGGood.ru

Блог Костаневича Степана

До Нового Года осталось:

Блог на разные темы, seo-оптимизация, раскрутка сайта, создание сайта, вкусные эффекты для сайта и многое другое…

Главная » Php приемчики » Форма обратной связи с капчей на PHP

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

2016-12-19 / Вр:23:25 / просмотров: 418

Не думал писать на эту тему… Эта статья создана по просьбе одного из читателей BlogGood.ru, который оставил комментарий с просьбой написать статью о том, как на форму обратной связи установить капчу.
В статье найдете полностью готовый код , который вы сможете скачать.

Капча – это хороший способ защитить форму обратной связи, регистрации, входа в админку или в кабинет.
Эту капчу, которую я предлагаю, можно привязать к любой форме.
Вот так будет выглядеть капча и форма обратной связи:

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

Форма обратной связи не отправится, пока не будет правильно введена капча (цифры на картинке).
Для реализации капчи вам нужно будет подготовить 10 изображений с цифрами 0-9 (либо скачайте их тут).

Код капчи (captcha)
Создайте файл с названием «captcha.php» и вставьте в него вот такой код:

<p>Введите числа с картинки: <br>
<?php
$i=1;
do
{
$num[$i] = mt_rand(0,9);
echo "<img src='images/".$num[$i].".gif' border='0' align='bottom' vspace='5px'>";
$i++;
}
while ($i<6);
$captcha = $num[1].$num[2].$num[3].$num[4].$num[5];
?>
<input name="captcha" type="hidden" value="<?php echo $captcha ;?>">

Для генерации случайных чисел здесь используется php функция «mt_rand()».
Генерирует в диапазоне от 0 до 9.
После того, как сгенерировалось число, оно записывается в массив «$num()». Потом выводится соответствующее изображение и так 5 раз, благодаря циклу «while». Вот так и получаем на экран 5 цифр.
Все эти 5 цифр записываются в переменную «$captcha».
Переменная «$captcha» будет передаваться обработчику формы для проверки на соответствие цифр, что были введены в поле.

Обработчик формы и капчи (проверка и отправка данных)
Создайте файл «form-handler.php» и вставьте вот такой код:

<?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['message'])) {$message = $_POST['message']; if ($message == '') {unset($message);}}
if (isset($_POST['captcha_validation'])){$captcha_validation = $_POST['captcha_validation']; if ($captcha_validation == '') {unset($captcha_validation);}}
if (isset($_POST['captcha'])){$captcha = $_POST['captcha'];}

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

/* Проверяем правильность ввода капчи */
if ($captcha == $captcha_validation)
{

/* если капча верна, отправляем сообщение */
/* Настройки сообщения */
$address = "test@test";
$sub = "Сообщение с сайта BlogGood.ru!!!";
$mes = "Имя: $name \nE-mail: $email \nСодержание письма: \n$message";

/* Уведомление об отправке письма */
$verify = mail ($address,$sub,$mes,"Content-type:text/plain; charset = windows-1251\r\nFrom:$email");
if ($verify == 'true')
{
echo "Сообщение отправлено!";
}
else
{
echo "Сообщение не отправлено!";
}
}
else
{
echo "Вы неправильно ввели цифры с картинки";
}

}
else
{
echo "Вы заполнили не все поля!";
}
?>

В этом коде все, что касается обработки данных, проверки полей, ввода капчи и отправки самого письма.
В коде есть комментарий, где какая часть за что отвечает.
Вам только нужно поменять на свое усмотрение содержание письма и заменить обязательно мой email (test@test) на собственный (строка №21):

/* Настройки сообщения */
$address = "test@test";
$sub = "Сообщение с сайта BlogGood.ru!!!";
$mes = "Имя: $name \nE-mail: $email \nСодержание письма: \n$message";

Теперь сама форма.

Форма обратной связи с капчей
Вставьте вот этот код в то место, где нужно, чтобы выводилась форма:

<form action="form-handler.php" method="post">
<p>Введите имя:<br>
<input type="text" name="name"></p>
<p>Введите email:<br>
<input type="text" name="email"></p>
<p>Введите сообщение:<br>
<textarea name="message" cols="40" rows="5" ></textarea>
</p>
<!-- вывод капчи из файла captcha.php -->
<?php require ("captcha.php"); ?>

<input name="captcha_validation" style=" margin-bottom:11px" type="text" size="6" maxlength="5"></p>
<p><input type="submit" class="bt1" value="Отправить сообщение"></p>
</form>

Внимание: файлы «form-handler.php» и «captcha.php» должны находиться в одной папке с формой или же, если так не получается, не забываем менять путь к обработчику «form-handler.php»

<form action="form-handler.php" method="post">

И к капче

<?php require ("captcha.php"); ?>

Как правильно указать путь к файлу, читайте вот тут.

Кстати, если к форме добавить класс, то можно при помощи CSS добавить к капче различные эффекты, например, искажение (см. тут):

echo "<img src='images/".$num[$i].".gif' border='0' align='bottom' vspace='5px' class='captcha'>";

Файл «captcha.php»

Проверим работу капчи?
Да, проверим, чтобы не было сомнений на счет работоспособности кода.
Вначале я введу в капчу неправильные цифры.

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

Если нажать «Отправить сообщение», то вы увидите вот это уведомление:

Вы неправильно ввели цифры с картинки

Капча не дала нам отправить сообщение, так как была допущена ошибка при вводе цифр.
Пробуем ввести правильно капчу:

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

Если нажать «Отправить сообщение», то вы увидите вот это уведомление:

Сообщение отправлено!

Проверяем почту:

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

Ну, что вам сказать, все работает! Ура-а-а-а! :!:
Пользуйтесь!

Ах да, чуть бы не забыл – вы можете скачать исходник.

[скачать исходник]

Понравился пост? Помоги другим узнать об этой статье, кликни на кнопку социальных сетей ↓↓↓

Получай обновления блога!!! Подпишись:

Популярные статьи:

12 Ответов на комментарий - Форма обратной связи с капчей на PHP

  1. Александр

    Как всегда спасибо Степан за хороший и Нужный пост ! :arrow:

    Ответить

    Степан => автор блога

    Степан => автор блога отвечает:

    Пожалуйста, Александр!

    Ответить

  2. Иван

    наверное, хорошая форма, но фокус не удался. для новичков в php желательно разъяснять более подробно что и куда необходимо записывать. согласитесь, что php-монстры не будут искать такую информацию.

    Ответить

    Степан => автор блога

    Степан => автор блога отвечает:

    Я думаю, новичков в php нужно не с капчи начинать, а с основы PHP.
    Основные разъяснение по коду в статье есть.

    Ответить

    Иван отвечает:

    думаю, у меня не получается из-за неправильно прописанных путей к файлам. файлы captcha.php и form-handler.php я создал в папке с темой. там же разместил папку images с изображениями цифр для капчи. перепробовал все варианты с указанием пути к файлам – бесполезно. не могли бы вы показать как должен выглядеть код

     <form action="form-handler.php" method="post"> 

    и

     echo "<img src='images/".$num[$i].".gif' border='0' align='bottom' vspace='5px'>"; 

    в данном случае?

    Ответить

    Степан => автор блога

    Степан => автор блога отвечает:

    Попробуйте вот так:

    <form action="<?php bloginfo('template_url'); ?>/form-handler.php" method="post">

    и

    echo "<img src='". bloginfo('template_url') ."/images/".$num[$i].".gif' border='0' align='bottom' vspace='5px'>";

    Если Вы пользуетесь вордпресс, тогда есть готовый плагин:
    http://bloggood.ru/wordpress/zashhita-adminki-wordpress-s-pomoshhyu-kapchi.html/

    Ответить

    иван отвечает:

    подскажите, пожалуйста, как еще должна выглядеть строчка

     <!-- вывод капчи из файла captcha.php -->
    <?php require ("captcha.php"); ?> 

    ? файл captcha.php находится в папке с темойю капча никак не выводится :sad:

    Степан => автор блога

    Степан => автор блога отвечает:

    Попробуйте вот так:

    <!-- вывод капчи из файла captcha.php -->
    <?php require ("wp-content/themes/НАЗВАНИЕ_ТЕМЫ/captcha.php"); ?>
    

    в коде “НАЗВАНИЕ_ТЕМЫ” – нужно поменять на название вашей темы (название папки)

    иван отвечает:

    спасибо за помощь, но форма так и не заработала. все пути к файлам прописал, перепроверил 100 раз – не работает :sad: . у меня версия php-7.0., сайт на wp. может ли быть причина в том что версия php-7? просто у меня и раньше была реализована форма обратной связи без плагина, но когда произвел переход с 5.3 на 7.0, то форма обратной связи тоже работать перестала. однако, плагин ФОС отрабатывал нормально. просто хотел обойтись на этот раз без плагина, но видимо не судьба. :???:

    Степан => автор блога

    Степан => автор блога отвечает:

    Это нужно мне садиться и смотреть в чем проблема. Там может быть не значительная ошибка и все, форма работать на сайте не будет.

  3. Николай

    Вот какую сделал я:

    Ответить

    Степан => автор блога

    Степан => автор блога отвечает:

    Прикольно!
    Расскажете, Николай, как сделали или это много писать?

    Ответить

Добавить комментарий

;-) :| :x :twisted: :smokes: :smile: :shock: :sad: :rose: :roll: :razz: :pop-corne: :oops: :o :mrgreen: :lol: :idea: :grin: :gazeta: :evil: :cry: :cool: :coffe: :arrow: :???: :?: :!:

Чтобы добавить в комментарий код HTML, PHP, CSS, JavaScript, нужно сделать так: [code] ваш код [/code]

Subscribe without commenting

Метки: , ,

Мои цели на 2017 год:

1). Закончить тему «Bootstrap»

2). Закончить тему «Все про PHP и MySQL»

3). Довести количество статей до 750

4). Создать портфолио и мини интернет-магазин шаблонов

5). Создать книгу

6). Довести количество статей до 800

7). Добиться посещаемости 3000 человек/сутки

8). Увеличить число подписчиков до 250

Статистика по блогу

Количество записей на блоге: 704
Количество страниц на блоге: 20
Количество рубрик на блоге: 27
Количество меток на блоге: 71
Количество комментариев на блоге: 3821