Schrift
[thread]867[/thread]

Umsetzung eines Konsolenskripts: Hilfe für Perl-Newbie



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
subi
 2006-12-29 20:11
#9408 #9408
User since
2006-12-29
6 Artikel
BenutzerIn
[default_avatar]
Hallo liebe Forum-Freunde,

wie kann ich fogendes Skript in eine CGI-Variante umsetzten. Die Optionauswahl soll über Radiobuttons erfolgen.

Code: (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
#!usr/bin/perl
print "Geben Sie den umzurechnenden Betrag ein:\n";
$input1= <STDIN>;
chomp ($input1);
$input1 =~ tr/,/./;
$input =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
print "Waehlen Sie bitte eine Option aus:\n";
print "DM zu EUR (1)\n";
print "EUR zu DM (2)\n";
$input2 = <STDIN>;
chomp ($input2);
$EUR = $input1/1.95583;
$DM = $input1*1.95583;
$EURFormatiert = sprintf("%.2f", $EUR);
$DMFormatiert = sprintf("%.2f", $DM);
if ($input2 == 1)
 {
 print "$input1 DM sind $EURFormatiert EUR\n";
 }
elsif ($input2 == 2)
 {
  print "$input1 EUR sind $DMFormatiert DM\n";
 }
else
 {
 print "Die Option $input2 existiert nicht!\n";
 }

------------------------------------
Das HTML-Formular zur Übergabe soll etwa so aussehen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form action="/cgi-bin/calculator.pl" method="post">
 <p>Geben Sie bitte den umzurechnenden Betrag ein:</p>
 <p>
   <input name="betrag" type="text" id="betrag">
</p>
 <p>W&auml;hlen Sie bitte eine Option aus:</p>
 <p>
   <input type="radio" name="EUR" value="radiobutton">
 DM zu EUR</p>
 <p>
    <input type="radio" name="DM" value="radiobutton">
    EUR zu DM</p>
 <p>
   <input type="submit" name="Submit" value="Umrechnen">
 </p>
</form>


Vielen Dank für jeden Hinweis!

edit pq: code-tags hinzugefügt
--- Modedit Gwendragon
Titel geändert, damit er sinnvoller ist; brauchst doch nicht schreien
---\n\n

<!--EDIT|GwenDragon|1167488851-->
Relais
 2006-12-29 20:18
#9409 #9409
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was (außer Code-Tags für bessere Lesbarkeit hier) fehlt Dir denn, um es umzusetzen?
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
subi
 2006-12-29 20:27
#9410 #9410
User since
2006-12-29
6 Artikel
BenutzerIn
[default_avatar]
Hallo Relais,

es handelt sich - wie gesagt - hierbei um ein Konsolenskript. Das ist nicht das Problem. Ich habe es irgendwie zum Laufen gebracht. Das Problem liegt jetzt darin, den zu umzurechnenden Betrag nicht über die Konsole, sondern über ein HTML-Formular mit Radiobuttons einzugeben.

Also: Eingabe über Formular ---> CGI-Skript ---> Ausgabe in HTML

Ich habe als Perl-Newbie überhaupt keine Ahnung, wie das zu realisieren ist.
MisterL
 2006-12-29 20:49
#9411 #9411
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Hallo.

Also wenn das ein CGI-Skript werden soll, sollte man das entsprechend würdigen:
Code: (dl )
<form action="/cgi-bin/calculator.cgi" method="post">
(statt ...calculator.pl)
Das weitere Spiel geht grundsätzlich wie unter http://www.linux-magazin.de/Artikel/ausgabe/2002/11/perl/perl.html gezeigt: Namen des Eingabefelds und der 2 Umrechnungsoptionen übergeben und die Werte algorihmisch verändern und ausgeben lassen. Speziell bei 'HandleForm' kann man sich die Zeilen 34,35 , 66-79 anschauen.

mfg MisterL, der gerade an einem ähnlichen Problem arbeitet aber keinen vorzeigbaren Code zur Hand hat...
“Perl is the only language that looks the same before and after RSA encryption.”
subi
 2006-12-29 21:14
#9412 #9412
User since
2006-12-29
6 Artikel
BenutzerIn
[default_avatar]
Hallo MisterL,

die Frage jetzt: Wie soll dieses calculator.cgi oder calculator.pl aussehen, das in HTML ausgegeben werden soll. Da liegt mein Problem momentan. Es geht darum folgendes Skript umzuschreiben.

Code: (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
#!usr/bin/perl
print "Geben Sie den umzurechnenden Betrag ein:\n";
$input1= <STDIN>;
chomp ($input1);
$input1 =~ tr/,/./;
$input =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
print "Waehlen Sie bitte eine Option aus:\n";
print "DM zu EUR (1)\n";
print "EUR zu DM (2)\n";
$input2 = <STDIN>;
chomp ($input2);
$EUR = $input1/1.95583;
$DM = $input1*1.95583;
$EURFormatiert = sprintf("%.2f", $EUR);
$DMFormatiert = sprintf("%.2f", $DM);
if ($input2 == 1)
{
print "$input1 DM sind $EURFormatiert EUR\n";
}
elsif ($input2 == 2)
{
print "$input1 EUR sind $DMFormatiert DM\n";
}
else
{
print "Die Option $input2 existiert nicht!\n";
}


MfG
Ronnie
 2006-12-29 21:50
#9413 #9413
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hier ein kleiner Ansatz:
Code: (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/env perl

use strict;
use warnings;

use CGI;
use CGI::Carp qw/warningsToBrowser fatalsToBrowser/;
#use Data::Dumper;

package Money;

sub new {
my $class = shift;
my $self = {};
return bless $self, $class;
}

sub get {
my $self = shift;
return sprintf("%.2f", $self->{value}) . " EUR\n";
}

sub get_dm {
my $self = shift;
return sprintf("%.2f", $self->{value} * 1.95583) . " DM\n";
}

sub set {
my $self = shift;
my $val = shift || '0.0';
die "class money#set: value isn't numeric" unless $val =~ /^-?\d+\.?\d?\d?$/;
$self->{value} = $val;
}

sub set_from_dm {
my $self = shift;
my $val = shift || '0.0';
die "class money#set_dm: value isn't numeric" unless
$val =~ /^-?\d+\.?\d?\d?$/;
$self->{value} = $val / 1.95583;
}

package main;

my $q = CGI->new;
my %form = $q->Vars;

my $coins = Money->new;

if ($form{'action'} eq 'convert') {

my $money_bag;
if ($form{'cur'} eq 'EUR') {
$coins->set_from_dm($form{'val'});
$money_bag = $coins->get;
} else {
$coins->set($form{'val'});
$money_bag = $coins->get_dm;
}

print $q->header,
$q->start_html('CurrencyConverter'),
$q->h1('MoneyBag'),
$money_bag,
$q->end_html;

} else {

print $q->header,
$q->start_html('CurrencyConverter'),
$q->h1('CurrencyConverter'),
$q->start_form,
'Value: ', $q->textfield(-name=>'val'),
$q->br,
'convert to: ',
$q->radio_group('cur', ['EUR','DM']),
$q->br,
$q->submit('action', 'convert'),
$q->end_form,
$q->end_html;
}
subi
 2006-12-29 22:34
#9414 #9414
User since
2006-12-29
6 Artikel
BenutzerIn
[default_avatar]
Hallo Ronnie,

Deinen Vorschlag habe ich als (calculator.pl) im cgi-Ordner gespeichert. Um das Ganze zu testen, habe ich dann folgendes Formular für die Eingabe benutzt

Quote
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>W&auml;hrungsrechner</title>
</head>

<body>
<form action="/cgi-bin/calculator.pl" method="post">
<p>Geben Sie bitte den umzurechnenden Betrag ein:</p>
<p>
<input name="betrag" type="text" id="betrag">
</p>
<p>W&auml;hlen Sie bitte eine Option aus:</p>
<p>
<input type="radio" name="EUR" value="radiobutton">
DM zu EUR</p>
<p>
<input type="radio" name="DM" value="radiobutton">
EUR zu DM</p>
<p>
<input type="submit" name="Submit" value="Umrechnen">
</p>
</form>
</body>
</html>


Ergebnis: Folgende Fehlermeldung

Can't locate CGI.pm in @INC (@INC contains: .) at I:\Dokumente und Einstellungen\Chef\Desktop\Files\sambar62\cgi-bin\calculator.pl line 2. BEGIN failed--compilation aborted at I:\Dokumente und Einstellungen\Chef\Desktop\Files\sambar62\cgi-bin\calculator.pl line 2.
Ronnie
 2006-12-29 22:43
#9415 #9415
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hallo subi,

das CGI benötigt kein HTML-Formular mehr. Wie hast du den perl bei dir auf dem Rechner installiert - bzw. handelt es sich um Activestateperl, oder war es bei dem Sambar-Server dabei? Den Pfaden zufolge ist es ja auf einem Windows-Rechner.

Gruß,
Ronnie\n\n

<!--EDIT|Ronnie|1167425058-->
subi
 2006-12-29 22:55
#9416 #9416
User since
2006-12-29
6 Artikel
BenutzerIn
[default_avatar]
Hallo Ronnie,

Ja, es ist ein Window-Rechner und der Pfad zum Per-Interpreter ist in Ordnung. Andere pl-Skripte funktionieren reibungslos.

Es muss ja ein HTML-Formular zur Eingabe benutzt werden und zwar dieses:


Code: (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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>W&auml;hrungsrechner</title>
</head>

<body>
<form action="/cgi-bin/calculator.pl" method="post">
 <p>Geben Sie bitte den umzurechnenden Betrag ein:</p>
 <p>
   <input name="betrag" type="text" id="betrag">
</p>
 <p>W&auml;hlen Sie bitte eine Option aus:</p>
 <p>
   <input type="radio" name="EUR" value="radiobutton">
 DM zu EUR</p>
 <p>
    <input type="radio" name="DM" value="radiobutton">
    EUR zu DM</p>
 <p>
   <input type="submit" name="Submit" value="Umrechnen">
 </p>
</form>
</body>
</html>


und der pl-skript muss im cgi-ordner gespeichert werden. Wie gesagt, es geht lediglich darum, dieses Konsolenskript umzuschreiben, damit es in HTML augegeben werden kann.

Code: (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
#!usr/bin/perl
print "Geben Sie den umzurechnenden Betrag ein:\n";
$input1= <STDIN>;
chomp ($input1);
$input1 =~ tr/,/./;
$input =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
print "Waehlen Sie bitte eine Option aus:\n";
print "DM zu EUR (1)\n";
print "EUR zu DM (2)\n";
$input2 = <STDIN>;
chomp ($input2);
$EUR = $input1/1.95583;
$DM = $input1*1.95583;
$EURFormatiert = sprintf("%.2f", $EUR);
$DMFormatiert = sprintf("%.2f", $DM);
if ($input2 == 1)
{
print "$input1 DM sind $EURFormatiert EUR\n";
}
elsif ($input2 == 2)
{
print "$input1 EUR sind $DMFormatiert DM\n";
}
else
{
print "Die Option $input2 existiert nicht!\n";
}


HTML-Formular --> pl-Skript --> Ausgabe in HTML

MfG
PerlProfi
 2006-12-30 00:22
#9417 #9417
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Dann sieh dir dochmal ein paar Perl/CGI Tutorials an, oder sieh dir das was Ronnie und MisterL dir geschrieben haben etwas genauer an, oder mach beides.

Perl/CGI Tutorials findest du sehr viele, wenn du einfach bei google 'Perl CGI Tutorial' eingibst.

Hier mal ein paar:
http://www.webdesign-referenz.de/technikI_perl.shtml
http://inconnu.isu.edu/~ink/perl_cgi/index.html

MfG PerlProfi
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2006-12-29 20:11.