Создание CAPTCHA на PHP

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

Для начала создадим простую форму.

				<form  action="" method="post" name="form">
					<p>Имя:</p>
					<input  name="name" type="text" />
					<p>E-mail:</p>
					<input  name="email" type="text" />
					<input  name="send" type="submit" value="Отправить" />
				</form>
			  

Теперь приступит к созданию защиты от спамеров. CAPTCHA – это изображение состоящее из случайных символов.

Для реализации CAPTCHA нам прейдет на помощь PHP. Давайте создадим сценарий, который будет генерировать случайное изображение.

			    <?php 
					session_start(); 
					header("Expires:  Mon, 26 Jul 2010 05:00:00 GMT");  
					header("Last-Modified:  " . gmdate("D, d M Y H:i:s") . " GMT");  
					header("Cache-Control:  no-store, no-cache, must-revalidate");  
					header("Cache-Control:  post-check=0, pre-check=0", false); 
					header("Pragma:  no-cache");
					function  _generateRandom($length=6) { 
						$_rand_src = array( 
						array(48,57) //цифры
						, array(97,122) //строчные  символы 
						//, array(65,90) случайные  символы 
						); 
						srand ((double) microtime() * 1000000); 
						$random_string = ""; 
						for($i=0;$i<$length;$i++){ 
							$i1=rand(0,sizeof($_rand_src)-1); 
							$random_string .=  chr(rand($_rand_src[$i1][0],$_rand_src[$i1][1])); 
						} 
						return $random_string; 
					}
					$im  = @imagecreatefromjpeg("captcha.jpg");// Любая картинка
					$white =  ImageColorAllocate ($im, 255, 255, 255); 
					$black =  ImageColorAllocate ($im, 0, 0, 0); 
					$rand =  _generateRandom(3); 
					$_SESSION['captcha']  = $rand; 
					ImageString($im,  5, 2, 2, $rand[0]." ".$rand[1]." ".$rand[2]." ",  $black); 
					$rand =  _generateRandom(3); 
					ImageString($im,  5, 2, 2, " ".$rand[0]." ".$rand[1]." ".$rand[2],  ImageColorAllocate ($im, 255, 0, 0)); 
					Header  ('Content-type: image/jpeg'); 
					imagejpeg($im,NULL,100); 
					ImageDestroy($im); 
				?>
			    

Для реализации CAPTCHA мы будем использовать сессии. На какой странице Вам необходимо реализовать CAPTCHA, откройте сессию.

<?php  session_start() ?>

Теперь создадим проверку ввода CAPTCHA. Если пользователь введет правильно, будут выполняться действия, отправка на электронную почту, добавление комментария и т.д.

				if($_SESSION["captcha"]==$_POST["captcha"]) { 
					//CAPTHCA совпадает. Идет выполнение действий.
				} 
				

Наконец присоединим нашу CAPTCHA к форме.

				<?php  session_start() ?> 
				<form  action="" method="post" name="form">
					<p>Имя:</p>
					<input  name="name" type="text" />
					<p>E-mail:</p>
					<input  name="email" type="text" />
					<input  name="send" type="submit" value="Отправить" />
				</form> 
				<?php 
					if(isset($_POST["captcha"])) 
					if($_SESSION["captcha"]==$_POST["captcha"]) { 
						//CAPTHCA совпадает. Идет выполнение действий
						echo  'CAPTHCA совпадает'; 
					} else { 
						echo  'CAPTHCA не совпадает, попробуйте еще раз.'; 
					} 
				?>
				  

Вот и все. Этот простой способ поможет вам защититься от спамеров.

P.S. сценарий создания CAPTCHA лучше всего размещать в файле с формой.

Просмотров: 4214      Опубликовал: Евгений Фединчик      Дата: 03.04.2010 22:00:30
  • Понравился урок? Добавьте его к себе в закладки.

    Последние уроки категории:

    Сокращение PHP кода

    Вы задумывались когда — нибудь о том, что лишний и бесполезный код убивает ваше время разработки приложения/сайта. Хотя это и кажется мелочью, но когда такой мелочи становится много, то время, потраченное впустую, становится ценным. И так давайте посмотрим, что можно и нужно сокращать...

    Видимость переменных в PHP

    В данном уроке рассматривается область видимости переменных PHP. Объясняется различие локальной и глобальной области видимости, показывается как получить доступ к глобальным переменным внутри функции, как работать с суперглобалами и создавать статические переменные.

    Как читать Rss ленты?

    Читалки и агрегаторы RSS используются для доступа, чтения и управления периодически-обновляемыми лентами RSS (или Atom), которые генерируются веб-сайтами. Эти ленты предоставляют доступ к последним материалам с этих сайтов.

    Установка и настройка PHP+Apache

    В этом уроке хотелось бы поднять очень интересную тему – Установка и настройка веб сервера PHP5 + Apache. В интернете довольно много различных инструкций по данной теме, но только вот в основном это копипаст, а не инструкция для человека, я же постараюсь объяснить все намного проще – на пальцах. Причина для установки локального вебсервера довольно много, например скорость выполнения и отладки скриптов, простота загрузки и модернизации контента и еще много чего.

    Как выбрать фреймворк

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

    Комментарии:

    • Ирина 23.09.2010 18:55:55
      не очень понятно разъяснение, что куда ставить, инфа не для новичков
      Ответить
    • Denis 06.08.2010 12:12:44
      Пытаюсь с помощью Вашего сайта изучать php. Честно признаюсь - не очень получается, так как уровень подготовки для восприятия материала должен быть довольно высоким если учесть скудные пояснения к изложенному коду... Пояснения приводятся только для блоков кода. Хотелось бы пояснения для некоторых не совсем понятных строк кода...
      Ответить
    • Vijit 24.09.2010 05:44:06
      Используйте подсветку синтаксиса кода, статью легче читать будет. В последнем листинге нет присоединения CAPTHCA, только создание формы и проверка кода.
      Ответить
    • Vijit 24.09.2010 05:49:45
      И еще про код: tab-отступы значительно повышают понимание. Вот интересно, как вы сами в своих исходниках разбираетесь?
      Ответить
    • Раиса 06.06.2011 18:19:09
      Спасибо, конечно, но писать надо грамотно. Не "прейдет", а придет.
      Ответить
    • Раиса 06.06.2011 19:23:51
      А автор сам пробоал исполнить то, что написал? После попытки исполнить сие творчество браузер много раз сообщает: Warning: imagecolorallocate(): supplied argument is not a valid Image resource
      Ответить
      • admin 06.06.2011 19:49:11
        Да, автор исполнил то что написал! Проверьте настройки своего хостинга
        Ответить
    • Kaje 10.11.2011 14:54:03
      Здесь все предельно ясно. Хотел понять как они создаются и после прочтения в общемто вкурил что к чему. Автору спасибо!
      Ответить
    • Осталось: 1000 символов.
      Сохранить комментарий Отправка комментария
    lessons
    downloads
    search
    hosting

    Ищите хороший и не дорогой хостинг?

    Хостинг avahost.ua
    VPS VDS - виртуальный выделенный сервер
    sistems
    RBK Money

    Обменник.ws
    Яндекс
    Статистика HitUa