Euroumrechner als CGI-Anwendung

Wie erselle ich denn bloß einen Euroumrechner als CGI-Anwendung bei dem die Währungswahl über Radiobuttons geschehen soll.
Mit dem HTML habe ich kein Problem aber das PERL-Script bereitet mir große Schwierigkeiten.
Wäre sehr dankbar für Euro Hilfe.
Foldend die Scripts:
HTML:

Umrechner

Euro
DM
Ihr Betrag:

Nachfolgend mein Perl-Script:

#!C:\Perl\bin\Perl.exe
read(STDIN, $buffer, $ENV{‚CONTENT_LENGTH‘});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(„C“, hex($1))/eg;
$FORM{$name} = $value;
$betrag = „$FORM{‚wert‘}“;
if ($FORM{’$wert’} = 1)
{
$produkt=("$FORM{‚betrag‘}")*1.95583;
}
else
{
$produkt=$betrag*0.51129;
}
$rund == sprintf ("%.2f",$produkt);
print „Content-type: text/html\n\n“;
print qq|

UmrechnerIhr Ergebnis: $produkt\n";

|;
exit;
}

Oha
da hast du aber einiges falsch gemacht und etwas unsinnig dazu :smile:

schau dir es einfach mal an wie es eigentlich aussehen sollte

#!C:\Perl\bin\Perl.exe
read(STDIN, $buffer, $ENV{'CONTENT\_LENGTH'});
@pairs = split(/&/, $buffer);
# lesen aller POST werte
foreach $pair (@pairs) {
 ($name, $value) = split(/=/, $pair);
 $value =~ tr/+/ /;
 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 $FORM{$name} = $value;
}
# Betrag aus FORMULAR eignabe
$betrag = $FORM{'betrag'};
# IST radio button gleich
if ($FORM{'wert'} == "1")
{
$produkt=$betrag\*1.95583;
}
# IST radio button ungleich 1
else
{
$produkt=$betrag\*0.51129;
}
# runden auf 2 stellen
$rund = sprintf ("%.2f",$produkt);
# Ausgabe
print "Content-type: text/html\n\n";
print qq|


UmrechnerIhr Ergebnis: $rund\n


|;
exit;

das exit ist am ende überflüssig, da der Perl prozess im Apache nach ausführung sowieso stirbt :smile:

hier nochmal das markierte fehler potenzial, also die Fehler im Script etwas kommentiert

#!C:\Perl\bin\Perl.exe
read(STDIN, $buffer, $ENV{‚CONTENT_LENGTH‘});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(„C“, hex($1))/eg;
$FORM{$name} = $value;
Hier fehlt die Klammer , den erst formulardaten ganz lesen dann verarbeiten

$betrag = „$FORM{‚wert‘}“ ;
hier würde der radio button als betrag genommen

if ($FORM{’ $wert’} = 1)
_$wert ist ne variable und kein element von $FORM und
es wurde eine zuweisung = getan anstatt ein vergleich ==

{
$produkt=( „$FORM{‚betrag‘}“ )*1.95583;
doppelt gemoppelt, $betrag gibt es schon

}
else
{
$produkt=$betrag*0.51129;
}
$rund == sprintf ("%.2f",$produkt);
hier wurde ein verglichen soll aber zuweisung sein

print „Content-type: text/html\n\n“;
print qq|

UmrechnerIhr Ergebnis: $produkt \n";
Hier sollte doch das gerundete Produkt stehen :smile:

|;
exit;
}
klammer viel zu spät geschlossen

hoffe das dir das so hilft :smile:_

da hast du aber einiges falsch gemacht und etwas unsinnig dazu

-)

schau dir es einfach mal an wie es eigentlich aussehen sollte

#!C:\Perl\bin\Perl.exe
read(STDIN, $buffer, $ENV{‚CONTENT_LENGTH‘});
@pairs = split(/&/, $buffer);

[…]

nun ja, diesen code hättest du eigentlich gleich mit entsorgen können.
dafür nimmt man CGI.pm.

use CGI;
my $cgi = CGI-\>new;
my $betrag = $cgi-\>param('betrag');
etc.

warum? es spart arbeit, ist auf jeden fall korrekt (während man selbst leicht einen
fehler einbauen kann), kann mit multiplen werten umgehen (checkboxes, selects) und
kann auch bilder-uploads. kurz, es nimmt einem einfach alles ab.
wahlweise kann man auch CGI::Simple verwenden, das ist etwas schlanker.

ausserdem sollte man *immer* strict und warnings benutzen.

nun ja, diesen code hättest du eigentlich gleich mit entsorgen
können.

??? das ist ja wohl ansichtsache gell :smile: ich will ihn nicht belehren sondern helfen , und einen ganz neuen kontext einzupflegen überfordert einige, wenns denn nicht in seinem Beispiel mitdrinne steht.

Gerade bei Perl kann man so einiges ganz ganz anders machen.

dafür nimmt man CGI.pm.

use CGI;
my $cgi = CGI->new;
my $betrag = $cgi->param(‚betrag‘);
etc.

warum? es spart arbeit, ist auf jeden fall korrekt (während
man selbst leicht einen

Kann mann machen frau auch, ist aber nicht nötig, gibt es kein CGI Modul ist das use CGI auch nicht möglich ,
ich denke da auch an portablen Code

Aber gut das du das nochmal unbedingt aus dem lehrbuch abschreiben musstes, die funktionsweise des programms ist richtig ohne irgentein MODUL zu benutzen, was ich eigentlich besser finde , aber auch das ist ansichtssache :smile:

fehler einbauen kann), kann mit multiplen werten umgehen
(checkboxes, selects) und
kann auch bilder-uploads. kurz, es nimmt einem einfach alles
ab.
wahlweise kann man auch CGI::Simple verwenden, das ist etwas
schlanker.

ausserdem sollte man *immer* strict und warnings benutzen.

das ist sowas von ansichts sache . Ich bin ja kein lehrbuch und auch nicht sein lehrer.

Ergo mach ich das lieber nicht , nur weil es irgentwo steht .

Wenn wir das nur wegen der ‚schönheit‘ des noch umzuschreibenden CODE machen wollen um den FRAGESTELLER nun ganz ins ABSEITS zu schieben damit er garnichts mehr wiedererkennt, dann könnten wir noch den ganzen ausgabe bereich umschreiben.

use CGI;
$anfrage = new CGI;

print $anfrage-\>header(),
 $anfrage-\>start\_html("Hello world"),
 $anfrage-\>h1("Hello world"),
 $anfrage-\>a({-href=\>"index.html#bsp1"},"Zurück"),
 $anfrage-\>end\_html();

Aber das steht auch in jedem Buch anders drinne :smile:

schminken ist schön aber sinnlos wenn es doch auch so ein hübsches gesicht ist.

Hallo,

Wie erstelle ich denn bloß einen Euroumrechner als
CGI-Anwendung bei dem die Währungswahl über Radiobuttons
geschehen soll.
Mit dem HTML habe ich kein Problem aber das PERL-Script
bereitet mir große Schwierigkeiten.

Hast Du Apache unter Windows laufen? Apache2? Activeperl?

Es kamen ja schon mehrere gute Antworten (die
auch zu Kontroversen führten), aber *dieses*
Beispiel wäre eine schöne Übung für ein
„CGI-Multiscreen“-Skript, also ein Skript,
welches sowohl „die Webseite“ als auch das
„Perl-Skript“ ist.

Da hat man das dann einmal geübt und kann
später wieder nachschauen :wink:

Grüße

CMБ

Hallo RakonDark,

Aber das steht auch in jedem Buch anders drinne :smile:

schminken ist schön aber sinnlos wenn es doch auch so ein
hübsches gesicht ist.

Sei gewarnt, das ist tinita von den Perl-Mönchen
(Dienstgrad „Priester“), da solltest Du vorsichtig
argumentieren, weil ja auch der Perl-Schöpfer (Larry
Wall) eine bekannte metaphysische Erscheinung ist :wink:

Besser Du schaust heute vor dem Schlafengehen nach, ob
alle Fenster verschlossen sind (und dich nicht der
„Spirit of Perl“ zur Strafe heimsucht …

Grüße

CMБ

1 Like

??? das ist ja wohl ansichtsache gell :smile:

nein, eher erfahrungssache =)

Gerade bei Perl kann man so einiges ganz ganz anders machen.

ja, und man kann sie auch ganz falsch machen.

Kann mann machen frau auch, ist aber nicht nötig, gibt es kein
CGI Modul ist das use CGI auch nicht möglich ,
ich denke da auch an portablen Code

soso.

$ corelist CGI
CGI was first released with perl 5.004

also wer darauf noch rücksicht nehmen will, dass es erst seit 1997(!) CGI.pm
im standard-perl gibt… das ist 10 (in worten zehn) jahre her.
welcher web-provider hat denn noch eine ältere version laufen, bitte?
ausserdem kann man, wenn es wirklich nicht da sein sollte, einfach die datei CGI.pm
kopieren, denn das ist pures perl.

Aber gut das du das nochmal unbedingt aus dem lehrbuch
abschreiben musstes,

och komm…

die funktionsweise des programms ist
richtig ohne irgentein MODUL zu benutzen, was ich eigentlich
besser finde , aber auch das ist ansichtssache :smile:

nein, auch erfahrungssache. =)

warum whren sich so viele leute (und das sind, verzeih mir, meistens
anfänger), gegen CGI.pm, obwohl es den code kürzer und deshalb einfacher
zu warten macht?

ausserdem sollte man *immer* strict und warnings benutzen.

das ist sowas von ansichts sache . Ich bin ja kein lehrbuch
und auch nicht sein lehrer.

auch wieder erfahrungssache.

Ergo mach ich das lieber nicht , nur weil es irgentwo steht .

das kann man auch umdrehen. nur weil dieser alte cgi-parsing-code
überall im netz rumsteht und verstaubt, braucht man ihn noch
lange nicht zu verwenden, denn es gibt zeitgemäßeres.

1 Like

Ich weiss halt nur nicht warum du das extra posten wolltest, oder wollten wir ein tutorial erstellen ??

Scheint das du im moment nix anderes zu tun hast :smile:

Ich aber schon , deswegen halt ich mich an den Frager , wenns gerade so auf Seite 30 seines Buches steht, will ich ihn nicht zur Seite 300 verweisen.

Aber klar , nächstes mal Poste ich einen hübschen Code, wo er sich gleich am Anfang fragt was das sein soll :smile:

Ich mag zwar nur Erwachsenen Bildung machen , aber klar ich kann ihn auch gleich die ganze Motivation rauben und alles umschreiben zu -> so ist perfect, der rest ist Dreck , nur ob er dann vorwärts kommt im lernen der Materie glaub ich kaum.
^^^^^^^^^^^^^^ auch Erfahrung

Nur hilft ihm das seine Probleme zu finden , überschaubar zu halten, oder muss er nicht doch gleich nochmehr begreifen ???

Denk an die Anfänge , immer schritt für schritt :smile:
Und ich über pro portio niere nicht seinen Auf fas sungs ver mö gen.

Aus ERFAHRUNG weiss ich das zu viel Änderungen zur selben Zeit das Fassungsvermögen sprengt bis dann garnichts mehr gerafft wird :smile:
Umso älter umso schlimmer :smile:

Ergo: ist ja alles gut von Dir ge main t , aber tut es den not , mich dabei zu erwähnen, weil ich hab damit überhaupt nicht zu tun , hab mir das zwar gedacht, hab aber auch die Fähigkeiten der Fassungsgabe des Patienten mit einbezogen :smile: Das hätte ich ganz Dir überlassen das noch ein bissel schöner zu machen das ganze :smile: So musste ich natürlich Antworten

Ich weiss halt nur nicht warum du das extra posten wolltest,
oder wollten wir ein tutorial erstellen ??

warum fühlst du dich überhaupt angegriffen? meine erste antwort auf dein
posting war dafür gedacht, das zu ergänzen und den alten cgi-parsing-code
aus der welt zu schaffen, denn eben durch solche postings wird er
weiterverbreitet.

Scheint das du im moment nix anderes zu tun hast :smile:

ich glaube, die persönliche ebene sollten wir hier rauslassen, ja? danke.

Ich aber schon , deswegen halt ich mich an den Frager , wenns
gerade so auf Seite 30 seines Buches steht, will ich ihn nicht
zur Seite 300 verweisen.

wofür ist perl da? damit man nicht assembler schreiben muss. jemand
hat da eine sprache erfunden, die uns die ekligen dinge abnimmt.
wofür ist CGI.pm da? => man erspart sich das parsen, denn früher oder
später will man dann doch image-uploads, und dann nimmt man ein
modul.
wenn jemand lernen will, wie parameter-parsen intern funktioniert,
kann er das ja gerne ausprobieren, aber ansonsten möchte man sich
doch mit wichtigeren teilen des proramms beschäftigen.

Etwas unkonfortabel aber durchaus lernt man dabei die „doing it the hard way“ Methode

#!C:\Perl\bin\Perl.exe
read(STDIN, $buffer, $ENV{‚CONTENT_LENGTH‘});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(„C“, hex($1))/eg;
$FORM{$name} = $value;
}

leichter und sicherher ist es z.b. so

z.b. So

use CGI;
my $cgi = CGI->new;
my $betrag = $cgi->param(‚betrag‘);
etc.

Nachzulesen wie und warum http://www.elektronikschule.de/~grupp/perlcgi/cgipm/

P.S. grüsse an Tina, die Dir das schon immer einmal sagen wollte

Ich weiss halt nur nicht warum du das extra posten wolltest,
oder wollten wir ein tutorial erstellen ??

warum fühlst du dich überhaupt angegriffen? meine erste
antwort auf dein
posting war dafür gedacht, das zu ergänzen und den alten
cgi-parsing-code
aus der welt zu schaffen, denn eben durch solche postings wird
er
weiterverbreitet.

Scheint das du im moment nix anderes zu tun hast :smile:

ich glaube, die persönliche ebene sollten wir hier rauslassen,
ja? danke.

Ich aber schon , deswegen halt ich mich an den Frager , wenns
gerade so auf Seite 30 seines Buches steht, will ich ihn nicht
zur Seite 300 verweisen.

wofür ist perl da? damit man nicht Assembler schreiben muss.
jemand
hat da eine Sprache erfunden, die uns die ekligen Dinge
abnimmt.
wofür ist CGI.pm da? => man erspart sich das parsen, denn
früher oder
später will man dann doch image-uploads, und dann nimmt man
ein
Modul.
wenn jemand lernen will, wie parameter-parsen intern
funktioniert,
kann er das ja gerne ausprobieren, aber ansonsten möchte man
sich
doch mit wichtigeren teilen des programms beschäftigen.

wie recht Du doch hast :smile: Nur womit eigentlich lol
Ich hab noch Assembler gelernt und profitiere immernoch davon lol
Back to the Basics .

So ich hab den nun dein Senf direkt dahin gepostet wo es hingehört und hoffe das wir hier mal zum Schluss kommen.

Zur info :- ich fühle mich nicht Angegriffen, sondern angesprochen :smile:
nächstesmal postest du dein Fachwissen direkt dem Fragesteller und nicht implizit über mich :smile: DANKE :smile:

Wie erselle ich denn bloß einen Euroumrechner als
CGI-Anwendung bei dem die Währungswahl über Radiobuttons
geschehen soll.
Mit dem HTML habe ich kein Problem aber das PERL-Script
bereitet mir große Schwierigkeiten.
Wäre sehr dankbar für Euro Hilfe.

Hallo allerseits…
ich möchte mich noch einmal ganz herzlich für Eure Hilfe bedanken. Ich habe die Aufgabe dank Eurer Hilfe nun hinbekommen.
Luigi

nächstesmal postest du dein Fachwissen direkt dem Fragesteller
und nicht implizit über mich :smile: DANKE :smile:

Du hast die Mängel in Luigis Script angesprochen, einen durchaus erheblichen aber nicht genannt: Seinen Rückgriff auf völlig veraltete Konzepte. Tina hat diese Unterlassung korrigiert und insofern ihr Posting durchaus an die richtige Stelle gestellt. Wieso du nun ausgerechnet an dieser Stelle deine Krawatte vermutest, auf die du dich getreten fühlst, erschliesst sich mir nicht.

Gruss
Schorsch

1 Like