[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создание капчи
session_on
Привет, название темы конечно столь распространенное, и многие пользователи этого форума прочитав только название темы хотели отозваться ссылкой на какой то сайт - где будет готовый либо не много не доделанный исходник создания капчи.
Я же хочу сделать все самостоятельно и понять как это работает, начать с простого (самой легкого написания капчи) - я самоучка, начал учить php год назад, создав свой сайт мне временно не нужна была капча, сейчас же она необходима - познаю новые функции по мере их необходимости.

Что-бы хотелось прочитать в этой теме от пользователей: не сколько функций которые помогут мне для создания моей первой капчи (самой простой - без каких либо искревления текста и так далее - простое создание картинки)

Мой код:



//Простая изначальная проверка при переходах между страницами - либо в каком-то определенном скрипте - если существует капча для Пользователя он должен ее вести, если она не создана - создаем после не которых действий - в какихто скриптах будет подключаться capcha.php

$s=gettimeofday("sec");//Время в cекундах

$res1=mysql_query("SELECT * FROM `capcha` WHERE `id`='???'");//??? == ID Пользователя который авторизован и для которого создавалась капча
$res=mysql_fetch_array($res1);
$idp=$res['id'];//ID Пользователя
$capcha=$res['code'];//Код на изображение
$images=$res['img'];//Название изображения для пользователя
$sec=$res['sec'];//Время Жизни капчи



if($idp>0){//Если существует не введенная капча выводим ее

if($sec<$s){//Картинка удалилась - истекло время жизни картинки
$iii=1;//Переменная необходима для второго скрипта чуть ниже
include ($_SERVER['DOCUMENT_ROOT'].'/capcha.php');//Подключаем скрипт создания капчи для создания нового изображения
}

if(isset($_POST['capcha'])){//Если были отправлена капча от пользователя - проверяем ее

if($_POST['capcha']==$capcha){
mysql_query("DELETE FROM `capcha` SET `id`='???'");//??? == ID Пользователя
echo 'Вы угадали, обновите страницу';
$ssss=1;//Переменная говорит скрипту что он ввел верную капчу и не выводит форму
}

}



if(empty($ssss)){//Если капча не была введена, либо она не была введена правильно вывод формы капчи
//Выводим картинку капчи и форму для отправки

echo '<img src="/capcha/'.$images.'.png" alt="." /><br/>
<form action="" method="post"><input name="capcha" type="text" value=""/><br/>
<input type="submit" name="send" value="Готово"/>
</form>'
;
}

}


}
else{


//Пользователь на капчу еще не напоролся, видимо еще не сделал определенной количество кликов по сайту - либо еще что то - это не важно
//Продолжаем выполнение скрипта - здесь код который выполняется на сайте сейчас без капчи



}








//Скрипт создания капчи capcha.php

//Пользователь уже Авторизован и бродит по сайту
//После не которых действий, либо частой активности создается простая картинка которую я не знаю как создать, но сейчас приведу пример: Осталось только создать изображение

//Пользователь сделал кое какие действия: Создание капчи


if($iii==1){//Данная проверка необходима для того чтоб сам пользователь узнав расположение файла создания не баловался с ним - и капчи сами сабой не создавались на сервере
//Переменная $iii будет находиться в верхнем скрипте, либо в том где нужно будет создать капчу


$capchaarray=array( 'a', 'b', 'v', 'g', 'd', 'e', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'h', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0');//Массив символов которые могут присутствовать в картинке - (изображение капчи)

$capchanum=mt_rand(6,8);//Рандомное количество символов в капче

$capcha='';//Пустая капча
$capchanum2=0;
while($capchanum2++<$capchanum){//Цикл: Создания символов капчи
shuffle($capchaarray);//Перемешиваем символы которые могут присутствовать в капче
$capcha.=$capchaarray[0];//Добавляем в капчу один первый символ капчи
}

//Создание имени картинки

$capchanum=mt_rand(13,15);//Рандомное количество символов в название картинки

$images='';//Пустое имя изображения
$capchanum2=0;
while($capchanum2++<$capchanum){//Цикл: Создания символов названия изображения
shuffle($capchaarray);//Перемешиваем символы которые могут присутствовать в название изображения
$images.=$capchaarray[0];//Добавляем в название изображения один первый символ
}


//Готово: $capcha - Название капчи, $images - Название Картинки

$time=600;//Время жизни капчи в секундах
$sec=$s+$time;//Время нынешнее + Время жизни
$sec=(int)$sec;

$res1=mysql_query("SELECT * FROM `capcha` WHERE `id`='???'");//??? == ID Пользователя который авторизован и для которого создавалась капча
$res=mysql_fetch_array($res1);
$idpppppppp=$res['id'];//ID Пользователя


if($idpppppppp>0){//Если уже существует капча на сервере изменяем код капчи в строке таблице для Пользователя и создаем новое изображение
mysql_query("UPDATE `capcha` SET `code`='$capcha', `img`='$images', `sec`='$sec', WHERE `id`='$idpppppppp'");
}else{//Если не существует добавляем
mysql_query("INSERT `capcha` SET `id`='???', `code`='$capcha', `img`='$images', `sec`='$sec'");//??? == ID Пользователя + code = капча + + `img` = Название изображения в папке /capcha/ +`sec` = Время когда удалится капча с сервера
}

//Вот Здесь нужно добавить вроде бы одну строку кода... - которую я не знаю, - строка кода отвечает за создание изображения в папке капча

//$capcha - Текст который написан на изображение
//$images - Название Картинки
//$time - Сколько живет картинка на сервере - через какой промежуток времени она удалится
// Папка где хранятся капчи /capcha/

//



}

//END Скрипт создания капчи capcha.php



Не совсем понимаю как может жить картинка N времени на сервере после ее создания - то есть в данном случае количество секунд $time - в php.ini должно быть что то настроено для этого? - для того чтоб картинки капчи сами удалялись.
Всего лишь одной по моему строки в коде не хватает - ведь одна отвечает за создание изображения на сервере? - подскажите пожалуйста как закончить скрипт :)

Буду очень благодарен за помощь:)

P.S. Оба скрипта я сам писал, исходник мой не с какого-та форума взят.
Быстрый ответ:

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