IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Perl Разбор формы (http://www.imho.ws/showthread.php?t=28396)

TTT 01.05.2003 23:45

Perl Разбор формы
 
ищется дока или готовые примеры для разбора ХТМЛ-форм на Перле в виде списка-название полей формы+ типы полей формы

Stasik 02.05.2003 01:55

дык это на рег выражениях написать можно, довольно не сложно

Aeon 02.05.2003 09:03

один из самых-самых популярных perl-скриптов этого типа: http://www.scriptarchive.com/formmail.html
настраивается за пять минут, работает на ура.

water 05.05.2003 11:04

Тип поля ввода на стороне сервера узнать невозможно. Тип указывается для требуемого отображения на странице. Из формы на сервер передаются только имена полей и их содержимое в виде последовательностей байтов.

Как можно получить данные в скрипте? Например так.
#!/usr/bin/perl
use CGI qw(param);
my $var_1 = param('name');
my $var_2 = param('color);

Это будет работать независимо от того, каким методом отсылаются данные - POST или GET.

Best Regards.

Goryn 05.05.2003 11:45

Цитата:

Как писал water
Тип поля ввода на стороне сервера узнать невозможно. Тип указывается для требуемого отображения на странице. Из формы на сервер передаются только имена полей и их содержимое в виде последовательностей байтов.

:idea: Я пользуюсь не первый год таким кодом (не помню уже где взял, потом какие-то мелочи добавил):

my $buffer="";
if ($ENV{'CONTENT_LENGTH'}) { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
if ($buffer eq "") {$buffer=$ENV{'QUERY_STRING'}}
chomp($buffer);
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$in{$name} = $value;
}


В результате получаем хеш-массив %in, к полям которого обращаемя так:

$in{'something'}

де something - это имя поля в форме ХТМЛ

water 05.05.2003 14:43

Код Goryn'а будет работать быстрее.

Storm666 05.05.2003 22:37

Да хотел спросить в папке cgi-bin что то должно быть изначально? Если да то что?

Stasik 05.05.2003 23:30

ничего

Storm666 05.05.2003 23:39

А что надо прописать чтобы работали скрипты.

Stasik 06.05.2003 00:19

надо чтобы сервер разрешал использование..... а что за ошибка?

water 06.05.2003 09:34

Если скрипты не исполняются и стоит Апач, то в конфигурацию сервера добавить надобно
ScriptAlias /cgi-bin/ /путь_к_папке_со_скриптами/

Если все это добро вдобавок работает на Юникс-подобных системах надо проследить, чтобы переводы строк в запускаемых скриптах были не виндовыми, а юниксовыми.

Storm666 06.05.2003 10:17

Stasik Ошибка 500
water Apache1.3.27 Это мне надо создать файл srm.conf чтобы в нем было прописано ScriptAlias /cgi-bin/ /usr/http://www.storm666.vnet.ee/cgi-bin/. Или я чего то не понимаю.

water 06.05.2003 11:36

В конфиге, судя по всему, все прописано правильно. Internal Server Error может вылетает из-за ошибки работы скрипта.

Проверь имеется ли первая строчка типа #!/usr/bin/perl Если переводы строк виндовые, эту строчку сервер может не понять. Или, может, Перл сидит в другом каталоге.
Может быть ты забываешь первым делом выводить HTTP-заголовок (print "Content-type: text/html\n\n";)

Советую почитать логи сервера.

Goryn 06.05.2003 11:47

Ошибка 500 выдается во всех случаях ошибок выполнения скриптов.
:idea: Если у тебя есть доступ к log-файлам , то посмотри файл ошибки. Он, как правило, называется error.log. Это обычный текстовый файл, куда пишутся все ошибки - можно посмотреть, где напортачил.
Так же проверь, правильно ли ты установил права доступа. Для исполняемых скриптов они должны быть

rwx-rx-rx

Storm666 06.05.2003 20:01

Goryn [Mon May 5 21:40:43 2003] [error] [client 213.XXX.XXX.XXX] File does not exist: /www/storm666.vnet.ee/cgi-bin/index.htm


Так же проверь, правильно ли ты установил права доступа. Для исполняемых скриптов они должны быть :я вообще их не устанавливал не знаю где. Подскажите.

water 06.05.2003 21:19

Цитата:

я вообще их не устанавливал не знаю где. Подскажите.
Если есть shell-доступ, то командой chmod. Информация о ней: man chmod
Например chmod 755 script.pl

Иначе никак.
Так ты под юниксом все-таки?

Goryn 06.05.2003 21:28

:winkgrin: :ржать: :xex: :rotate: :biggrin: :gigi:

:чего: -:че:-

Это то, что я думаю по поводу index.htm в скриптовой папке.
Запиши себе на листке 100 раз и повесь на стенку перед носом:

html, php, shtml, js, swf, java, архивы и прочую лабудень ты выкладываешь в одной папке, которая, как правило, так и называется

html

В скриптовую папке cgi-bin ты выкладываешь
ТОЛЬКО СКРИПТЫ и файлы, с которыми они работают НА СТОРОНЕ СЕРВЕРА.

По поводу прав доступа куда других постов, например этот

Storm666 06.05.2003 21:43

#!/usr/bin/perl
print "Content-type:text/html\n\n";
print "<html><head><title>HELLO</title></head>\";
print "<body>\n";
print "<h2>Hello</h2>\n";
print "</body></html>\n\";вот такой скрипт лежит в папке cgi-bin и имеет расширение!*.cgi и больше НИЧЕГО.

Stasik 06.05.2003 22:16

print "Content-type: text/html\n\n";

Storm666 06.05.2003 22:56

Stasik
Нет не пашет....

Storm666 06.05.2003 23:21

Короче так: на сервере лежат 3 папки cgi-bin(в ней этот скрипт:#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><head><title>HELLO</title></head>\";
print "<body>\n";
print "<h2>Hello</h2>\n";
print "</body></html>\n\";) html ( в ней папки моей странички, index.html, и файл info.php-пустой) images ( в ней картинки) и два файла access_log и error_log. Всё больше ничего нет. В браузере набираю http://www.storm666.vnet.ee/cgi-bin/hello.cgi и результат:

Stasik 07.05.2003 01:02

#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<H1>Hello World</H1>\n";

мож у тя перл лежит не там

Storm666 07.05.2003 10:14

А где perl должен быть? В какой папке? Может у меня его вообще нет?

Goryn 07.05.2003 17:23

Запусти скрипт и сразу почитай файл error_log. Там в последних строчках написана причина ошибки.

Где лежит Перл - это вопрос к хостеру, а не к нам.

Storm666 07.05.2003 22:41

[Wed May 7 20:40:14 2003] [error] (13)Permission denied: exec of /www/storm666.vnet.ee/cgi-bin/hello.cgi failed
[Wed May 7 20:40:14 2003] [error] [client 213.35.134.161] Premature end of script headers: /www/storm666.vnet.ee/cgi-bin/hello.cgi
это всё что написано

Stasik 08.05.2003 00:31

chmod 755.....

Goryn 12.05.2003 11:48

Цитата:

Как писал Stasik
chmod 755.....
или то же самое с помощью FTP-клиента. В некоторых это ставиться цифрой

755

в некоторых с помощью непосредственных атрибутов

rwx-rx-rx

Storm666 12.05.2003 12:35

Спасибо ребята я разобрался, оказывается на хосте не были проставлены правильно разрешения. Вот: http://www.storm666.vnet.ee/guest/index.php


Часовой пояс GMT +4, время: 09:15.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.