Автор Тема: формы  (Прочитано 3182 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
формы
« : 23 Января 2006, 17:37:53 »
всем приветик. ;)
 вот интересно - кто как с этим разбирается.
Есть форма, собираемая скриптом же. Т.е. она динамична.
Предположим есть в ней пару десятков чекбоксов, к ним же по селекту и, т.о., на скрипт она отдает, например вот такое:
hide_1=2
desc_2=7
desc_1=5
Т.е. цифровой ряд в конструкции _цифра может быть каким угодно, а может вообще не быть параметра, как в примере нет hide_2.
Как бы мне их проверять? Не только их наличие, но и группировать: hide_1 => desc_1 ну и т.д.
Ну забрала я в хэш все, что пришло из формы и чего?
if (exists(что?)) для большого ряда цифр проверять циклом значение hide_цифра?! фи. некрасиво. Да и группировать потом как-то надо.
М.б. есть какие-то идеи?
пока-пока. :)

Оффлайн Kannabismus

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 18
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
формы
« Ответ #1 : 25 Января 2006, 00:46:48 »
$hide_1=2;
$desc_2=7;
$desc_1=5;

my $max_value=4;
for my $digit (1..$max_value){
   for my $prefix (qw(hide_ desc_)){
      if(defined ${"$prefix$digit"}){
         print qq! $prefix$digit=!.${"$prefix$digit"};
      }
   }
   print "\\n";
}

Для CGI.pm соотв. ${"$prefix$digit"} заменить на param("$prefix$digit")
Группируете во внутреннем цикле (если не понятно).

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
формы
« Ответ #2 : 25 Января 2006, 12:43:32 »
Kannabismus
спасибо. :)
моё решение выглядит приблизительно так же. если интересно - могу показать. но я просто подумала, что - возможно - есть какое-то иное - более красивое, что ли. Не знаю как сказать чем именно меня не устраивает такой подход... он неуниверсален, что ли. Видите - он завсит целиком вот от этого: my $prefix (qw(hide_ desc_)) в Вашем случае.
в моем это выглядит так: my @arr=qw(delay_ title_ hide_);
я люблю универсальность кода. :) но, судя по всему в данном случае ее не добиться.
пока-пока. :)

Оффлайн Kannabismus

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 18
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
формы
« Ответ #3 : 25 Января 2006, 15:06:37 »
Тогда посмотрите на такой вариант:

use CGI qw/:standard/;

param(\'hide_1\',2);
param(\'desc_2\',7);
param(\'desc_1\',5);

my $arr;

# группировка
for(param){
   /^(.+)_(\\d+)$/ or warn "unrecognized param $_";
   $arr->[$2]->{$1}=param($_);
}

# вывод
for my $i (0..$#$arr){
   next unless defined $arr->[$i];
   print qq!$_$i -> $arr->[$i]->{$_} ! for sort keys %{$arr->[$i]};
   print "\\n";
}

perl test.pl
desc1 -> 5 hide1 -> 2
desc2 -> 7


Для удобства можно использовать CGI::FormBuilder

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28