Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подключить скрипт, генерирующий изображение со случайным кодом
 
 автор: kminas   (05.08.2009 в 16:22)   письмо автору
 
 

Я недавно начал интересоваться PHP кодами. Скачал на этом сайте PHP скрипт, разработанный Афанасьевым Артёмом, который генерирует изображение для защиты от роботов (captcha), вставил его в код обратной связи корпоративного сайта, а как связать отправку письма с этим кодом не догоняю. Кто нибудь, образумьте. please.

  Ответить  
 
 автор: sim5   (05.08.2009 в 16:31)   письмо автору
 
   для: kminas   (05.08.2009 в 16:22)
 

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

  Ответить  
 
 автор: kminas   (05.08.2009 в 16:49)   письмо автору
 
   для: sim5   (05.08.2009 в 16:31)
 

Я догадываюсь, что капча не отправляет писем, но с ее помощью можно запретить отсылку СПАМа. Но где это прочитать не знаю.

  Ответить  
 
 автор: t3ma   (05.08.2009 в 17:04)   письмо автору
 
   для: kminas   (05.08.2009 в 16:49)
 

выложите сюда ваш код обратной связи

  Ответить  
 
 автор: Commander   (05.08.2009 в 17:24)   письмо автору
 
   для: kminas   (05.08.2009 в 16:22)
 

Все очень просто. Вот файл, который генерит каптчу (назовем его, скажем, captcha.php):


<?php
    
// Ширина изображения
  
$width 150;
  
// Высота изображения
  
$height 50;
  
// Количество символов в коде
  
$sign 5;
  
// Защитный код
  
$code "";
  
  
// Инициируем сессию
  
session_start();
  
  
// Символы, используемые в коде
  
$letters = array('a','b','c','d','e','f',
                   
'g','h','j','k','m','n',
                   
'p','q','r','s','t','u',
                   
'v','w','x','y','z','2',
                   
'3','4','5','6','7','8','9');
  
// Компоненты для RGB-цвета
  
$figures = array('50','70','90','110',
                   
'130','150','170','190','210');
  
  
// Создаем полотно
  
$img imagecreatetruecolor($width$height);
  
  
// Заливаем фон белым цветом
  
$fon imagecolorallocate($img255255255);
  
imagefill($img00$fon);
  
  
// Заливаем фон точками
  
for($j=0$j<$width$j++)
  {
    for(
$i=0$i<($height*$width)/1000$i++)
    {
      
// Формируем случайный цвет
         
$color imagecolorallocatealpha(
                       
$img,
                       
$figures[rand(0,count($figures)-1)],
                       
$figures[rand(0,count($figures)-1)],
                       
$figures[rand(0,count($figures)-1)],
                    
rand(10,30)); 
      
// Устанавливаем случайную точку
      // случайного цвета
      
imagesetpixel($img,
                    
rand(0,$width),
                    
rand(0,$height),
                    
$color);
    }
  }

  
// Накладываем защитный код
  
for($i=0$i<$sign$i++)
  {
    
// Ориентир
    
$h 1;
    
// Рисуем
    
$color imagecolorallocatealpha(
                    
$img,
                    
$figures[rand(0,count($figures)-1)],
                    
$figures[rand(0,count($figures)-1)],
                    
$figures[rand(0,count($figures)-1)],
                    
rand(10,30)); 

    
// Генерируем случайный символ
    
$letter $letters[rand(0,sizeof($letters)-1)];

    
// Формируем координаты для вывода символа
    
if(empty($x)) $x $width*0.08;
    else 
$x $x + ($width*0.8)/$sign+rand(0,$width*0.01);

    if(
$h == rand(1,2)) $y = (($height*1)/4) + rand(0,$height*0.1);
    else 
$y = (($height*1)/4) - rand(0,$height*0.1);

    
// Запоминаем символ в переменной $code
    
$code .= $letter;
    
// Изменяем регистр символа
    
if($h == rand(0,1)) $letter strtoupper($letter);
    
// Выводим символ на изображение
    
imagestring($img,$x$y$letter$color);
  }
 
  
// Помещаем защитный код в сессию
  
$_SESSION['mail_code'] = $code;
 
  
// Выводим изображение
  
header ("Content-type: image/jpeg"); 
  
imagejpeg($img);
?>


В форму помещаем картинку:


<input type=text name="mail_code">
<img src="captcha.php">


В обработчике формы пишем для проверки:


<?php
  $mail_code 
$_POST['mail_code'];//Получаем код, который ввел посетитель
  
if($mail_code == $_SESSION['mail_code']){
    
//Отправляем почту
  
}
  else{
    exit(
"Вы неправильно ввели код");
  }
?>

  Ответить  
 
 автор: kminas   (06.08.2009 в 00:55)   письмо автору
 
   для: Commander   (05.08.2009 в 17:24)
 

Спасибо, все отлично получилось, только чересчур отлично, букв, практически не видно. Попытался увеличить размер или сделать чуть-чуть контрастнее, ничего не выходит, увы. А в довершение всего сообщение отправляется, когда ничего не набрано, а когда набран текст, даже правильно, пишет "Вы неправильно ввели код".

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования