Schrift
[thread]13129[/thread]

Rueckgabe von Werten aus HTML-Formular (Seite 2)

Leser: 3


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
ofmueller
 2009-02-12 23:07
#118819 #118819
User since
2009-02-11
2 Artikel
BenutzerIn
[default_avatar]
Danke für das neue Skript. An die Objektorientierung habe ich mich noch nicht heran gewagt. Ich freue mich auch, dass mein Beitrag so eine Reaktion bewirkt hat, wenn auch in eine andere Richtung. (Einsatz von "use warning" bzw. -w)

Ich habe das Skript übernommen und ergänzt - siehe dieses Skript - insbesondere das Hauptprogramm am Ende. Auch hier tritt das Problem auf.

Wenn ich das Skript in meiner IDE laufen lasse, bekomme ich folgenden Hinweis:

[Thu Feb 12 22:04:30 2009] html_objektorientiert.pl: Use of uninitialized value $teste in numeric eq (==) at C:/xampp/cgi-bin/cgi/html_objektorientiert.pl line 48.

Im Browser erscheint das Menü auch doppelt.


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
#!/usr/bin/perl
use strict;
use warnings;

use CGI qw(-no_xhtml);
use CGI::Carp qw(fatalsToBrowser);

my $cgi = new CGI;

print $cgi->header();
print $cgi->start_html(-title=>'Vokabeltrainer');

my $teste = eingabe_menue();

print $cgi->p($cgi->b("Eingabe ist: $teste")) if $teste;

print $cgi->end_html;

sub eingabe_menue {
  my $url = $cgi->url;  # Nur zum Testen!
  #my $url = 'http://127.0.0.1/cgi-bin/cgi/woerterbuch3.pl';

  print $cgi->p(
        [ 'Vokabeltrainer',
          '**************',
          'Menue', 
          '1 Vokabeln eingeben',
          '2 Englisch - Deutsch',
          '3 Deutsch - Englisch',
          '4 Programmende' 
        ] 
    ),
    $cgi->start_form(-action=>$url),
    $cgi->p('Auswahl:'),
    $cgi->textfield(-name=>'eingabe', -value=>'', -size=>1),
    $cgi->submit(-name=>'submit', value=>'Abschicken'),
    $cgi->endform,
    $cgi->p('');

  my $eing = $cgi->param('eingabe');
  return $eing;
}

1;

$teste = eingabe_menue;

        if ($teste == 1)
        {
                print "eingabe_vokabeln";
        }
        elsif ($teste == 2)
        {
                print "englisch_deutsch";
        }
        elsif ($teste == 3)
        {       
        print "deutsch_englisch";
        }
GwenDragon
 2009-02-12 23:39
#118821 #118821
User since
2005-01-17
14837 Artikel
Admin1
[Homepage]
user image
Lösche mal Zeile 46 und 15
und verschiebe alles von Ziel 47-59 an die Stelle von Zeile 15
murphy
 2009-02-13 00:12
#118823 #118823
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Irgendwie habe ich das Gefuehl, dass hier das Wesen von CGI-Programmen nicht so ganz verstanden wurde: Ein CGI-Programm wird immer als Reaktion auf eine HTTP-Anfrage ausgefuehrt und erzeugt eine HTTP-Antwort. Das bedeutet insbesondere, dass man in einem CGI-Programm nicht mal eben eine Rueckfrage an den Benutzer schicken und dann weiterrechnen kann [*]. In dem vorliegenden Beispiel muesste man also bei Beginn des Programmes pruefen, ob man nun das Formular mit dem Menue erzeugen oder eine der Nachrichten wie [tt]eingabe_vokabeln[/tt] ausgeben moechte -- beides geht jedenfalls nicht im gleichen Programmdurchlauf. Welche Aktion das CGI ausfuehrt, koennte man zum Beispiel daran festmachen, ob der Queryparameter [tt]eingabe[/tt] ueberhaupt uebergeben wurde, oder nicht. [*] Jedenfalls nicht, ohne Continuations oder aehnliche Mechnismen zu verwenden und ein Framework, dass den Programmablauf linear aussehen laesst, obwohl mehrere Request-Response-Zyklen involviert sind.
When C++ is your hammer, every problem looks like your thumb.
Struppi
 2009-02-13 01:49
#118824 #118824
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
moritz+2009-02-12 20:16:51--
-w ist "action at a distance" und keine gute Idee. Wenn man ein Modul einsetzt, sollte man dem Autor soweit vertrauen, dass man nicht in sein Modul hereinpfuscht.

Wenn ich an einer Anwendung arbeite, hat diese selten weniger als 20 Dateien und dort ständig use warnings einzubauen wäre mir zu mühsam, ich bevorzuge eine zentrale Stelle. Wenn ich Code zur Laufzeit erzeuge, schalte ich die Warnungen ab. Ich vertraue dem Autor, dass sein Code auch mit -w läuft.
pq
 2009-02-13 11:09
#118828 #118828
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
Struppi+2009-02-13 00:49:39--
Wenn ich an einer Anwendung arbeite, hat diese selten weniger als 20 Dateien und dort ständig use warnings einzubauen wäre mir zu mühsam, ich bevorzuge eine zentrale Stelle. Wenn ich Code zur Laufzeit erzeuge, schalte ich die Warnungen ab. Ich vertraue dem Autor, dass sein Code auch mit -w läuft.

siehe perldoc perllexwarn, da gibt es einen abschnitt zu -w.
wenn du noch kein modul hattest, das dir mit -w warnungen ausgespuckt hat, hattest du vermutlich
einfach nur glück (oder du benutzt wenig module ;-)
mir ist das schon öfter passiert, und ich will die warnungen einfach nicht sehen.

und dir ist es zu mühsam, in allen modulen use warnings einzubauen? denkst du genauso über
use strict? bei mir baut das mein editor (vim) ganz automatisch in jedes neue modul ein.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
moritz
 2009-02-13 11:16
#118830 #118830
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Struppi+2009-02-13 00:49:39--
Ich vertraue dem Autor, dass sein Code auch mit -w läuft.


D.h. du vertraust auf ein undokumentiertes feature? Das is generell keine gute Idee.
Pfuschst du auch in privaten Attributen von fremden Objekten rum? Das faellt in die gleiche Kategorie.

(Uebrigens kann ueber $SIG{__WARN__}-Handler vollkommen anderes Verhalten erfolgen wenn zusaetzliche ungewollte warnungen aktiviert sind, nich nur mehr Warnmeldungen auf STDERR)
Struppi
 2009-02-13 11:38
#118832 #118832
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
pq+2009-02-13 10:09:50--
siehe perldoc perllexwarn, da gibt es einen abschnitt zu -w.
wenn du noch kein modul hattest, das dir mit -w warnungen ausgespuckt hat, hattest du vermutlich
einfach nur glück (oder du benutzt wenig module ;-)
mir ist das schon öfter passiert, und ich will die warnungen einfach nicht sehen.
Doch, vor ca. 10 Jahren habe ich zum letzten mal Warnungen aus einem Modul gesehen, aber seit dem nicht mehr. Weder bei Tk noch bei Webanwendungen. Kannst du mir eines nennen?

moritz+2009-02-13 10:16:58--
Struppi+2009-02-13 00:49:39--
Ich vertraue dem Autor, dass sein Code auch mit -w läuft.


D.h. du vertraust auf ein undokumentiertes feature? Das is generell keine gute Idee.
Pfuschst du auch in privaten Attributen von fremden Objekten rum? Das faellt in die gleiche Kategorie.

(Uebrigens kann ueber $SIG{__WARN__}-Handler vollkommen anderes Verhalten erfolgen wenn zusaetzliche ungewollte warnungen aktiviert sind, nich nur mehr Warnmeldungen auf STDERR)
In Webanwendungen ist bei mir $SIG{__WARN__} standardmäßig umgebogen, damit ich diese Ausgabe auch zu sehen bekomme.

Ich hab keine Ahnung was euch da so stört. Für mich ist ein Modul, dass keine Warnungen erzeugt selbstverständlich und wie gesagt die letzten 10 Jahre auch nicht mehr passiert. Der Autor kann jederzeit dieses undokumentiere Verhalten ausschalten, wenn es nötig ist. Daher ist es in meinen Augen praktisch dieses Feature an einer Stelle an und auszuschalten. Zumal das ganze ja lediglich eine Sache ist, die zum debuggen dient, d.h. wenn die Anwendung produktiv wird, kann ich das ausschalten, dann ist das Verhalten genauso, wie wenn ich use warnings in allen meinen Modulen notiert habe.

Und um auf den unterschwelligen Vorwurf zurück zukommen. Für mich ist ein Modul, dass keine Warnungen erzeugt, ein Zeichen dass es sauber programmiert ist, genauso wie ich nicht auf private Eigenschaften fremder Module zugreife, genauso erwarte ich von fremden Modulen, dass sie keine Warnungen erzeugen, wenn ich den -w Schalter benutze. Aber offensichtlich gibt es da unterschiedliche Sichtweisen.
pq
 2009-02-13 12:05
#118835 #118835
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
Struppi+2009-02-13 10:38:05--
Doch, vor ca. 10 Jahren habe ich zum letzten mal Warnungen aus einem Modul gesehen, aber seit dem nicht mehr. Weder bei Tk noch bei Webanwendungen. Kannst du mir eines nennen?

nö =)
ich benutze ja in der regel kein -w mehr, ich weiss nur, dass es mir öfter mal passiert ist, wenn ich
einen einzeiler auf der kommandozeile schreibe, denn da benutze ich -wle. ich meine, ich erinnere
mich z.b. an Net::FTP und/oder Net::POP3. ansonsten habe ich mir die nicht gemerkt.
und hier auf der arbeit wird mit warnungen nur so um sich geworfen, wenn ich -w anschalte,
und das liegt einfach daran, dass einige gar nicht wissen, dass ihre module warnungen generieren, da
sie eigentlich nur in mod_perl aufgerufen werden, als handler, und daher ohne -w, und dass
hier einige der meinung sind, warnings gehören nicht in live-code, weswegen sie es aber auch sonst
nicht benutzen.
und genauso kann es von mir aus auch cpan-module geben, die mit -w warnungen ausspucken,
ich finde auch, ein modul sollte keine warnungen aussgeben, aber es gibt andere meinungen, und
das muss ich respektieren, hauptsache, das modul tut, was es soll.

zu dem aspekt, dass es dir der editor abnehmen kann, die strict/warnings geschichte jedesmal
von hand in ein modul zu schreiben, hast du übrigens noch gar nichts gesagt =)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Struppi
 2009-02-13 12:16
#118837 #118837
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
pq+2009-02-13 11:05:36--
zu dem aspekt, dass es dir der editor abnehmen kann, die strict/warnings geschichte jedesmal
von hand in ein modul zu schreiben, hast du übrigens noch gar nichts gesagt =)
Was soll ich dazu sagen, mir ist bekannt, dass Editoren Makrofunktionen haben. Notepad++ auch.

Aber um nochmal auf -w zurück zu kommen. Ich habe also ein Modul, was mit Warnungen um sich wirft, aufgrund dessen schalte ich -w aus. Aber so werde ich nie erfahren, wenn das Modul einen undefinierten Wert benutzt.

Ein einfaches Beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
package myModule;

sub new { return bless{}, shift;}

sub test {
        my $self = shift;
        my $param = shift;
        
        return $param * 1;
}

1;


Code (perl): (dl )
1
2
3
4
5
6
#!/usr/bin/perl
use warnings;
use strict;
use myModule;
my $o = new myModule;
print $o->test();

keine Warnung.
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2009-02-11 21:59.