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


Автор: Qwesa 11.3.2008, 15:17
доброе время суток, вот возникла необходимость сделать чтоб с сайта можно было посылать предварительный заказ на рассмотрение.

с помощью скрипта вызывается окно, заполняя которое человек жмет ок и письмо посылается на определенный ранее имейл. Но поскольку я не являюсь создателем сайта, и мне он достался уже от третьего администратора, соответственно особо конструкцию его написания мне никто не растолковывал. Я ранее такие формы не делал, подскажите как этот механизм работает?

В окне формы которую нужно заполнять, есть упоминание на файл с расширением - "cgi" которое я вижу первый раз(( и находится он в папке - cgi-bin. 

Сам файл содержит такой код:

Код

    
#!/usr/bin/perl
#zapros.cgi
#sprite13_4eva
use CGI::Carp qw(fatalsToBrowser);
use CGI;
my $q=new CGI;
$sendmail='/usr/sbin/sendmail';
$mail_to='***mail.ru';
$from='webmaster@100mb.ru';
#sub urldecode
# {
# local($val)=@_;
# $val=~s/\+/ /g;
# $val=~s/%([0-9a-hA-H]{2})/pack('C',hex($1))/ge;
# return $val;
#}
#$form_query=<STDIN>;
#@form_fields=split(/&/,$form_query);
#foreach(@form_fields)
# {
# if (/^company=(.*)/)                 {$company=&urldecode($1);}
# if (/^contact=(.*)/)                 {$contact=&urldecode($1);}
# if (/^address=(.*)/)                 {$address=&urldecode($1);}
# if (/^mail=(.*)/)                       {$mail=&urldecode($1);}
# if (/^tel_code=(.*)/)               {$tel_code=&urldecode($1);}
# if (/^tel_number=(.*)/)           {$tel_number=&urldecode($1);}
# if (/^fax_code=(.*)/)               {$fax_code=&urldecode($1);}
# if (/^fax_number=(.*)/)           {$fax_number=&urldecode($1);}
# if (/^interested_with=(.*)/) {$interested_with=&urldecode($1);}
# if (/^comments=(.*)/)               {$comments=&urldecode($1);}
# }
$company=$q->param('company');
$contact=$q->param('contact');
$address=$q->param('address');
$mail=$q->param('mail');
$tel_number=$q->param('tel_number');
$fax_number=$q->param('fax_number');
$interested_with=$q->param('interested_with');
$comments=$q->param('comments');
open(SENDMAIL, "|$sendmail $mail_to") or die ("mail :$!");
print SENDMAIL "From: $from\n" or die ("mail :$!");
print SENDMAIL "To: $mail_to\n" or die ("mail :$!");
print SENDMAIL "Subject: from $from\n" or die ("mail :$!");
print SENDMAIL "Êîìïàíèÿ : $company\n" or die ("mail :$!");
print SENDMAIL "Êîíòàêòû:$contact\n" or die ("mail :$!");
print SENDMAIL "Àäðåñ :$address\n" or die ("mail :$!");
print SENDMAIL "E-mail :$mail\n" or die ("mail :$!");
print SENDMAIL "Òåë. íîìåð : $tel_number\n" or die ("mail :$!");
print SENDMAIL "Ôàêñ : $fax_number \n" or die ("mail :$!");
print SENDMAIL "Èíòåðåñóþùèé òîâàð : $interested_with \n" or die ("mail :$!");
print SENDMAIL "Êîììåíòàðèè : $comments \n" or die ("mail :$!");
close(SENDMAIL) or die($!);
print "Location: http://****ok.htm \n\n";



обьясните что это такое пожалуйста. 

Автор: Itsys 11.3.2008, 15:39
Считываются параметры из отправленной формы спомощью CGI
Цитата(Qwesa @  11.3.2008,  15:17 Найти цитируемый пост)
$company=$q->param('company');
$contact=$q->param('contact');
$address=$q->param('address');
$mail=$q->param('mail');
$tel_number=$q->param('tel_number');
$fax_number=$q->param('fax_number');
$interested_with=$q->param('interested_with');
$comments=$q->param('comments');


Готовится и отправлется сообщение
Цитата(Qwesa @  11.3.2008,  15:17 Найти цитируемый пост)
open(SENDMAIL, "|$sendmail $mail_to") or die ("mail :$!");
print SENDMAIL "From: $from\n" or die ("mail :$!");
print SENDMAIL "To: $mail_to\n" or die ("mail :$!");
print SENDMAIL "Subject: from $from\n" or die ("mail :$!");
print SENDMAIL "Êîìïàíèÿ : $company\n" or die ("mail :$!");
print SENDMAIL "Êîíòàêòû:$contact\n" or die ("mail :$!");
print SENDMAIL "Àäðåñ :$address\n" or die ("mail :$!");
print SENDMAIL "E-mail :$mail\n" or die ("mail :$!");
print SENDMAIL "Òåë. íîìåð : $tel_number\n" or die ("mail :$!");
print SENDMAIL "Ôàêñ : $fax_number \n" or die ("mail :$!");
print SENDMAIL "Èíòåðåñóþùèé òîâàð : $interested_with \n" or die ("mail :$!");
print SENDMAIL "Êîììåíòàðèè : $comments \n" or die ("mail :$!");
close(SENDMAIL) or die($!);


И перенаправляется браузер на указанный адрес
Цитата(Qwesa @  11.3.2008,  15:17 Найти цитируемый пост)
print "Location: http://****ok.htm \n\n";


Вообще то это основы....

Автор: Qwesa 16.3.2008, 15:39
Это для меня в общем темный лес. Еслиб не на ткнулся на этот формат "CGI", то и не знал бы что это Перл. Я вообще в первые сталкиваюсь (вернее я впервые администрирую  такой сайт), где используется Перл, на ряду с тем, что сайт написан довольно не профессионально и в общем просто - )) не считая этого момента.

А не моглибы мне, господа проффесиональные программисты по Perl'а, обьяснить почему как правило применяется данный вариант решения, его плюсы, и есть ли альтернативные варианты для людей не имеющих знаний для работы с Перлом?

Автор: Itsys 16.3.2008, 22:16
Цитата(Qwesa @  16.3.2008,  15:39 Найти цитируемый пост)
почему как правило применяется данный вариант решения, его плюсы

Почему применяется и основной плюс в том, что пользователь, и соответсвенно свякие боты сканирующие интернет не видят реальный e-mail адрес, т.е. пользователь отослать письмо может, но куда не знает

Цитата(Qwesa @  16.3.2008,  15:39 Найти цитируемый пост)
альтернативные варианты для людей не имеющих знаний для работы с Перлом

Переписать все на PHP, VB и т.д. еще есть куча языков, которые работают с CGI, либо написать открытую форму, которая посылает запрос не на файл .pl а сразу на mail:mail@domain.ru

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