Thread HTML::Form ein <select> hinzufügen
(19 answers)
Opened by bianca at 2023-07-21 12:04 2023-07-22T14:12:58 bianca Dass HTML::Form beim Parsen Deines HTML-Texts das select-Element samt seiner Alternativen rauszieht, hast Du ja bei Deinem Feld mit Namen fname gesehen. Das Modul kann's also irgendwie... und ich habe auch rausgefunden, wie. Einerseits: Für Deinen Anwendungsfall verstehe ich nicht, wofür Du die Alternativen im menu brauchst. An den Server wird der Typ select nicht geschickt, der bekommt nur die Name=Wert-Paare für die Optionen, die ausgewählt wurden, und es ist völlig egal, welche Optionen es sonst noch gegeben hätte. Du solltest also das gleiche Ergebnis im Request erzielen, wenn Du den Input als text deklarierst. Andererseits: Es geht, wenn Du für den ausgewählten Wert den Namen und den Wert angibst. Ich habe hier Data::Dump anstelle des Data::Dumper verwendet, der liefert einfach viel kompakteren Output - und anstelle der Formulare das Request-Objekt, das HTML::Form erzeugt, ausgegeben. Bei select multiple musst Du für jeden ausgewählten Wert ein push_input abfeuern. 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 #!/usr/bin/perl use strict; use warnings; use Data::Dump 'dump'; use HTML::Form; use 5.010; my $html = <<HTMLHEREDOC <html> <head></head> <body> <div>Ausgabe:</div> <form action="http://www.perl-community.de" method="post"> <select name="fname"> <option value="wert1">Anzeige1</option> <option value="wert2">Anzeige2</option> <option value="wert3">Anzeige3</option> <option value="wert4" selected>Anzeige4</option> <option value="wert5">Anzeige5</option> </select> </form> </body> HTMLHEREDOC ; my @forms = HTML::Form->parse($html,'http://www.perl-community.de'); say dump $forms[0]->click; my %tmp = ( name => 'selname', menu => [ { name => 'Zusanzeige1', value => 'zuswert1' }, { name => 'Zusanzeige2', value => 'zuswert2' }, { name => 'Zusanzeige3', value => 'zuswert3' }, ], value_name => 'Zusanzeige1', value => 'zuswert1', checked => 1, ); $forms[0]->push_input('option',{%tmp}); say dump $forms[0]->click; Ausgabe: Code: (dl
)
1 bless({ |