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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка форм, Кто как и чем 
:(
    Опции темы
Paul56
Дата 15.8.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Уважаемые коллеги, доброго времени суток.
 
Хочется увидеть кто как и какими методами проверяет поля форм на стороне сервера  (обязательные и не обязательные) ?
PM ICQ   Вверх
kavkaz
Дата 15.8.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как то вы абстрактно спросили. Какого рода проверка? заполнено/не заполнено? содержит/не содержит нужные/ненужные символы?

Если не ошибаюсь, то тут все специфично.

Может тут помогут вам с вашей задачей если опишите её подробнее?
PM MAIL ICQ Skype   Вверх
Paul56
Дата 15.8.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да я хотел поинтересоваться кто как и какими способами проверяет на заполнение формы.
Например просто на заполнение.
Есть формы где обязательно заполнение а есть не обязательные.

Чтобы разговор получился более детальным например форма регистрации на сайте:
Имя Фамилия логин пароль капча ...

Это сообщение отредактировал(а) Paul56 - 15.8.2009, 23:25
PM ICQ   Вверх
kavkaz
Дата 16.8.2009, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



пробегаетесь в цикле по списку полей и смотрите: заполнено/незаполнено
если нужно фиксировать хотя бы одно незаполненное поле, то выходите из цикла при первом же найденном пустом поле
если нужно указать какие именно поля пустые, то при каждой проверке пишите ошибку ("не заполнено имя", "не указан пароль")

вам модуль на cpan нужен?)
PM MAIL ICQ Skype   Вверх
Paul56
Дата 16.8.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Буду признателен, если подскажите.
Дело в том что я хотел уточнить этот метод, который вы описали. Я не знал какие модули есть на сипане для проверки форм, поэтому написал вручную и мне стало жутко интересно, как другие делают это smile

Спасибо за ответ.
PM ICQ   Вверх
kavkaz
Дата 16.8.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Другие делают проверки сами. На счет cpan я сказал с сарказмом. 
Когда вам нужно будет обрабатывать сложные формы, вы сами уже разберетесь что вам нужнее.
Вы приведите кусок кода который вас смущает, народ покритикует и вы сможете сделать выводы.
Смелее smile
PM MAIL ICQ Skype   Вверх
Paul56
Дата 16.8.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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




Код

#Описываю переменную для Template-toolkit:
#1 - Вариант

$vars->{'marker'} = sub {
      my @ArrayMsg = qw(name fio tel cap blabla ...) #Поля можно впринципе передовать в подпрограмму из шаблона;

     foreach my $line (@Array) {
              my $i = 1 if param($line) eq '';
     }
    return 1 if $i;
    return 0 if ! $i;
};


#2 - Вариант

$vars->{'marker'} = sub {
      my @ArrayMsg = qw(name fio tel cap blabla ...);

     foreach my $line (@Array) {
              push @ArrayErrMsg, $line if param($line) eq '';
     }

    return \@ArrayErrMsg; 
};

PM ICQ   Вверх
DaemonSuw
Дата 16.8.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



my @ArrayMsg = qw(name fio tel cap blabla ...); - вот тут мне кажется удобнее с хешом работать 
(
  name => 0,
  fio => 0,
);
и т.д. 
1- есть данные, 0 - нету

Всякие поля типа name fio - можно еще кастомно проверять по шаблону регекспом!
тогда можно использовать тот же хеш, только
0 - все хорошо
"номер ошибки из словаря" - все плохо
если есть ошибки не нуливые значения хеша - выводить пользователю ошибки...
Словарик можно завести в базе, отдельном файле... вид его (номер ошибки => подробное описание)...

Это сообщение отредактировал(а) DaemonSuw - 16.8.2009, 13:42
PM MAIL ICQ   Вверх
kavkaz
Дата 16.8.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как обычно бывает, просто проверить есть/нет значение поля - мало, нужно проделать какие то действия с данными (код проверки для капчи, пароль сверить) при этом надо, чтобы при допустим неверно введенной каптчи, пароль не проверять или просто приостановить ход действий а вывести пользователю сообщение об ошибки. Для таких случаев кто то использует eval. Вот пример навскидку:
Код

my %cfg = (
   'err' => {
      101   => 'Неверно введен код подтверждения',
      102   => 'Неверно введен пароль'
   },
   'warn' => {
      301   => 'Не указана фамилия пользователя',
      302   => 'Не указано имя пользователя'
   },
   'msg' => {
      201   => 'Пользователь успешно добавлен'
   }
);
my $prm = $cgi->Vars();
my (@warn,@msg);
eval {
   push @warn, 301 unless $prm->{'last_name'};
   push @warn, 302 unless $prm->{'first_name'};
   #
   # какой то код, например преобразующий namе для вставки в бд
   # или генерирующий код для проверки captcha
   #
   die 101 if ($prm->{'captcha'} != $check_captcha);
   #
   # какой то код для проверки логина пароля
   #
   die 102 if ($prm->{'password'} != $user_pasword);
   #
   # прошли все проверки – можем записывать данные в бд
   #
   push @msg, 201;
};
my ($err,$warn,$msg);
if ($@) {
   my $code = $@ + 0;
   # зафиксирована ошибка с обязательным полем
   $err = $cfg{'err'}{$code};
}
$warn = join "\n", @{ $cfg{'warn'} }{ @warn } if @warn;
$msg = join "\n", @{ $cfg{'msg'} }{ @msg } if @msg;


Это сообщение отредактировал(а) kavkaz - 16.8.2009, 14:08
PM MAIL ICQ Skype   Вверх
gcc
Дата 16.8.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



CRUD

Catalyst::Controller::FormBuilder от CGI::FormBuilder
Catalyst::Controller::FormFu от HTML::FormFu
Catalyst::Plugin::Form::Processor от Form::Processor
Rose::HTML::Form
Catalyst::Plugin::CRUD
CatalystX::ListFramework::Builder
Код

CatalystX::CRUD::yuI

BasicCRUD




Это сообщение отредактировал(а) gcc - 16.8.2009, 14:25
PM WWW ICQ Skype GTalk Jabber   Вверх
od0201
Дата 16.8.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как это делаю я. Все ручками.
!!! Внимание !!! Код может содержать ошибки, так как был частично скопирован с других прог.
Код

#!"D:\OD\xampp\perl\bin\perl.exe"
use CGI::Carp qw(fatalsToBrowser); 
use locale; 
use warnings; 
     my $query; 
     %in;
     if($ENV{"REQUEST_METHOD"} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); }
     else {$query = $ENV{'QUERY_STRING'};}   

     my @params = split(/&/, $query);
     foreach my $p(@params)
     {   
       (my $name,my $value) = split(/=/, $p);
       $value =~ tr/+/ /;
       $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
       if($value ne ''){$in{$name} = $value;}
     }
print "Content-type: text/html\n\n"; 
print "<meta http-equiv='Content-Type' content='text/html; charset=Windows-1251'>"; 
######### проверка конкретных полей
      @err;
      if (not $in{ege}=~m/^\+?\d*\.?[0]*$/) {
        $err[$#err+1]= "В поле возраст не положительное целое число" 
      }  
      if (not $in{mani}=~m/^\+?\d*\.?\d?\d?[0]*$/){
        $err[$#err+1]= "В поле зарплата не положительное десятичное, округленое до сотен число ($par[$i])"
      }        
########### Вывод ошибок
for $i(0..#$err){
  print $err[$i]."<p>";
}

PM MAIL   Вверх
Paul56
Дата 17.8.2009, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Благодарю, сделаю свои выводы. Спасибо всем кто принял участие в сие дискуссии smile
PM ICQ   Вверх
arto
Дата 17.8.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



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


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

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


 




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


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

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