<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру 2.0

PHP и MySQL с Нуля до Гуру 2.0

Данный курс научит Вас программировать на самом популярном Web-языке в мире - PHP. Курс состоит из 11 разделов, в которых с нуля рассказывается и показывается процесс написания различных скриптов на PHP.

В курсе Вы узнаете всю необходимую теоретическую часть, а также увидите массу практических примеров, в том числе, и из моей практики.

Почти к каждому уроку идут упражнения.

Просмотрев данный курс, Вы сможете создавать абсолютно любые PHP-сайты любой сложности.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Капча с обновлением

Капча с обновлением

Капча служит для защиты от роботов, которые в автоматическом режиме спамят сайты. В первую очередь, это относится к сайтам на готовых движках. К сожалению, их даже капчи не спасают (если в сети оказалось описание "дыры" в движке). Но если Ваш сайт уже достаточно популярен, то обязательно найдутся люди, желающие пропиариться за Ваш счёт. Они напишут скрипт специально под Ваш движок и заспамят Ваш сайт всё равно. Для защиты от этого необходимо ставить капчи. Однако, не всегда капчи генерируются хорошо, ввиду чего даже человек не может её расшифровать. В связи с этим, я рекомендую делать капчу с обновлением. То есть если человек не может её расшифровать, то он жмёт кнопку "Обновить", и проверочный код становится другим. Вот именно реализацию этого мы и разберём в данной статье.

Для начала разберём код генерации капчи. У нас есть шрифт по такому пути: "fonts/verdana.ttf". Теперь создадим файл captcha.php со следующим кодом:

<?php
  session_start(); // Начинаем сессию
  $string = "";
  for ($i = 0; $i < 5; $i++)
    $string .= chr(rand(97, 122)); // Генерация случайной строки
  $_SESSION['rand_code'] = $string; // Записываем код в сессию
  $dir = "fonts/"; // Путь к папке со шрифтом
  $image = imagecreatetruecolor(170, 60); // Создаём изображение
  $color = imagecolorallocate($image, 200, 100, 90); // Создаём цвет текста
  $white = imagecolorallocate($image, 255, 255, 255); // Создаём цвет фона
  imagefilledrectangle($image, 0, 0, 170, 60, $white); // Закрашиваем изображение
  imagettftext ($image, 30, 0, 10, 40, $color, $dir."verdana.ttf", $_SESSION['rand_code']); // Рисуем текст на капче
  header("Content-type: image/png"); // Отправляем заголовок с типом содержимого
  imagepng($image); // Выводим картинку
?>

По сути, данный скрипт включается в себя 3 стадии:

  1. Генерацию случайной строки и запись её в сессию.
  2. Рисование картинки.
  3. Отправка заголовка и вывод картинки.

Все эти 3 пункта могут быть по-разному реализованы в разных капчах, однако, все 3 стадии всегда присутствуют. Можете взять какой-нибудь готовый код с генерацией сложной, но в то же время читабельной капчи. В данном примере, рассмотрен лишь простейший вариант.

Теперь займёмся выводом капчи. Делается это очень просто:

<img src="captcha.php" alt="" />

И теперь займёмся кнопкой "Обновить". Фактически, всё, что нам нужно - это обновлять src у тега img с капчей. Но постоянно обновлять src на "captcha.php" результата не получится, поскольку браузер не будет обновлять ничего (он же не знает, что картинка по тому же адресу уже будет другой). Поэтому нужно обновлять с каким-нибудь случайным GET-параметром.

Вот как это делается:

<img src="captcha.php" alt="" id="captcha" />
<span style="border-bottom: 1px dashed #f00; color: #f00; cursor: pointer;" onclick="document.getElementById('captcha').src = 'captcha.php?' + Math.random()">Обновить</span>

Как видите, при клике по ссылке "Обновить" у нас изменяется атрибут src у тега img с капчей. Плюс src каждый раз разный. Это никакого влияния на саму капчу не оказывает (если мы того не захотим, конечно, обработав GET-параметры в captcha.php), однако, для браузера это новая картинка, поэтому он её заново подгружает. В captcha.php создаётся новый код, он заново записывается в сессию, рисуется заново картинка и после возвращается в тег img.

Вот таким образом делается капча с обновлением без перезагрузки самой страницы.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (3):

lev_100rus lev_100rus 28.09.2013 11:26:57

Исправляйте "// Записаем код в сессию "

Ответить

Admin Admin 29.09.2013 22:58:05

Спасибо, исправил!

Ответить

feya feya 07.10.2013 15:01:17

Спасибо Вам за статью! Очень пригодилась.

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.