Через циклы заношу рандомные данные в общую переменную, для того, чтобы поместить их в сессию. Но почему то после цикла (и for, и foreach) переменная $rand чтоли как-то "унсетится", т.е. "удаляется" чтоли... и естественно картинка не отображается. Что не так? PHP: for($i = 0; $i < 6; $i++) $rand[] = $abc[mt_rand(0,22)]; //foreach($rand as $randOne) $fullRand = $randOne; for($i = 0; $i < 6; $i++) $fullRand .= $rand[$i]; $_SESSION['captcha'] = $fullRand; for($i = 0; $i < 6; $i++) imageTtfText($image,mt_rand(12,15),mt_rand(-20,20),15 * $i + mt_rand(4,8),mt_rand(20,25),$color[$i],'arial.ttf',$rand[$i]);
если пустые квадратные скобки - php автоматически создаёт массив, т.е., если без циклов, то всё отлично работает. п.с. на всякий случай попробовал. безуспешно...
2Chaak =)))))) 2Ru}{eeZ ... генерируешь случайную или псевдослучайную последовательность $rc1, запоминаешь его в сессию и выводишь её в капчу вышеописанный скрипт называешь kapcha.php а на странице выводишь <img src="./путь_к_файлу/kapcha.php">
Ru}{eeZ По вопросу - ты не забыл объявить не пустой массив (или строку?) $abc из которого собственно и берешь значения? З.Ы. чую на одну и ту же капчу, можно будет регаться сколько угодно раз, судя по такому коду
2Gifts смотря какую случайную последовательность выводить будешь! к примеру если последовательность задается рандомом и при каждом запросе обновляется то на одну и ту же капчу попасть очень сложно =)))) а для пущей сложности можно цифры повертеть, добавить буквы или логику с арифметикой...
Какая разница сколько цифр генерировать ? Главное чтобы боты не распознали и юзеру было удобно вбивать капчи Сложности кого? Пользователя или компютера)?. Ты думаешь компьютер не умеет считать? Он считает лучше тебя только скажи ему посчтитать) ------------------ Рельно использовать разные шрифты / бэкграунды / искажения / фильтры резкости. Если проект маленький, то зачем выдумывать сложную капчу со всякими там искажениями и прочими извращениями? Достаточно установить уже готовый скрипт: Из готовых решений мой выбор в сторону:
2ChaaK я в курсе! спасибо. и полностью поддерживаю что проще пользоваться фреймвёрками! однако: Сложности капчи, для того чтобы боты не распознали! а про логику с арифметикой: пример сгенери боту капчу а еще буквы искази и пускай хоть обчитается и обсчитается!
вернёмся к вопросу... если написать: for($i = 0; $i < 6; $i++) $fullRand = $rand[$i]; без точки, то естественно с каждым разом переменная $fullRand будет просто получать новые данные, но тогда всё работает, т.е. будет браться только последняя буква из капчи, а нужно, что бы всё буквы брались и заносились в одну переменную, для того, чтобы записать их в сессию. Это срабатывает, НО! Капча не выводится т.к. до неё не доходит $fullRand. Ну и вот вам в общем капча, чтобы не разбегались в догадках... PHP: <?php session_start(); $image = imageCreate(100, 30); imageColorAllocate($image, 255, 255, 255); for($i = 0; $i < 10; $i++) $color[] = imageColorAllocate($image, mt_rand(0,240), mt_rand(0,240), mt_rand(0,240)); $abc = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','1','2','3','4','5','6','7','8','9'); for($i = 0; $i < 6; $i++) $rand[] = $abc[mt_rand(0,22)]; foreach($rand as $randOne) $fullRand .= $randOne; //for($i = 0; $i < 6; $i++) $fullRand .= $rand[$i]; $_SESSION['captcha'] = $fullRand; for($i = 0; $i < 6; $i++) imageTtfText($image,mt_rand(12,15),mt_rand(-20,20),15 * $i + mt_rand(4,8),mt_rand(20,25),$color[$i],'arial.ttf',$rand[$i]); for($i = 0; $i < 3; $i++) imageArc($image, mt_rand(0,90), mt_rand(0,20), mt_rand(10,60), mt_rand(10,60), mt_rand(-380,0), mt_rand(0,380), $color[$i]); header('Content-type: image/png'); imagePng($image); ?>
По-моему до меня кто-то уже высказывал эту идею, только насчёт одной переменной... А вообще, если бы у тебя был включён вывод Warnings то ты бы сам понял в каком месте возникает косяк...
1) выделенное темно-красным: Здесь пишется относительный путь к файлу шрифта!!! 2) размеры и цвета подгонишь потом ________________________________________ ооооо ёпрст ты уже разобрался блин запоздал я