Thread Zwei Array ein Hash mit CGI
(18 answers)
Opened by bianca at 2010-06-28 17:44
Ich sehe generelle Vorteile bei der Verwendung von einem Template-System:
* "Design" und Programm sind voneinander getrennt. Bei einer Änderung am HTML läuft man nicht Gefahr, einen Programmierfehler einzubauen. * Man sieht leichter, was gemacht werden soll. * Die Verwendung von CGI.pm ist für die HTML-Generierung zu "sperrig". * Manche Templating-System erlauben so etwas wie automatisches encoding von HTML-Entities, so dass man sich nicht mehr selbst darum kümmern muss. * Alles in allem wird die Anwendung wartbarer Vergleiche 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 #!/usr/bin/perl use strict; use warnings; use HTML::Template::Compiled; my $bad_userinput = "<script>alert('test');</script>"; my $options = [ { value => 1, label => 'option 1' }, { value => 2, label => 'option 2' }, ]; my $template = HTML::Template::Compiled->new( filename => 'test.tmpl', default_escape => 'html', ); $template->params( bad_userinput => $bad_userinput, options => $options, ); print $template->output; mit dem Template Code (html): (dl
)
1 2 3 4 5 6 7 8 9 <html> <body> <p>Boese Benutzereingabe: <%= bad_userinput %></p> <select> <%LOOP options %><option value="<%= value %>"><%= label %></option> <%/LOOP %> </select> </body> </html> gegenüber 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 #!/usr/bin/perl use strict; use warnings; use CGI; use HTML::Entities; my $bad_userinput = "<script>alert('test');</script>"; my %options = ( 'option 1' => 1, 'option 2' => 2, ); my $escaped_input = encode_entities( $bad_userinput ); print CGI->start_html() . CGI->p( 'Boese Benutzereingabe ' . $escaped_input ) . CGI->popup_menu( -values => [ keys %options ], -labels => \%options, ) . CGI->end_html(); Und das ist jetzt eine mehr als einfache Seite und die HTML-Ausgabe kann hier gesammelt am Ende gemacht werden. Jetzt stell Dir aber vor, dass das ein sehr langes Programm ist, bei dem die ganzen Informationen über das komplette Programm gesammelt werden. Machst Du die HTML-Ausgabe am Ende, brauchst Du einige "globale" Variablen. Machst Du die HTML-Ausgabe zwischendrin, hast Du die Methodenaufrufe irgendwo im Code versteckt. Dann such mal die Stelle, an der Du das "<p>" (bzw. p() ) zu "<b>" (bzw. b() ) abändern musst. OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/) -- Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html Perl-Entwicklung: http://perl-services.de/ |