Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помощь в разборе CGI-скрипта, Разбор CGI-скрипта 
:(
    Опции темы
And1
Дата 8.11.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.11.2006

Репутация: нет
Всего: нет



Здравствуйте. 
Я в основном разрабатываю дизайн и работаю с HTML. Но мой работодатель хочет, чтобы я разработал программу на PERL по обработки данных из форм. 
 Я вроде что-то "собрал" но не уверен, что правильно. Мне необходимо чтобы программа обрабатывала данные из формы и отправляла на e-mail администратору. Также чтобы посетитель получал уведомление об успешном отправлении или автоматически переходил на другую страницу сайта.
Я очень надеюсь, на помощь и прошу консультации у грамотных людей. Подскажите где ошибки. Как их исправить?
Привожу CGI-программу:

Код

#!/usr/bin/perl
$mail_prog = '/usr/sbin/sendmail';
$receipient = "tabcom\@adsl.baltnet.ru";
&GetFormInput;
$user = $FORM{'username'}; $email = $FORM{'useremail'}; $comment = $FORM{'usercomment'}; 
&transfer;
exit (0); 
sub GetFormInput {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@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;
$FORM{$name} = $value;
}
} 
sub transfer {
open (MAIL, "|$mail_prog $receipient");
print MAIL "Subject: web mail\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-Type: text/plain; charset=\"koi8-r\"\n";
print MAIL "Content-Transfer-Encoding: 8bit\n";
print MAIL "\n\n";
print MAIL "Name: $user\n";
print MAIL "E-mail: $email\n";
print MAIL "Comment: $comment\n";
close (MAIL);
}


PM MAIL   Вверх
everyone
Дата 8.11.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 24.3.2004

Репутация: нет
Всего: 4



Код

#!/usr/bin/perl

use CGI;

&sendMail(&getQuery());

sub getQuery:
{
my $query = new CGI;

my %inf;
$inf{'username'} = $query->param('username');
$inf{'usermail'} = $query->param('usermail');
$inf{'usercomment'} = $query->param('usercomment');

return %inf;
}

sub sendMail:
{
my %dat=@_;
open (SENDMAIL, "|/usr/sbin/sendmail -t") or die "sendmail undefine";
#генерация письма
close(SENDMAIL) or warn("Sendmail didn't closed simply");
}


Лучше использовать модуль CGI, не возникнет проблем если POST заменить на GET и наоборот, код получается короче и яснее.
Ошибки при вызове sendmail следует предусмотреть, и прежде die и после warn лучше вывести страницы об ошибке в браузер клиента.
Данные лучше верифицировать на содержание и длину, пользователи - народ непредсказуемый))
Всё остальное касается лишь стиля программирования и личного вкуса.
--------------------
Что написал, то написал (Пилат)
PM ICQ Skype   Вверх
Materium
Дата 20.12.2006, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 4.12.2006
Где: Питер

Репутация: нет
Всего: 2



And1 выше всё прально сказано, единственное насчёт генерации письма. Как ты это сделаешь?
Я делал так: 
Код

print SENDMAIL <<MAIL;
%inf
MAIL

правда я не пользовал хэш, а разбивал по переменным:
Код

print SENDMAIL <<MAIL;
To: $mymail
From: $fromMail
Subject: Вам письмо
$text
MAIL

Я не пробовал хэшем не знаю, но в моём случае конечно нужно в переменных почтовых адресов $mymail и $fromMail защитить симлов @, иначе при интерполяции Perl будет искать массив, а должен думать что это простой символ.
То есть перед отправкой почты 
Код

$fromMail =~ s/@/\@/;


everyone  поправиь плиз если я напутал ))) или добавь полезных слов в мой ответ
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok";
PM MAIL   Вверх
nitr
Дата 21.12.2006, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



Materium, небольшой совет, мне его тоже в своё время давали smile
Пост месячной давности, он так сказать теряет актуальность, не стоит "поднимать" их.
Думаю не ндо разъяснять зачем и почему. Создавай топик (если поиск не дал результата ;) )

з.ы.: Хотя может и неправ smile Но всё же...



--------------------
PM   Вверх
Materium
Дата 21.12.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 4.12.2006
Где: Питер

Репутация: нет
Всего: 2



Ок понял
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok";
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1196 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.