Здравствуйте, необходимо написать форму обратной связи для отправки сообщения на почту. Отправку сообщения на почту освоил. Но вот не могу понять как привязать проверку каптчи. Нашел одну на http://hight.fatal.ru/captcha/index.php вставил в свой код: HTML: <form action="contact.php?id=posting" method="post"> <table style="border:solid #CCCCCC 1px; padding:3px; font-size:12px; color:#666666;"> <tr><td colspan="2" style="padding-bottom:5px; font-weight:bold;">Оставить комментарий</td></tr> <tr> <td align="right">Имя*:</td><td><input type="text" name="name" /></td> </tr> <tr> <td align="right">E-mail:</td><td><input type="text" name="e_mail" /></td> </tr> <tr> <td align="right">Captcha*:</td><td><input type="text" name="captcha" /></td> </tr> <tr><td colspan="2"><textarea name="message" rows="7" cols="33"></textarea></td></tr> <tr><td colspan="2" align="center"><input type="submit" value="Поехали" /></td></tr> </table> </form> а как сделать проверку по полю captcha со значением картинки? вот код captcha.php: PHP: # # 2006-2008 (c) Hight | [email=hight@inbox.ru]hight@inbox.ru[/email] # header('Cache-Control: private, no-cache="set-cookie"'); header('Expires: 0'); header('Pragma: no-cache'); # Кол-во символов в строке $symbols_num = 6; # Цифры $numbers = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); # Буквы $letters = array('A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y', 'Z', 'z'); # Генерация массива символов контрольной строки for($i = 0; $i < $symbols_num; $i++) { $true_false = rand(1, 2); # =) if(fmod($true_false, 2)) { $captcha_key_array[] = $numbers[rand(0, 9)]; } else { $captcha_key_array[] = $letters[rand(0, 51)]; } } $captcha_key = implode('', $captcha_key_array); # Берём щрифты $fonts_dir = opendir('fonts'); while(false !== ($module = readdir($fonts_dir))) { if($module != '.' and $module != '..') { $fonts_array[] = $module; } } $fonts_num = count($fonts_array); # Ширина-высота изображения $width = $symbols_num * 25; $height = 50; # Создание изображения $image = imagecreatetruecolor($width, $height); # Рисуем фон $background = imagecolorallocate($image, rand(230, 255), rand(230, 255), rand(230, 255)); imagefill($image, 0, 0, $background); # Рисуем "шахматную" доску $cube_side = rand(8, 12); # размер грани квадратика $q = 0; while($q <= $height / $cube_side) { $i = 0; while($i <= $width) { if(fmod($q, 2)) { $cube_side = rand(8, 12); # Размер стороны квадратика $color = imagecolorallocate($image, rand(150, 255), rand(150, 255), rand(150, 255)); imagefilledrectangle ($image, $i*2+$cube_side, $q*$cube_side, $i*2+$cube_side*2, $q*$cube_side+$cube_side, $color ); } else { $cube_side = rand(8, 12); # Размер стороны квадратика $color = imagecolorallocate($image, rand(150, 255), rand(150, 255), rand(150, 255)); imagefilledrectangle ($image, $i*2, $q*$cube_side, $i*2+$cube_side, $q*$cube_side+$cube_side, $color ); //imagesetpixel($image, $i*2, $q*$cube_side, $black ); //imagefilledarc ($image, $i*2, $q*$cube_side, rand(8, 16), rand(5, 10), 0, 360, $color, IMG_ARC_PIE ); //imageellipse($image, $i*2, $q*$cube_side, 20, 10, $color ); } $i = $i + $cube_side; } $q++; } # Рисуем строку $i = 10; foreach($captcha_key_array as $index => $value) { $x_position = rand(6, $height - 16); $str_color = imagecolorallocate($image, rand(50, 150), rand(50, 150), rand(50, 150)); $captcha_key_array = imagettftext($image, 25, rand(-30, 30), $i, rand(25, 45), $str_color, './fonts/'.$fonts_array[rand(0, $fonts_num-1)], $value); $i = $i + rand(15, 25) ; } # Рисуем рамку $black = imagecolorallocate($image, 0, 0, 0); imageline($image, 0, 0, 0, $height, $black); # left imageline($image, $width - 1, 0, $width - 1, $height, $black); # right imageline($image, $width, 0, 0, 0, $black); # up imageline($image, $width, $height - 1, 0, $height - 1, $black); # down # Выводим изображение в браузер header('content-type: image/png'); imagepng($image); # Высвобождаем ресурсы imagedestroy($image); ?>
скрипт капчи должен залить в сессию переменную с кодом а форма долна отправить в скрипт обработки значение пользователя, ну и естественно в обработке сравнить значение из сессии и от пользователя
хмм, спасибо немного вроде понял =) а что за ошибка ? PHP: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\point\site\contact.php:6)
Если тебе все рано какая капча, то чтобы не дергать свой поп, выдри ее просто с уже существующих КМС, например с ДЛЕ, тем более что и проверка там уже реализована, если сильно хочетсо помудится... тогада http://www.captcha.ru, http://kurilka.co.ua/archives/captcha/... имхо во-втором даже объясняют как? что? куда?
проверка стандартная отправляю через POST: PHP: if(isset($_POST['name'])) { } с e_mail пока не разбирался, для меня сейчас главное сделать так чтобы выводилась картинка с генерированным числом и проходила проверка введенного числа с числом картинки, вроде этого PHP: //$_POST['captcha_key'] - данные с поля формы //$_SESSION['captcha_key'] - данные занесенные при генерирование картинки session_start(); if(isset($_POST['captcha_key'])) { if($_SESSION['captcha_key'] == $_POST['captcha_key']) //правильно else //неправильно } за ссылку спасибо
Насчет e_mail предвосхищая вопрос, посотри вот здесь http://www.phpclasses.org/browse/package/13.html, кстати этот класс можно видоизменить или дописать для проверки на валидность любого поля... и еще совет используй вместе с фреймворком Jqery, так будет и красивей и для юзера удобнее. Тем более что и плагинов для проверки валидности на Jqery в сети пално.
Мне вот чет всегда были ближе капчи со словами а не литерами... вот заскок такой, кажется что надежнее...сам понимаю что хакнуть то в принципе можно любую... а сердце так и тянется к словесным капча ))) http://recaptcha.net/ - нрависа)