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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> формы, скрипты... Обьединение форм, скриптов. 
:(
    Опции темы
r
Дата 19.2.2005, 23:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Приветик Всем!
У меня имеется куча скриптов, в которых содержится вызов форм, их обработка, и т. д.
Причём один к примеру скрипт вываливает форму, проверяет данные уже другой, затем
вызывается третий он вываливает уже другую форму... Количество скриптов растёт, а на
фига енто мне надо?
Внимание вопрос:
Хочу как нибудь обьединить эти скрипты в один, скажем использовать их как функции,
только как мне принимать данные от клиента посредством POST к примеру?
  Вверх
korob2001
Дата 19.2.2005, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

Хочу как нибудь обьединить эти скрипты в один, скажем использовать их как функции,
только как мне принимать данные от клиента посредством POST к примеру?

Принимай с помощью модуля CGI, можно вообщето и в ручную, но модуль CGI надёжнее. Вот пример:
Код

#!/usr/bin/perl
use strict;
use CGI;
my $cgi = new CGI;
my $param1 = $cgi->param("param1");
print $cgi->header( -charset => 'Windows-1251' );
print $cgi->start_html;
print $cgi->b( $param1 );
print $cgi->end_html;

Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
r
Дата 22.2.2005, 00:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Простите за назойливость, код работоспособный, огромное спасибо, не могли-бы Вы
мне обьяснить эту строку:
Код

print $cgi->b( $param1 );

в частности что эта за символ-> b?

Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:51
  Вверх
korob2001
Дата 22.2.2005, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Строка:
print $cgi->b( $param1 );
Метод b, просто оборачивает строку в тэги <B>Строка</B>, т.е. получаем на выходе строку, которая написана полужирным шрифтом.

На самом деле, можно описать всю html страничку, только при промоши модуля CGI. Не используя в программе таких записай:
print "<center><font color='#ff0000'><b>Hello, world!</b></font></center>";
гораздо красивее так:
print $cgi->center( $cgi->font( { -color => '#ff0000' }, $cgi->b("Hello, world!") ) );
Хотя, может это только моё мнение.

Это сообщение отредактировал(а) korob2001 - 22.2.2005, 00:54


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Guest
Дата 22.2.2005, 08:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А я так обычно пишу
Код

$a = param('a');

Так ро моему логичнее и проще

Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:51
  Вверх
korob2001
Дата 22.2.2005, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

Так ро моему логичнее и проще

;))))) Ну это уже кому как, мне например объектно ориентированный подход более по душе. Но можно конечно и так, только в таком случае нужно следить за пространством имён, да бы не было конфликта.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
r
Дата 23.2.2005, 11:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем огромное спасибо, буду про модуль искать мануал.
  Вверх
korob2001
Дата 23.2.2005, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Ищи здесь:
http://forum.vingrad.ru/index.php?showtopic=1167
Спасибо админу.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
r
Дата 23.2.2005, 22:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











1. Там уже качал, и как описывать html теги не видел.
2. И всё равно не получил того что хотел. Вот внизу пример имеется,
получается что как не выдавай форму(с помощью CGI.pm etc...)
все равно данные обрабатывать будет другой скрипт я не прав?


<form method="POST" action="http://localhost/cgi-bin/script.pl">

...


</form>
  Вверх
korob2001
Дата 24.2.2005, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Вот, специально для тебя, набросал рабочий пример, простой, гостевой книги. В нём ты не увидешь ниодного HTML тэга, потому как эта программа написана на чистом CGI. Просто скопируй код ниже и сохрани его в файл с любым именем, толко расширение должно быть как у выполняемого файла, как правило .pl или .cgi. Затем можешь, не о чём не волнуясь, запустить его на выполнение через браузер и протестировать его, все необходимые, дополнительные файлы программа создаст сама. Вообще-то данный код получился немного объёмный, но это я сделал специально, что бы ты понял принцип программирования с помощью модуля CGI.pm. Особого контроля вводимой информации я не делал, так как суть была показать рабочий пример CGI.pm программы, а не её безопасность.
Вот код:
Код

#!/usr/bin/perl -w
use strict;
use CGI;
use Fcntl qw( :flock );

my $file = "messages.txt";

my $cgi = new CGI;

sub start_lock {
   open( BLOCK, ">> lock_file.sem" ) or die $!;
   flock( BLOCK, LOCK_EX );
}

sub stop_lock {
   close( BLOCK );
}

sub show_form {
   print $cgi->start_html( -title => 'Гостевая книга' ),
         $cgi->start_center,
         $cgi->start_form(),
         $cgi->table( { -width => 400,
                        -border => 1,
                        -cellpadding => 5,
                        -cellspacing => 0 },
            $cgi->Tr( [
               $cgi->td( { -align => 'center',
                           -bgcolor => '#555555',
                           -colspan => 2 },
                   $cgi->font( { -color => '#ffffff',
                                 -size => '+12' },
                       $cgi->b("Гостевая книга"),
                   ),
               ),
            ] ),
            $cgi->Tr( [
              $cgi->td( { -align => 'left' }, [
                       $cgi->b("Ваше имя:"),
                       $cgi->textfield( -name => 'name',
                                        -size => 35,
                                        -override => 1 ),
              ] ),
            ] ),
            $cgi->Tr( [
              $cgi->td( { -align => 'left' }, [
                       $cgi->b("Ваша фамилия:"),
                       $cgi->textfield( -name => 'family',
                                        -size => 35,
                                        -override => 1 ),
              ] ),
            ] ),
            $cgi->Tr( [
              $cgi->td( { -align => 'left',
                          -valign => 'top' }, [
                       $cgi->b("Сообщение:"),
                       $cgi->textarea( -name => 'mess',
                                       -rows => 5,
                                       -cols => 30,
                                       -override => 1),
              ] ),
            ] ),
            $cgi->Tr( [
              $cgi->td( { -align => 'center',
                          -bgcolor => '#555555',
                          -colspan => 2 },
                       $cgi->submit( -name => 'send',
                                     -value => 'Отправить' ),
                       $cgi->reset( -value => 'Очистить' ),
              ),
            ] ),
         ),
         $cgi->end_form(),
         $cgi->br(), $cgi->br();

         if ( -e $file ) {
              open( F, "< $file" ) or die $!;
               while ( <F> ) {
                  my( $name, $family, $mess, $tm ) = split("µ");
                  print $cgi->table( { -width => 400,
                                       -cellpadding => 5,
                                       -cellspacing => 0,
                                       -border => 1 },
                             $cgi->Tr( [
                                 $cgi->td( { -width => '100%',
                                             -align => 'left',
                                             -bgcolor => '#555555' },
                                     $cgi->b( { -style => "color: #ffffff" }, "$family $name"),
                                 ),
                             ] ),
                             $cgi->Tr( [
                                 $cgi->td( { -width => '100%',
                                             -align => 'left',
                                             -bgcolor => '#cccccc' },
                                     $cgi->b( $mess ),
                                 ),
                             ] ),
                             $cgi->Tr( [
                                 $cgi->td( { -width => '100%',
                                             -align => 'left',
                                             -bgcolor => '#555555' },
                                     $cgi->b( { -style => "color: #ffffff" }, $tm ),
                                 ),
                             ] ),
                        ),
                        $cgi->br, $cgi->br;
               }
            close( F );
         }
         print $cgi->end_center,
               $cgi->end_html;
}

sub add_mess {
   my $name = $cgi->param('name');
   my $family = $cgi->param('family');
   my $mess = $cgi->param('mess');
   my $tm = localtime;

   $mess =~ s/\n/$cgi->br/eg;

   # Делаем не большую обработку информации
   for ( $name, $family, $mess ) {
         s/^\s+//;
         s/\s+$//;
         s/\s+/ /g;
         s/µ//g;
   }

   unless ( $name or $family ) {
            $name = "пользователь";
            $family = "Анонимный";
   }

   start_lock;
   open( F, ">> $file" ) or die $!;
     print F "${name}µ${family}µ${mess}µ${tm}\n";
   close ( F );
   stop_lock;
}

print $cgi->header( -charset => 'Windows-1251' );
unless ( $cgi->param('send') eq 'Отправить' ) {
        show_form;
} else {
        add_mess;
        show_form;
}

Если возникнут вопросы, пиши сюда. Постараюсь пояснить.
Удачи.

Это сообщение отредактировал(а) korob2001 - 21.12.2005, 00:27


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Opik
Дата 25.2.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



korob2001
можешь объяснить 2 момента:
Код

  for ( $name, $family, $name ) {
        s/^\s+//;
        s/\s+$//;
        s/\s+/ /g;
        s/µ//g;
  }

и
Код

  unless ( $name or $family ) {
           $name = "пользователь";
           $family = "Анонимный";
  }

PM MAIL Skype   Вверх
GoodBoy
Дата 25.2.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Opr
Код
for ( $name, $family, $name ) {
       s/^\s+//;
       s/\s+$//;
       s/\s+/ /g;
       s/µ//g;
 }

поочередно каждая из переменных $name, $family и $name чистится от пробелов в начале, конце, последовательности из нескольких пробелов заменяются на 1 пробел, а символ µ удаляется...

хотя зачем 2 раза $name... видимо просто описка...

Код
unless ( $name or $family ) {
          $name = "пользователь";
          $family = "Анонимный";
 }

если не заданы переменные $name и $family - то им присваюваются значения.

unless ( $name or $family ) - то же самое, что и if ( !$name and !$family )


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
korob2001
Дата 25.2.2005, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Opr - GoodBoy уже ответил на твои вопросы, я опоздал. ;))))

GoodBoy - точно я 2 раза указал переменную $name, на самом деле я имел ввиду перменную $mess на месте второй переменной $name. Уже исправил.

Это сообщение отредактировал(а) korob2001 - 25.2.2005, 17:51


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Opik
Дата 26.2.2005, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



А, и
Код

use Fcntl qw( :flock );

это для работы с файлами?
PM MAIL Skype   Вверх
korob2001
Дата 26.2.2005, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

это для работы с файлами?

Да, это для того, что бы блокировать файл при открытии для записи. Используется здесь:
Код

sub start_lock {
  open( BLOCK, ">> lock_file.sem" ) or die $!;
  flock( BLOCK, LOCK_EX );
}

sub stop_lock {
  close( BLOCK );
}

если нужно заблокировать файл, делаем там:
Код

start_lock;    # Блокируем файл

# ЗДЕСЬ ОТКРЫВАЕМ ФАЙЛ
# Делаем запись
# ЗАКРЫВАЕМ ФАЙЛ

stop_lock;    # Разблокируем файл

Можно было бы сделать это и в ручную, но лично я предпочитаю юзать модуль Fcntl, тем более он входит в стандартный пакет Perl.

Это сообщение отредактировал(а) korob2001 - 26.2.2005, 16:41


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


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

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


 




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


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

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