Модераторы: 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   Вверх
r
Дата 6.3.2005, 10:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Потрясающе, что называется красота в программировании. Если конечно есть возможность дай линк, на тот мануал где ты это
прочитал про CGI.pm. У меня есть, но какой-то кривой и неполный. Сразу-же начал переписывать все скрипты по новой. Возникли вопросы. Буду задавать их постепенно.
Код

unless ( $cgi->param('send') eq 'Отправить' ) {
    fun_1;
} else {
    fun_2;
}

Этот пример кода только с одной формой, а у меня их несколько, и в зависимости от данных переданных пользователем будет вызыватся какая-то из них, как мне поочерёдно принимать данные от них? Спасибо.

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


Эксперт
****


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

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



Цитата

Если конечно есть возможность дай линк, на тот мануал где ты это прочитал про CGI.pm.

Сылку я уже давал, так же читай книги по CGI программированию, особенно хочется выделить такие как:
1. Программирование на CGI.pm ( эта книга написана Линкольном Штэйном, автором модуля CGI.pm ).
2. CGI программирование на Perl (Скотт Гулич, Шишир Гундаварам, Гюнтер Бирзнекс).
3. Разработка CGI приложений на Perl ( Кевин Мельтцер, Брент Михальски ).
Цитата

Этот пример кода только с одной формой, а у меня их несколько, и в зависимости от данных переданных пользователем будет вызыватся какая-то из них, как мне поочерёдно принимать данные от них?

Даже если у каждой формы поля с одинаковыми именами, то можно присвоить разные имена для кнопок типа SUBMIT, по ним определять какая из форм была передана CGI программе.


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


Unregistered











Цитата(korob2001 @ 6.3.2005, 16:04)
Даже если у каждой формы поля с одинаковыми именами, то можно присвоить разные имена для кнопок типа SUBMIT, по ним определять какая из форм была передана CGI программе.

Можно с этого момента поподробнее:))), т. к. как я только не пробовал.
Код

f($cgi->param('send')){
     show_form;
}else{
     fun1;
     fun2;
}

if ( $cgi->param('query') ) {
     fun3;
} else {
     fun4;      
}

iЭтот код выводит две формы, не дожидаясь пока получу параметры по первой, запутался...

Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:49
  Вверх
r
Дата 6.3.2005, 22:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нашёл перевод CGI.pm, но там пример, как получить параметры один, и совершенно не подходящий. Нужен хоть какой нибудь пример, как выдать форму и тут-же получить
данные из этой формы, и так раза три в одном скрипте. Пример который из гостевой книги непонятен:
Код

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


Я тут кое-что придумал правда где-то ошибка...
Код

unless( my $par_1=$cgi->param()){
if($par eq 'send'){
show_form2;
}elsif($par eq 'query'){
show_form3;
}
show_form1;
}


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


Эксперт
****


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

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



Насколько я поня, у тебя есть несколько форм на одной странице. Ты хочешь узнать какая из форм была передана, для этого присваиваешь разные имена кнопкам SUBMIT. Например имя этой кнопки для первой формы такое name => "form1", для кнопки второй формы name => "form".

Теперь можно определить, какая из форм была переданна, таким условием.

Код

if ( $cgi->param('form1') eq 'Отправить' ) {
    # Делаем что-то с данными полученными от первой формы
} elsif ( $cgi->param('form2') eq 'Отправить' ) {
    # Делаем что-то с данными полученными от второй формы
} else {
    # Этот блок выполним в том случае, если никаких данных не было передано.
}

Можно было бы сделать и такую проверку:
Код

if ( defined $cgi->param('form1') ) {
    # Делаем что-то с данными полученными от первой формы
} elsif ( defined $cgi->param('form2') ) {
    # Делаем что-то с данными полученными от второй формы
} else {
    # Этот блок выполним в том случае, если никаких данных не было передано.
}

Удачи.


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


Unregistered











Да, всё заработало, спасибо. Вопросы ещё остались. Первое, странно как-то у тебя блокируются файлы, где-то читал что блокировать надо дескриптор файла. Второе
раньше когда я не знал что такое CGI.pm у меня был такой код:

Код

open(FL,'<../www/file.txt')|| die "file.txt ERORR!!!\n";
while(<FL>){
print "<a href='/script.pl'>";
print;
print "</a><br>";
}
close(FL);


То есть открывал файл и выводил всё содержимое в броузер причем как видишь создавал линки на это содержимое с указанием скрипта который это обрабатывал. Теперь пытаясь обьединить все скрипты в один ума не приложу как это переписать. Скрипт просто сохранял текст линка в файл. Спасибо.

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


Эксперт
****


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

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



Цитата

Да, всё заработало, спасибо. Вопросы ещё остались. Первое, странно как-то у тебя блокируются файлы, где-то читал что блокировать надо дескриптор файла.

Всё верно, это когда блокируешь файлы в ручную. Я пользуюсь стандартным модулем Fcntl и нахожу этот способ более удобным. А вообще-то это дело вкуса. Как этот способ работает, я уже описывал ранее, в этой же теме.
Цитата

open(FL,'<../www/file.txt')|| die "file.txt ERORR!!!\n";
while(<FL>){
print "<a href='/script.pl'>";
print;
print "</a><br>";
}
close(FL);

Я не дома, потому нижеприведённый код не тестировал, но он не сильно большой, потому думаю ошибок не будет.
Код

open(FL,'<../www/file.txt')|| die "file.txt ERORR!!!\n";
while ( <FL> ) {
    print $cgi->a( { -href => '/script.pl' }, $_ ), $cgi->br;
}
close( FL );

Удачи.

PS: возникнут трудности, пиши. И ещё:
При вставке кода, пользуйся кнопкой "Код". Предидущие посты я подправил, но как ты наверное понимаешь, я не буду делать это за тебя, постоянно. Все последующие сообщения в которых будет вставлен код без подсветки, будут удаляться. Облегчи труд всех участников, хотя бы этим.

Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:57


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


Unregistered











Привет korob2001, ты неправильно понял, смысл не в том как вставить линк. А в том что теряется идея обьединить все скрипты в один получается все равно вот так:
Код

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

и вызывается другой скрипт, и не важно, сделано как линк или через форму.
Но это не важно, подумаешь будет два скрипта раз CGI.pm не совершенен.

Теперь другой вопрос вот html:
Код

<table width="100%" cellspacing="0" cellpadding="2" border="1">
 <tr><!-- Row 1 -->
   <td bgcolor="#0000FF">&nbsp;</td>
   <td bgcolor="#FF0000">&nbsp;</td>
   <td bgcolor="#0000FF">&nbsp;</td>
   <td bgcolor="#FF0000">&nbsp;</td>
 </tr>
 <tr><!-- Row 2 -->
   <td bgcolor="#FF0000">&nbsp;</td>
   <td bgcolor="#0000FF">&nbsp;</td>
   <td bgcolor="#FF0000">&nbsp;</td>
   <td bgcolor="#0000FF">&nbsp;</td>
 </tr>

</table>


А вот как с помощью CGI.pm:
Код

#!C:/Perl/bin/perl -w
use CGI;
my $cgi = new CGI;

sub show_form{
print $cgi->table( { -width => 400, -height => 400, -border => 1, -cellpadding => 5, -cellspacing => 0 }, ),
$cgi->Tr( [
$cgi->td( { -align => 'center', -bgcolor => 'blue',  -colspan => 2 },),
$cgi->td( { -align => 'center',  -bgcolor => 'red', -colspan => 2 },),
$cgi->td( { -align => 'center', -bgcolor => 'blue',  -colspan => 2 },),
$cgi->td( { -align => 'center',  -bgcolor => 'red', -colspan => 2 },),
  ] ),
$cgi->Tr( [
$cgi->td( { -align => 'center', -bgcolor => 'blue',  -colspan => 2 },),
$cgi->td( { -align => 'center',  -bgcolor => 'red', -colspan => 2 },),
$cgi->td( { -align => 'center', -bgcolor => 'blue',  -colspan => 2 },),
$cgi->td( { -align => 'center',  -bgcolor => 'red', -colspan => 2 },),
  ] ),

};


print $cgi->header( -charset => 'Windows-1251' );
print $cgi->start_html;
show_form;
print $cgi->end_html;


совершенно разное отображение, количество столбцов разное. Спасибо.
  Вверх
r
Дата 8.3.2005, 14:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Guest @ 8.3.2005, 10:50)
Но это не важно, подумаешь будет два скрипта раз CGI.pm не совершенен.

Виноват маэстро, простите, кривые руки.

Код

print $cgi->a( { -href => "script.pl?name='$_'"}, $_ ), $cgi->br;


Вот что мне надо было. Правда вот эти штуки остались ' ' вокруг текста в файле, ну это мелочи. Ну и здесь подправил:

Код

print $cgi->header( -charset => 'Windows-1251' );
if ( defined $cgi->param('form1') ) {
form1;
zak_vin;
} elsif ( defined $cgi->param('form2') ) {
form2;
}if ( defined $cgi->param(m/\sform3/) ) {
form3;
}else {
show_form;
};


А по таблицам вопрос не закрыт. Спасибо.

  Вверх
korob2001
Дата 9.3.2005, 04:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Вот что мне надо было. Правда вот эти штуки остались ' ' вокруг текста в файле, ну это мелочи.

Это само собой разумеется, убери эти символы из своего кода. Другими словами, просто замени эту строку:
Код

print $cgi->a( { -href => "script.pl?name='$_'"}, $_ ), $cgi->br;

на такую
Код

print $cgi->a( { -href => "script.pl?name=$_"}, $_ ), $cgi->br;

И найди отличие, тогда всё станет на свои места.
Цитата

А по таблицам вопрос не закрыт. Спасибо.

Не знаю на сколько правильно я тебя понял, постараюсь пояснить на примере:
Код

#!/usr/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;

# В следующем массиве укажи все нужные цвета, они будут чередоваться
my @colors = qw( red blue green yellow darkviolet );

# Следуюцая подпрограмма будет при каждом её вызове,
# по очереди, менять цвет  на следующий по индексу и
# возвращать тот цет, который она заменила.
sub change_color {
   my $color = shift @colors;
   # Работаем со стёком
   push( @colors, $color );
   return \$color;
}

print $cgi->header( -charset => "Windows-1251" );
print $cgi->start_html( -title => "Change Colors" ),
     $cgi->start_table( -border => 1 ),
     $cgi->start_Tr;

for my $num ( 0..99 ) {
     print $cgi->end_Tr, $cgi->start_Tr unless ($num % 10);
     print $cgi->td( { -width => 100,
                       -bgcolor => ${ change_color() },
                       -align => "center" } , "Ячейка номер $num" );
}

print $cgi->end_Tr,
     $cgi->end_table,
     $cgi->end_html;

Если хочешь выводить только 2 цвета, просто удали не нужные цвета из массива @colors и добавь дополнительный вызов функции в условной конструкции unless. Таким образом:
Код

#!/usr/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;

# В следующем массиве укажи все нужные цвета, они будут чередоваться
my @colors = qw( red blue );

# Следуюцая подпрограмма будет при каждом её вызове,
# по очереди, менять цвет  на следующий по индексу.
sub change_color {
   my $color = shift @colors;
   # Работаем со стёком
   push( @colors, $color );
   return \$color;
}

print $cgi->header( -charset => "Windows-1251" );
print $cgi->start_html,
     $cgi->start_table( -border => 1 ),
     $cgi->start_Tr;

for my $num ( 0..99 ) {
     unless ($num % 10) {
              change_color;
              print $cgi->end_Tr, $cgi->start_Tr;
     }
     print $cgi->td( { -width => 100,
                       -bgcolor => ${ change_color() },
                       -align => "center" } , "Ячейка номер $num" );
}

print $cgi->end_Tr,
     $cgi->end_table,
     $cgi->end_html;

Для чего мы добавили дополнительный вызов функции в unless, догадайся сам. Поэксперементируй с этим кодом, поробуй не добавлять вызов change_color, пробуй изменить условие в цикле и т.п.
Удачи.

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


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


Unregistered











Привет Всем, особенно Комодераторам, последний пример был супер, не в плане цвета, а как пример, я переписал все формы!!!!!!! Думаю поискать книгу в инете, про этот чудный модуль CGI.pm, а то в нашем городке об этой книге никто даже не слышал, кто нибудь если знает хороший магазин пишите сюда. Ну и ещё есть вопросик, никак не могу убрать из строки первый символ может это из-за кирилицы. Спасибо.
  Вверх
korob2001
Дата 13.3.2005, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Допустим есть такая строка "тпривет, мир!", на выходе мы хотим видеть её, в таком виде "Привет, мир!".
Код

#!/usr/bin/perl -w
use strict;
my $str = "тпривет, мир!";
$str = substr( $str, 1 );
print $str;

теперь наша строка выглядит так "привет, мир", для того что бы преобразовать первый символ в верхний регистр, можно воспользоваться функцией ucfirst(), либо заюзать эскейп-последовательности, есть и другие способы, но эти пожалуй семые эффективные.
Код

#!/usr/bin/perl -w
use strict;
my $str = "тпривет, мир!";
$str = ucfirst( substr( $str, 1 ) );
print $str;

Заметь, что ничего не изменилось, строка так и осталась такой "привет, мир!". Причина в том, что некоторые функции Perl не всегда верно работают с символами кирилицы и теми языками где имспользуются диактрические знаки. Нам просто нужно подключить прагму use locale, она даёт компилятору команду использовать национальные установки из POSIX, её можно так же и отменить, таким способом no locale. Подправим вышеприведённый код:
Код

#!/usr/bin/perl -w
use strict;
use locale;
my $str = "тпривет, мир!";
$str = ucfirst( substr( $str, 1 ) );
print $str;

Теперь строка будет выглядеть так "Привет, мир!".
Вот так можно добиться того же эффекта, с помощью эскейп-последовательностей:
Код

#!/usr/bin/perl -w
use strict;
use locale;
print "\uпривет, мир!\n";
# или так
print "\Uп\Lривет, мир!\n";

Но это, на мой взляд не самый удобный способ, куда удобнее работать с функцией ucfirst(), хотя это тебе решать, как ты будешь обрабатывать строку.

Удачи.

Это сообщение отредактировал(а) korob2001 - 13.3.2005, 23:02


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


Unregistered











Спасибо, буду пробовать. Зайду если что.
  Вверх
r
Дата 23.3.2005, 22:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет Всем Постояльцам, тут вот закавыка вышла, первый символ я удалил, все нормально, а проблема вот в чем: у меня есть список у которого строки пронумерованы и когда необходимо удалить одну цифру это работает, но когда надо удалить например вот такое число: 1236?
С регулярными выражениями никак не подружусь. Спасибо.

P.s. У Вас ошибка на странице выскакивает. smile
  Вверх
korob2001
Дата 23.3.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Привет Всем Постояльцам, тут вот закавыка вышла, первый символ я удалил, все нормально, а проблема вот в чем: у меня есть список у которого строки пронумерованы и когда необходимо удалить одну цифру это работает, но когда надо удалить например вот такое число: 1236?
С регулярными выражениями никак не подружусь. Спасибо.

Код

#!/usr/bin/perl -w
use strict;
my $str = "1225 Просто текст";
$str =~ s/^\s*?\d+\s*//;
print $str;

Этот код немного излишен, такак его цель удалить не просто цифру в начале строки, а ещё и символы пробела если таковые есть.

Удачи

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


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


Unregistered











Спасибо, пашет. Когда-же я таким вумным стану? smile
  Вверх
korob2001
Дата 23.3.2005, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Спасибо, пашет. Когда-же я таким вумным стану?

Следуй заветам Ильича. smile


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
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.1318 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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