PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Описание: Картинка в форме
Поиск в теме | Версия для печати
valenok
Отправлено: 12 Апреля, 2007 - 10:01:57
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel
Помог: 3 раз(а)
Осуществляется так:
index.php
PHP:
скопировать код в буфер обмена
<?PHP header ( 'Content-Type: text/html' ) ;
if ( isset ( $_GET [ 'error' ] ) ) { switch ( $_GET [ 'error' ] ) {
case 'number' : echo "<Font color='red'>Введите число указанное на картинке</font>" ;
}
}
$_SESSION [ "secret_number" ] = rand ( 1000
, 9999
) ;
?>
<form action="submit.php" method="post">
Ваш E-Mail:<br>
<input type="text" name="email" value=""><br>
<br>
Введите код, который вы видете на картинке:<br>
<input type="text" name="secretcode" value=""><br>
<img src='image.php' width=101 height=26 vspace=5>
<br><br>
<input type="submit">
</form>
image.php
PHP:
скопировать код в буфер обмена
<?PHP
// Регистрируем переменную
function mt( ) {
return ( float) $sec + ( ( float) $usec * 100000) ;
}
header ( "Content-type: image/png" ) ;
// создаем изображение
// Выделяем цвет фона (белый)
// Выделяем цвет для фона (светло-серый)
// Выделяем цвет для более темных помех (темно-серый)
// Выделяем четыре случайных темных цвета для символов
// Рисуем сетку
for ( $i = 0 ; $i <= 100 ; $i += 5
) imageline ( $im , $i , 0
, $i , 25
, $g1 ) ; for ( $i = 0 ; $i <= 25 ; $i += 5
) imageline ( $im , 0
, $i , 100
, $i , $g1 ) ;
// Выводим каждую цифру по отдельности, немного смещая случайным образом
// Выводим пару случайных линий тесного цвета, прямо поверх символов.
// Для увеличения количества линий можно увеличить,
// изменив число выделенное красным цветом
// Коэфициент увеличения/уменьшения картинки
$k = 1.7 ;
// Создаем новое изображение, увеличенного размера
// Копируем изображение с изменением рамеров в большую сторону
// Создаем новое изображение, нормального размера
// Копируем изображение с изменением рамеров в меньшую сторону
// Генерируем изображение
// Освобождаем память
?>
submit.php
PHP:
скопировать код в буфер обмена
<?PHP
if ( $_SERVER [ "REQUEST_METHOD" ] != "POST" ) { header ( "Location: index.php" ) ; die
( ) ; }
if ( $_POST [ "secretcode" ] != $_SESSION [ "secret_number" ] || intval ( $_POST [ "secretcode" ] ) == 0
) { header ( "Location: index.php?error=number" ) ; die
( ) ; }
// Выполняем необходимые действия с данными
// ..
?>
Скачать все три файла:
valenok
Отправлено: 12 Апреля, 2007 - 13:29:16
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel
Помог: 3 раз(а)
Agava (h17.ru | hut.ru) даёт.\n\n
(Добавление)
Я тогда использовал в сессии номер, а показывал надпись "Три тысячи пятьсот шестьдесят четыре"
котору надо было ввести циферками.
А так в принципе на что оригинальности хватает, то делать и надо.
Вот тут человек идейку подкидывал:
Анти-спам без captcha
valenok
Отправлено: 14 Сентября, 2007 - 11:38:53
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel
Помог: 3 раз(а)
image.php для использоватния без GD *
* Потребуются 10 картинок со всефи циферками
PHP:
скопировать код в буфер обмена
<?PHP
function sha( $num )
{
// sha = Secret / Super Hash Algorithm =)
$num ++; // range : 1 - 10 instead of 0-9
$q = rand ( 100
, 111
) ; // range: 100 - 999 {3 digits} $num = $num * $q ; //
$num = rand ( 100
, 999
) . $num { 2
} . rand ( 1000
, 9999
) . $num { 1
} . rand ( 10
, 99
) . $num { 0 } . "e+" . ( $q - 98
) ; return $num ;
}
?>
<img src="showimage.php?id=<?PHP echo sha( $_SESSION [ 'secret_number' ] ) { 0} ; ?> ">
<img src="showimage.php?id=<?PHP echo sha( $_SESSION [ 'secret_number' ] ) { 1} ; ?> ">
<img src="showimage.php?id=<?PHP echo sha( $_SESSION [ 'secret_number' ] ) { 2} ; ?> ">
<img src="showimage.php?id=<?PHP echo sha( $_SESSION [ 'secret_number' ] ) { 3} ; ?> ">
showimage.php
PHP:
скопировать код в буфер обмена
function unsha( $id )
{
// Super un SHA
$num = ' ' ;
$num { 2} = $id { 3} ;
$num { 1} = $id { 8} ;
$num { 0} = $id { 11} ;
$num = $num / $q ;
return -- $num ;
}
die ( 'Куда параметры пихаешь?' ) ;
# А вообще в этом случае лучше выводить случайные картинки
# чтоб думал что это на чтото влияет.
# Раньше отвянет. Особенно если сохранять в сессиях
# на какие запросы что ему давали
$num = unsha( $_GET [ 'id' ] ) ;
// open the file in a binary mode
$name = 'images/' . $num . '.jpg' ;
$fp = fopen ( $name , 'rb' ) ;
// send the right headers
header ( "Content-Type: image/png" ) ;
// dump the picture and stop the script
EuGen
Отправлено: 22 Октября, 2007 - 09:42:43
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007
Откуда: Berlin
Помог: 707 раз(а)
Вот так я немного модифицировал картинку:
PHP:
скопировать код в буфер обмена
//...
$IM_X = 151 ;
$IM_Y = 46 ;
// создаем изображение
// Выделяем цвет фона (белый)
// Выделяем цвет для фона (светло-серый)
// Выделяем цвет для более темных помех (темно-серый)
// Выделяем четыре случайных темных цвета для символов
for ( $j = 0 ; $j < $len ; $j ++ )
{
} ;
// Рисуем сетку
for ( $i =- 10 ; $i <= $IM_X - 1 ; $i += 5)
for ( $i =- 15 ; $i <= $IM_Y - 1 ; $i += 5)
// Выводим каждую цифру по отдельности, немного смещая случайным образом
$part_x = ( int) ( $IM_X / $len ) ;
for ( $j = 0 ; $j < $len ; $j ++ )
{
$rx = $part_x * $j + ( int
) ( 0
. 5
* $part_x ) + rand ( - ( int
) ( 0
. 5
* $part_x ) + 10
, ( int
) ( 0
. 5
* $part_x ) - 10
) ; } ;
//...
-----Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB