[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: маленькая проблема с капчей
quickxyan
написал кое-как свою капчу и есть проблемка. поместил скрипт в функцию + прикрепил туда форму для отправки того что видит юзер, но она не отображаеться и я не пойму почему.
вот код:


<?php

function
captcha()
{
$myImage = imagecreate(200,100);
$black = imagecolorallocate($myImage, 0, 0, 0);
$white = imagecolorallocate($myImage, 255, 255, 255);

$num = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$coordx = array('10', '35', '60', '85', '110', '135', '170');

for($i = 0; $i < 7; $i++)
{
shuffle($num);
$captcha[] = $num[$i];
}
for ($i = 0; $i <7; $i++)
{
imagefttext($myImage, 30, rand(-15, 15), $coordx[$i], rand(40,60), $white, "C:\Windows\fonts\arial.ttf", $captcha[$i]);
}

header("Content-type: image/png");
imagepng($myImage);
imagedestroy($myImage);

$string = implode($captcha);
return $string;
}

$cap = captcha();


/*
echo '<form action = "captcha.php">
<input type = "hidden" name = "captcha" value = '.$cap.'>
<input type = "text" name = "kod">
<input type = "submit">
</form>';
*/

?>




если раскоментировать, то ничего не произойдет. кто стыкался помогите



Спустя 2 часа, 41 минута, 25 секунд (12.01.2011 - 18:08) jetistyum написал(а):
и вообще что за бред - выводить цифры каптчи в скрытом поле?

Спустя 2 минуты, 6 секунд (12.01.2011 - 18:10) DmitryOpalev написал(а):
Так посмотреть можно wink.gif

Спустя 2 минуты, 6 секунд (12.01.2011 - 18:13) quickxyan написал(а):
это не для того, что бы выводить, а для того что бы проверить есть ли данные и передавались ли они smile.gif ну то есть такая себе внутреняя проверка, но она не работает из-за того, что форма не отображаеться. спс, за ссылку щас гляну.

Спустя 2 минуты, 45 секунд (12.01.2011 - 18:15) quickxyan написал(а):
так, а зачем ссыль была на функцию implode? я точно знаю, что проблема не в ней

Спустя 7 минут, 55 секунд (12.01.2011 - 18:23) jetistyum написал(а):
с implode напутал, прошу прощения.
проблема в следующем:
1. ты хочешь чтобы при запуске у тебя скрипт сначала выдал картинку, а потом текстовые данные - так не получится, либо либо...
2. закомментируй хедеры, включи отображение ошибок и увидишь варнинги, лично у меня он не нашел путь к указанному шрифту, после того как подправил - все заработало, и еще раз - только вывод картинки, а не картинки и текста.

Спустя 53 минуты, 24 секунды (12.01.2011 - 19:17) quickxyan написал(а):
тогда встает один очень важный вопрос: как в таком случае работают все капчи и выводят и текст и поля для ввода?
может подключить файл с капчей инклудом? или сделать класс?

видать я что-то элементарное не понимаю, но не пойму, что!

p.s.
а шрифт - это временно, решу главную проблему. а потом и и буду приводить все в порядок, по размерам и что бы буквы не лезли друг на друга. кстати немного переписал скрипт и удалил из массива возможных значений 'I' и 'l' так, как по своему опыту знаю, что бывает трудновато понять кто есть кто) подумываю чтобы убрать ноль и большую "О"

Спустя 10 минут, 12 секунд (12.01.2011 - 19:27) ZSH написал(а):
<img src="capcha.php" >
capcha.php файл с кодом php где генерится капча

Спустя 15 минут, 23 секунды (12.01.2011 - 19:42) quickxyan написал(а):
Огромное спасибо. вот это я прозрел)

Спустя 3 минуты, 58 секунд (12.01.2011 - 19:46) quickxyan написал(а):
возник тут еще один тогда вопрос ) а как собственно передать значение из капчи на ту страницу где она будет отображаться в виде картинки?

Спустя 26 минут, 47 секунд (12.01.2011 - 20:13) ZSH написал(а):
попробуй сесию

Спустя 1 минута, 22 секунды (12.01.2011 - 20:14) quickxyan написал(а):
была такая идея, но я подумал, что глупая.)

а раз, такая идея не только у меня. то попробую)

Спустя 46 минут, 53 секунды (12.01.2011 - 21:01) quickxyan написал(а):
все работает)))) вот исходнички - если вдруг кому пригодиться:) предварительно скопируйте шрифт comic.ttf из папки C:\Windows\fonts\ или скачайте с инета

файл captcha.php


<?php

$myImage = imagecreate(240,60);
$black = imagecolorallocate($myImage, 0, 0, 0);

$white = imagecolorallocate($myImage, 255, 255, 255);
$red = imagecolorallocate($myImage, 255, 102, 102);
$green = imagecolorallocate($myImage, 0, 255, 102);
$lightblue = imagecolorallocate($myImage, 51, 255, 204);
$blue = imagecolorallocate($myImage, 0, 0, 255);
$yellow = imagecolorallocate($myImage, 255, 255, 0);
$purple = imagecolorallocate($myImage, 255, 0, 102);

$color[] = $red;
$color[] = $green;
$color[] = $lightblue;
$color[] = $blue;
$color[] = $yellow;
$color[] = $purple;

$num = array('1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$coordx = array('10', '50', '90', '130', '170', '210');

shuffle($num);
shuffle($color);
for($i = 0; $i < 6; $i++)
{
$captcha[] = $num[$i];
}
$string = implode($captcha);
session_start();
$_SESSION['captcha'] = $string;

for ($i = 0; $i <6; $i++)
{
imagefttext($myImage, 30, rand(-10, 15), $coordx[$i], rand(35,50), $color[$i], "comic.ttf", $captcha[$i]);
}

header("Content-type: image/png");
imagepng($myImage);
imagedestroy($myImage);



?>



файл cap.php - можете назвать как хотите, просто назвал ибо спешил


<img src = "captcha.php">
<?php
session_start();
$captcha = $_SESSION['captcha'];

if (isset($_GET['posted']))
{
if($_GET['text'] == $captcha)
{
echo '<br><font size=+2 color = "red">Поздравляю, вы прошли проверку!</font>';
}

else
{
echo '<br><font size=+2 color = "red">Неправильный ввод</font>';
}

}

echo "<form action='cap.php' method='GET'>
<input type = 'hidden' name = 'posted'>
<br>
<input type = 'text' name = 'text'>
<input type = 'submit' value = 'Отправить'>
</form>"
;

?>

Спустя 13 часов, 3 минуты, 30 секунд (13.01.2011 - 10:05) Белый Тигр написал(а):
А вот тут аккуратнее. Очень распространённая ошибка:
  session_start();
$captcha = $_SESSION['captcha'];

if (isset($_GET['posted']))
{
if($_GET['text'] == $captcha)

Если человек отправит свой запрос без идентификатора сессии и без параметра text вообще, то и в $captcha у вас будет NULL, и в $_GET['text'] будет NULL. Следовательно $_GET['text'] == $captcha. Получается что человек прошёл проверку не вводя текста с картинки. Чтоб такого не случилось просто добавьте к основному сравнению проверку на длину текста.
if(isset($_GET['text']) AND strlen($_GET['text']) AND $_GET['text'] == $captcha)

Также strlen($_GET['text']) здесь можно заменить на strlen($captcha)

Спустя 1 час, 48 минут, 56 секунд (13.01.2011 - 11:54) quickxyan написал(а):
спс, за подсказку, я как-то писал, что бы посмотреть работает ли с нормальными данными как-то забыл про всяческие проверки


_____________
печатаю со скоростью 320 минут в знак...

плюсуем карму не стесняемся
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.