Thread Data::FormValidator trim Funktioniert nicht
(1 answers)
Opened by mcfaq at 2011-04-20 14:04
Hallo.
Ich habe das Problem, das der vordefinerte Filter trim http://search.cpan.org/~markstos/Data-FormValidator-4.66/lib/Data/FormValidator.pm#filters irgendwie nicht angewendet wird. Das Wiederanzeigen des Formulars mit der Einagbe des Users wird nicht um umgebende Leerzeichen bereinigt. Testen durch Aufruf der Datei form.cgi. Hier paar Code Fragmente: Datei form.cgi: Code (perl): (dl
)
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 #!/usr/bin/perl -w use HTML::Template; use CGI::Simple; use Data::FormValidator; use Data::FormValidator::Constraints qw(:closures FV_length_between FV_min_length FV_max_length); sub display_virgin_site; sub func2; sub check_missings; my $cgi = new CGI::Simple; #initial invocation of the site. Just display the empty form. if ( scalar($cgi->param)==0 ) { display_virgin_site(); } else{ check_missings(); } sub display_virgin_site { # open the html template my $template = HTML::Template->new( filename => 'main.html' ); # send the obligatory Content-Type and print the template output print( "Content-Type: text/html\n\n", $template->output ); } sub check_missings { my $profile_obj = Data::FormValidator->new('criteria.pl'); my $results = $profile_obj->check($cgi,'profil_name_1'); if($results->success()){ &func2(); } else{ my %cgiHash = $cgi->Vars(); my $errhash = $results->msgs(); # open the html template my $template = HTML::Template->new( filename => 'main.html' ); @used_keys = qw( lastname phone mobile email ); #filter error variables to items from array @used_keys my %clearedHash; foreach(@used_keys){ $clearedHash{'error_'.$_} = $errhash->{'error_'.$_}; } $template->param(\%clearedHash); #clear hash before second usage %clearedHash=(); foreach(@used_keys){ $clearedHash{$_} = $cgiHash{$_}; } $template->param(\%clearedHash); print( "Content-Type: text/html\n\n", $template->output ); } Datei criteria.pl: Code (perl): (dl
)
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 use Data::FormValidator::Constraints qw(:closures FV_length_between FV_min_length FV_max_length); use Data::FormValidator::Filters; { profil_name_1 => { required => [qw( lastname ) ], # Entferne alle führenden und folgenden Leerstellen von den Werten der Formularfelder filters => ['trim'], field_filter_regexp_map => { qr/(?:phone|mobile)$/ => sub { my $value = shift; $value =~ s§[-/ ]§§g;#Entferne Füllzeichen '/', '-' ' ' aus Telefonnummern return $value; }, }, # alle Felder deren name mit regexp übereinstimmen, bekommen passenden validator zugewiesen constraint_method_regexp_map => { # !Not like in doku on cpan with notation 'email' or 'email()'. That wouldn't work. qr/email$/ => [email(),FV_length_between(6,50)], qr/lastname$/ => FV_length_between(2,30) }, msgs => { # Präfix für Variablen des Formulars die fehlerhaft sind erhalten Namensschema error_<name> prefix=> 'error_', # Fehlertext für Variablen die als Required markiert waren erhalten diesen Fehlertext als Wert, welcher unten im format Schlüssel als %s Argument eingefügt wird missing => 'This value is required', # Fehlertext für Variablen, welche eine der Bedingungen, die für Sie definiert wurden verletzt haben invalid => 'Invalid value inserted', # Trennzeichenkette für das auftreteten von mehreren Bedingungsverletzungen für eine Variable aus dem Formular invalid_separator => "<br>\n", # Die Variablen mit Namensschema error_<name> bekommen diesen Fehlertext als Wert zugewiesen. %s ist entweder der Wert von missing oder von invalid format => '<span class="hint">%s</span>', # if a constraint is violated with one of this names, than create a custom error mmessage instead of the text in format. # length_between is the inlined name of FV_length_between(x,y). Just use the subname without brackets and params as name. constraints => { 'length_between' => 'To short or to long', 'email' => 'Not a valid email adress', }, # if any error is returned by msgs function then hash key 'errorflag' will be defined aka gets value 1 any_errors => 'errorflag', } } } Datei main.html: Code: (dl
)
1 <!DOCTYPE html> Ich hoffe ich habe alles vollständig mitgegeben, damit ihr das hier nachvollziehen könnt. Kann mir jemand den Fehler nennen, warum trim nicht auf z.B. lastname angewendet wird? Gruß mcfaq. Last edited: 2011-04-20 14:07:06 +0200 (CEST) |