Не передаются данные через POST

Модератор: Модераторы разделов

pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo

Не передаются данные через POST

Сообщение pas »

Есть страничка

Код:

<html> <head> <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"> <link rel="stylesheet" type="text/css" href="/base.css"> <script> </script> </head> <body> <form action="cgi-bin/login.cgi" method=POST> <table align="center"> <caption>Вход</caption> <tbody> <tr> <td>Логин</td> <td><input type="text" name="login"></td> </tr> <tr> <td>Пароль</td> <td><input type="password" name="pass"></td> </tr> <tr align="center"> <td colspan=2><input type="submit" name="sendData" value="Войти"></td> </tr> </tbody> </table> </form> </body> </html>

скрипт на perl

Код:

#!/usr/bin/perl -wT use strict; use CGI qw(:standard); use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; #print header; #print dump(); my $query=CGI->new(); my $Name=$query->param('login'); my $Pass=param("pass"); print <<HTML; <html> <head> <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"> <link rel="stylesheet" type="text/css" href="/base.css"> HTML print <<HTML; </head> <body> Логин "$Name" </body> </html> HTML

Я наивно полагал, что в результате должна быть выведена страничка с введенным логином, но выводятся только кавычки друг за другом.
Подскажите, что я делаю не так? И почемуто не работает dump().
Сервер локальный, на Мандриве.
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Не передаются данные через POST

Сообщение pcodr »

Я бы cgi скрипт поменял следующим образом:

Код: Выделить всё

#!/usr/bin/perl -wT
use strict;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);

print header(-charset=>'utf-8'), start_html(-title=>'Логинимся...', -style=>{'src'=>'/base.css'});
my $login = param('login');
my $pass  = param('pass');
print "Dump:<br/>", Dump(), "Логин $login", end_html;


При использованиии модуля CGI в большинстве случаев нет смысла писать html код вручную.
remote system type is unix
Спасибо сказали:
pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo

Re: Не передаются данные через POST

Сообщение pas »

Пришли к тому, что я вообще перестал, что либо понимать. Все заработало, хотя я вроде бы ничего не изменил.

Код:

#!/usr/bin/perl -wT use strict; use CGI qw(:standard); use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; #print header; #print dump(); my $query=CGI->new(); my $Name=$query->param('login'); my $Pass=$query->param("pass"); print <<HTML; <html> <head> <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"> <link rel="stylesheet" type="text/css" href="/base.css"> </head> <body> HTML #print Dump(); print <<HTML; Логин "$Name" </body> </html> HTML

Работает и с $query и без него. Может кто то объяснит, в чем дело?
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Не передаются данные через POST

Сообщение pcodr »

Здесь вы использовали объектно-ориентированный синтаксис модуля CGI. В таком варианте qw(:standard), который предпологает что будет использоваться функционально-ориентированный синтаксис лучше убрать. Я лично предпочитаю использовать функционально-ориентированный синтаксис при написании CGI скриптов, т.к. вызов функции записывается короче чем вызов метода. Но возможно в сложных скриптах лучше использовать объектно-ориентированный синтаксис.
Работает и с $query и без него. Может кто то объяснит, в чем дело?

Потому что вы импортировали "standard" с помощью qw(:standard). Как уже писал выше нужно либо убрать импорт либо использовать функционально-ориентированный синтаксис.
Опять же вы зачем-то генерируете html код вручную, когда с помощью средств модуля CGI это записывается гораздо короче (см. предыдущий пост) и при этом еще и по стандарту xhtml.
Всё это описано в perldoc CGI, рекомендую ознакомиться.
remote system type is unix
Спасибо сказали: