![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| r |
|
|||
|
Unregistered |
Имеем две функции, одна выводит форму другая картинку, не выводятся и форма и картинка одновременно либо одно, либо другое.
######################################### #!C:\perl\bin\perl -w use strict; use CGI; my $cgi = new CGI; use CGI::Carp 'fatalsToBrowser'; sub forma { print $cgi->start_html, $cgi->start_center, $cgi->start_form, $cgi->start_table( -border => 0 ), $cgi->start_Tr; print $cgi->td( { -width => 600, -bgcolor => 'green', -align => 'center' } , $cgi->font( { -color => 'white', -size => '5' }, $cgi->b("Форма"), ), ); print $cgi->end_Tr, $cgi->end_table, $cgi->start_table( -border => 0 ), $cgi->start_Tr; print $cgi->td( { -width => 196, -bgcolor => '#0080C0', -align => 'center' } , $cgi->font( { -color => 'white', -size => '4' }, $cgi->b("Поле_1"), ), ); print $cgi->td( { -width => 200, -bgcolor => '#0080C0', -align => 'center' } , $cgi->textfield( -name => 'name_1', -size => 25, ), ); print $cgi->td( { -width => 196, -bgcolor => '#0080C0', -align => 'center' } , ); print $cgi->end_Tr, $cgi->end_table, $cgi->start_table( -border => 0 ), $cgi->start_Tr; print $cgi->td( { -width => 196, -bgcolor => '#0080C0', -align => 'center' } , $cgi->font( { -color => 'white', -size => '4' }, $cgi->b("Поле_2"), ), ); print $cgi->td( { -width => 200, -bgcolor => '#0080C0', -align => 'center' } , $cgi->textfield( -name => 'name_2', -size => 25, ), ); print $cgi->td( { -width => 196, -bgcolor => '#0080C0', -align => 'center' } , ); print $cgi->end_Tr, $cgi->end_table, $cgi->start_table( -border => 0 ), $cgi->start_Tr; print $cgi->td( { -width => 297, -bgcolor => '#0080C0', -align => 'center' } , $cgi->submit( -name => 'baton', -value => 'Отправить' ), ); print $cgi->td( { -width => 297, -bgcolor => '#0080C0', -align => 'center' } , $cgi->reset( -value => 'Очистить' ), ); $cgi->end_form, print $cgi->end_Tr, $cgi->end_table, } sub grafik{ use GD; my $number=238756; my $im = new GD::Image(90,20); my $white = $im->colorAllocate(255,255,255); my $black = $im->colorAllocate(0,0,0); my $red = $im->colorAllocate(255,0,0); my $blue = $im->colorAllocate(0,150,255); $im->transparent($white); $im->interlaced('true'); $im->fill(50,50, $blue); $im->string(gdGiantFont,15,4,$number,$white); binmode STDOUT; print $im->png; } print $cgi->header( -charset => 'Windows-1251' ); #forma; grafik; exit(0); ############################################ Спасибо. |
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Абсолютно разные типы, форма text/html, а картинка image/png. Вообще-то лучше такие вещи делать в разных файлах, но можно попробовать поизвращаться, правда я этого ещё не пробовал, но думаю получится. Попробуй замени вот эту часть кода:
на такую:
Затем в подпрограмме forma(), в том месте где хочешь получить график добавь такой код:
О результатах дай знать, самому интересно, что из этого получится, а тестировать самому времени не хватает. По идее должно сработать. Удачи. Это сообщение отредактировал(а) korob2001 - 19.5.2005, 08:25 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| r |
|
|||
|
Unregistered |
Дело в том что это не то что мне нужно, представь себе обычную форму регистрации, таких миллиард, так вот, обычно там присутствует картинка с различными символами, которые необходимо ввести, так сказать защита от автоматической регистрации, и мне нужно вывести и форму и картинку одновременно. Спасибо.
|
|||
|
||||
| korob2001 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Ты не понял, это именно то, что тебе нужно, ведь форма это и есть HTML, а картинка - это и есть картинка. Для того, что бы выдать картинку в HTML тебе необходимо указать путь к ней в теге:
Верно??? Теперь перейдём к алгоритму, того бреда, который я тебе предложил. Ты запускаешь свой скрипт без каких либо параметров, запускается подпрограмма forma();, она выводит форму в браузер, в этой же подпрограмме, мы указываем тег <IMG>, в том месте разметки, где хотим видеть изображение, т.е. втавляем эту строку:
в подпрограмму forma(). Теперь обрати внимание на атрибут src, вместо того, что бы указать в нём адрес к статическому изображению, мы указываем путь на саму программу, которая в данный момент генерирует форму, т.е. на себя. При этом передаём ей параметр graf=1, получается примерно такой путь: /cgi-bin/script.pl?graf=1, теперь можно перейти в нижнюю часть программы. Из условия видно, что когда подпрограмма получает параметр graf, запускается подпрограмма grafik();. Она тут же генерирует изображение и выводит его в HTML страничку. Другими словами мы получаем на лету сгенерированное изображение, после этого, выполняется оставшаяся часть подпрограммы forma(), т.е. завешается HTML код. Именно так и выводятся те изображения защиты, о которых ты говоришь. Если ты попробовал запустить этот код и он не сгенерил тебе изображение, то попробуй заменить эту строку:
на такую:
Но это только в том случае если не будет работать с print, я просто сейчас не могу тестировать. Если не поможет, дай знать, тогда я установля у себя модуль GD и протестирую твой код. Удачи. Это сообщение отредактировал(а) korob2001 - 19.5.2005, 20:59 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||
|
|||||||||
| r |
|
|||
|
Unregistered |
Да млин, ну у тебя и голова, всё пашет да и ещё как пашет, слушай может это ты этот язык придумал? Да, и расскажи подробнее про способ вставки картинки в страницу с помощью CGI.pm. А то я как раз искал недавно как энто делается и не нашёл. Ещё раз огромное спасибо, сам я точно до этого не скоро дошёл-бы. Пока.
|
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Мы же только что вставляли в страницу изображение, с помощью CGI.pm
На в данном случае мы ссылались не на статическое изображение, а на выполняемый скрипт, на себя. Если нужно статическое, то так:
Удачи. Это сообщение отредактировал(а) korob2001 - 19.5.2005, 22:12 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| r |
|
|||
|
Unregistered |
Ага а вот и первые проблемы, раньше у меня был такой код, и каждая функция обрабатывала свои параметры(извини опять кнопка код не появилась)
######################################################## print $cgi->header( -charset => 'Windows-1251' ); if ( defined $cgi->param('par_1') ) { param_1; } elsif ( defined $cgi->param('par_2') ) { param_2; }elsif ( defined $cgi->param('par_3') ) { param_3; }elsif ( defined $cgi->param('par_4') ) { param_4; } elsif ( defined $cgi->param('par_5') ) { param_5; } else { param_0; } ###################################################### а теперь пытаюсь переписать и кажется уже запутался, у тебя-же только для двух фун-ий код, есть-ли какие варианты? Спасибо. |
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Тебе религия не позволяет зарегиться???
А что мешает создать ещё один блок elsif???
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| r |
|
|||
|
Unregistered |
Вот еще одна проблемма: не могу положить куки клиенту, это связано с тем как у меня выводится картинка, получается так что кука создается каждый раз как вызывается скрипт(Это если заголовок поменять) или выскакивает ошибка.
Ну и как как тут можно куку вставить ума не приложу? |
|||
|
||||
| r |
|
|||
|
Unregistered |
Извиняюсь, уже сам дошел, пришлось дописать фун-ию.
|
|||
|
||||
| r |
|
|||
|
Unregistered |
Привет korob2001, вот нашел другой вариант как вывести картинку в форме. Причем что самое интересное фиг знает сколько народу читало, и никто не захотел подсказать
Вот этот код генерирует цифры, сохраняет код в сессии, затем создает картинку с этим кодом. Осталось только вывести статическую картинку в форме. Но все равно спасибо. |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Не понял, а что именно не понятно?
Если ты хочешь вывести это изображение сразуже в STDOUT, просто создай условие по которому будет запускаться эта подпрограмма. Кстати: Зачем ты сохраняешь всю эту канитель в файл, просто генерируй его и налету выдавай в STDOUT. Или тебе необходимо создать именно файл изображения? Но опять же, зачем? -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| r |
|
|||
|
Unregistered |
Понимаешь, мне так проще намного, дело в том что когда скрипт выдавал форму, он вызывал еще и эту функцию, и приходилось выдумывать много. Что-бы создать например сессию и что-бы она не вызывалась дважды, ну и много еще всяких моментов. Потом проще удалить картинку и все. Спасибо.
|
|||
|
||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |