Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > GET POST Perl


Автор: TwiSteR 5.4.2006, 09:48
Приветствую уважаемые последователи Ларри Уолла,
Тщетно продолжаю переходить с PHP на Perl smile "Лирика"

А теперь такой вопрос как получить GET и POST в PERL ?

в PHP всё довольно просто smile

Код

$_GET && $_POST

Автор: korob2001 5.4.2006, 10:08
ООП подход:
Код

use CGI;
my $cgi = new CGI;
my $name = $cgi->param('name');
my $family = $cgi->param('family');

Процедурный подход:
Код

use CGI qw(:standard);
my $name = param('name');
my $family = param('family');

Можно и руками разбирать, но лучше всё же юзать один из приведённых способов.

Автор: TwiSteR 5.4.2006, 10:18
korob2001,

В приведённых примерах GET POST не имеет значения ?

Автор: Kiber_rat 5.4.2006, 11:44
Вот еще одни способ, который я обычно использую
Код
use CGI qw(:standard);
my %Q = CGI::Vars();
Во всех примерах нет разницы как тебе передали параметры, однако для всяких секьрных вещей полезно знать как тебе передали значения. Для этого можно проверить переменную $ENV{REQUEST_METHOD}
Код
use CGI qw(:standard);
print header(),start_html();
if ($ENV{REQUEST_METHOD} ne 'POST') {
    print 'Hack Alert!';
    exit;
}
my %Q = CGI::Vars();
...

Автор: rcdimon 5.4.2006, 12:22
Гет или пост значения не имеет. но если для тебя имеет, то можешь узнать каким образом были переданы данные

Автор: TwiSteR 5.4.2006, 14:36
Что-то тяжеловато, но идёт всётаки

Вот такой код набахал пока-что
index.pl
Код

use CGI;
use strict;
use DBI;


my $TOP = '';

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

my $cgi = new CGI;
my $act = $cgi->param('act');

eval { do("templates/html_tpl_1.pl") };

if($act ne '')
{
    if ($ENV{REQUEST_METHOD} ne 'GET') {
        print 'Hack Alert!';
        exit;
    }else{
    if($act eq 'order')
    {
        $TOP = 'Электроприбор :: Форма для заказа';
        print html_top($TOP);
        print html_hrefs();
            eval { do("templates/html_tpl_order_1.pl") };
            
            my $err = '';
        
            print html_order($err);
            
            my $sender_name = $cgi->param('sender_name');
            
            print $sender_name;
            print html_left();
            print html_bottom();
            
        }
        elsif($act eq 'about')
        {
            $TOP = 'Электроприбор :: О компании';
        print html_top($TOP);
        print html_hrefs();
            eval { do("templates/html_tpl_about_1.pl") };
        print html_about();
            print html_left();
            print html_bottom();
        }
        elsif($act eq 'contacts')
        {
            $TOP = 'Электроприбор :: Контакты';
        print html_top($TOP);
            print html_hrefs();
            eval { do("templates/html_tpl_home_1.pl") };
        print html_home_center();
            print html_left();
            print html_bottom();
        }
        elsif($act eq 'catalog')
        {
        $TOP = 'Электроприбор :: Каталог продукции';
        print html_top($TOP);
            print html_hrefs();
#        html_catalog();
            print html_left();
            print html_bottom();
        }else{
            print "Fuck off";
        }
    }
}
if($act eq '')
{
    $TOP = 'Электроприбор :: Главная';
    print html_top($TOP);
    print html_hrefs();
    eval { do("templates/html_tpl_home_1.pl") };
    print html_home_center();
    print html_left();
    print html_bottom();
}

if($dbh)
{
    $dbh->disconnect();
}

html_tpl_order_1.pl
Код

sub html_order
{
    my $err = shift @_;
    return <<EOF;
<br />
<center><b>Форма для заказа</b></center><br>
<center><font color=red><font class="title"><b>$err</b></font></font><br></center>
<FORM METHOD="POST" ACTION="index.pl?act=order" name="mutliact">
<table id="Table_02" width=100% border=0 cellpadding=0 cellspacing=0>
<tr>
<td>Ваше имя:<br/>
<INPUT type="text" NAME="sender_name" VALUE="" SIZE=39></td>
<td>Ваш E-mail:<br/>
<INPUT type="text" NAME="sender_email" VALUE="" SIZE=38></td>
</tr>
<tr>
<td><font color=white>d</font></td>
</tr>
<tr>
<td>Ваш адрес:<br/>
<INPUT type="text" NAME="sender_addr" VALUE="" SIZE=39></td>
<td>Контактный телефон:<br/>
<INPUT type="text" NAME="sender_phone" VALUE="" SIZE=38></td>
</tr>
</table>
<br />
Что Вы хотите заказать:
<br />
<TEXTAREA NAME="message" COLS=83 ROWS=10 maxlength=10 WRAP=virtual></TEXTAREA>
<br /><br />
<INPUT TYPE="submit" NAME="submit" VALUE="Отправить">
<INPUT TYPE="button" onClick="ClearAll()" NAME="clear" VALUE="Очистить">
<br/>
</FORM>
EOF
}


Так вот пытаюсь отправить POST через форму
Прописано ACTION="index.pl?act=order"

Но меня выкидывает на главную smile т.к. act не передаётся smile

Автор: korob2001 5.4.2006, 18:32
Добавь к форме скрытое поле, а тот параметр, который ты указал в стрибуте action, act=order убери.
Код

<form method="post" action="/cgi-bin/index.pl" name="mutliact">
    <input type="hidden" name="act" value="order"/>
    <input type="submit" value="Отправить"/>
</form>

Автор: TwiSteR 5.4.2006, 20:21
Спасибо!

Автор: BlackLFL 12.4.2006, 08:54
 можешь воспользоваться моим модулем

http://black.blackframework.com/perl/modules/Black/CGI.pm
http://forum.vingrad.ru/index.php?showtopic=83358 

Автор: xXvladXx 23.7.2008, 00:11
Извините, в настоящий момент система недоступна. Попробуйте позже.
Не скачать твой модуль:(((

Автор: nitr 23.7.2008, 08:25
xXvladXx, воспользуйтесь поиском, есть отдельная тема на форуме по этому модулю.

Добавлено через 42 секунды
xXvladXx, не надо поднимать темы двухгодичной давности, вы бы смотрели темы этого года. всё сразу б нашли...

Автор: Jilian 23.7.2008, 16:23
Привет!
По этим вопросам ОЧЕНЬ подробно написано в книге  Прохоренка
http://perlbooks.narod.ru/

Сама сталкнулась с таким проблемами и решила их почитав оттуда пару статей.

Автор: AlexPet 24.7.2008, 08:13
 smile 

Jilian, ну как, Вас взяли на работу? smile

Автор: Jilian 24.7.2008, 16:18
на проект =)
взяли =)
сорри за оффтоп!

Добавлено через 2 минуты и 40 секунд
а вообще главное было иметь подвешенный язык и трындеть о чем знаешь =)
для кастомеров (они американцы) важно было понимание их речи ну и чтоб хоть немного знала по теме =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)