Schrift
[thread]661[/thread]

CGI.pm + sticky Parameter: Verständnisfrage

Leser: 1


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
GwenDragon
 2006-01-28 19:40
#6800 #6800
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Ich stolpere derzeit über die "sticky" Werte bei CGI.

Verstehe ich das richtig?
Alle übergebenen Werte aus einem Formular bleiben bestehen, bis ich sie explizit überschreibe, also:
Code: (dl )
1
2
3
param( 'VAR1', 'Neuer Wert');
#oder
hidden( -name=>'VAR1', -value=>'Neuer Wert', -override=>1);

Code: (dl )
hidden( -name=>'VAR1', -value=>'Neuer Wert');
Bewirkt nichts, oder?

Bei anderen Parametern wie
Code: (dl )
textfield( -name=>'Inhalt' );
muss ich wohl dann wohl
Code: (dl )
param('Inhalt', 'Das ist neu!!!');
schreiben.

Vielleicht bin ich auch nur etwas müde und sehe nix mehr.

Auch, irgendwie ist mir das peinlich.
So lange mit Perl gearbeitet und dann sowas. *schäm*\n\n

<!--EDIT|GwenDragon|1138471245-->
GwenDragon
 2006-01-28 21:28
#6801 #6801
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Das kommt davon, wenn eine ein Templatesystem auf CGI.pm umstellen will.

Wenn ich also einen neuen Wert eintragen will:

Code: (dl )
1
2
3
param('VAR1', '#Nun das ist neu#');
...
hidden('VAR1');


Oder seh ich das falsch?\n\n

<!--EDIT|GwenDragon|1138476673-->
GwenDragon
 2006-01-28 23:07
#6802 #6802
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Problem behoben.

Ich setze zuerst die Parameter mit param(...) und füge sie dann nur noch mit hidden(...) ein.
Dann klappt es.


//EDIT: Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use strict;
use CGI qw( :all );

param( 'datum', time() );
param( 'text', 'Das ist der neue Text');

print start_form( 'form1' ),
    hidden( 'datum'),
    hidden('username'),
    
    'Datum: ', textfield('datum'),
    'Text: ', br(), textfield( 'text' ),
submit(),
    end_form();


Bin wohl etwas überarbeitet.

Eigentlich kann der Thread auch in die Mülltonne, sprich gelöscht werden.\n\n

<!--EDIT|GwenDragon|1138547048-->
renee
 2006-01-29 02:07
#6803 #6803
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Noe, da kann ein anderer vielleicht noch was lernen...
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/
GwenDragon
 2006-01-29 15:56
#6804 #6804
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Garantiert fallen da Leute drüber. Die "sticky" Werte sind in CGI.pm nicht so gut erklärt.
Selbst die diversen Perl-Kochbücher und CGI-Programmierung von Guelich et al. erklärt es nicht sonderlich ausführlich.

Das wäre was fürs Wiki!
nepos
 2006-01-29 15:59
#6805 #6805
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wofuer ist dieses
Code (perl): (dl )
-override=>1
gut? Davon steht nix in der CGI-Doku von mir.
GwenDragon
 2006-01-29 16:39
#6806 #6806
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Quote
CREATING FILL-OUT FORMS:

General note The various form-creating methods all return strings to the caller, containing the tag or tags that will create the requested form element. You are responsible for actually printing out these strings. It's set up this way so that you can place formatting tags around the form elements.

Another note The default values that you specify for the forms are only used the first time the script is invoked (when there is no query string). On subsequent invocations of the script (when there is a query string), the former values are used even if they are blank.

If you want to change the value of a field from its previous value, you have two choices:

(1) call the param() method to set it.

(2) use the -override (alias -force) parameter (a new feature in version 2.15). This forces the default value to be used, regardless of the previous value:

  print $query->textfield(-name=>'field_name',
                          -default=>'starting value',
                          -override=>1,
                          -size=>50,
                          -maxlength=>80);


Steht in der CGI-Doku von CGI 3.0

Das bedeutet, dass der beim ersten Aufruf des Skriptes übergebene Wert mit dem als -default angegebenen Wert überschrieben wird.\n\n

<!--EDIT|GwenDragon|1138546312-->
nepos
 2006-01-29 16:42
#6807 #6807
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ah danke, dann hab ich auf meinem alten Woody wohl noch ne aeltere Version installiert...
Strat
 2006-01-29 20:09
#6808 #6808
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich mache das irgendwie immer manuell
Code: (dl )
1
2
3
4
5
6
7
my $cgi = CGI->new;
my $params = $cgi->Vars;

print $cgi->textfield(-name=>'field_name',
-default=>$params->{field_name},
-size=>50,
-maxlength=>80);

oder so aehnlich... aber ueber das sticky bin ich auch schon mal gestolpert
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
steffenw
 2006-01-29 20:23
#6809 #6809
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wenn man per GET und CGI.pm ein Formular übermittelt, dann ist ein Parameter zu viel in der url, nämlich .cgifields=...
Ist das damit gemeint?
$SIG{USER} = sub {love 'Perl' or die};
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2006-01-28 19:40.