Получение данных из формы.
У меня короче тут проблема возникла есть Html форма которая методом post посылает данные cgi скрипту надо эти данные сохранить в файл.
Код формы:
<FORM method="post" action="http://?????/cgi-bin/main.cgi" name="Form1">
<input id=Text1 type=text name=Text>
<input id=Submit1 type=submit value=Submit name=>
</FORM>
Я пытаюсь так:
#!/usr/bin/perl
open QV,">>QV.txt";
print QV "QV:$FORM{'Text'}";
close QV;
Но у меня не чего не получается :-( и я незнаю почему! помогите пожалуйсто!!!
Заранее БОЛЬШОЕ СПАСИБО!
Можь отформатировать это все как надо, или еще что сделать.. Или просто тренинг?=)
сырец:
#!e:/perl/bin/perl -w
##Поменяй на свой путь к perl.exe
use CGI qw(param);
our $fn = 'c:/file.txt';
##Поменяй на путь к твоему файлу
if (my $text = param("text")) {
open(FH,">>$fn") || die("Couldn`t open $fn.");
chomp($text);
print FH $text."\n";
close FH || die("Couldn`t close $fn.");
} else {
die("Alarm! Alarm! Hacking attempt!");
}
exit(0);
Ну, эт для примера.. Хтя чего ты хтишь, я не понял=) use CGI qw(param) импортирует функцию param, кторую мы птом используем, чтобы получить параметр "text", переданый формой. Если у тебя нет либы cgi, тогда удали "use CGI ...", и впиши где следует это:
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
Сам писать не стал, но уверен, что работает=) Так ты простейшим путем получишь все, что было передано формой. А чтобы получать твой етот самый "text" пиши так $FORM{"text"}.. Только одно но, этот способ обработки форм совсем НЕ УНИВЕРСАЛЕН, может при экзотическах с экзотическим софтом не работать, и самое главное, не умеет получать массивы параметров (впрочем, эт улаживается быстро).. Поэтому лучше юзай либу CGI..