Schrift
[thread]13055[/thread]

Variablenänderung



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Gast Gast
 2009-01-26 15:30
#118343 #118343
Hallo Leute,

habe ein kleines Problem mit Perl.

Ich soll ein Kontaktformular abändern. Der Kollege, der es damals erstellt hatte, ist nun nicht mehr da. Und da bleibt es an mir hängen. Kenne mich aber nicht so gut aus mit Perl. Hoffe ihr könnt mir helfen.

Und zwar soll anhand der Länderauswahl im Formular der $receiver geändert werden. D.h. wählt jemand USA aus, dann geht die Mail an global@..., bei UK an europe@..., usw. Hatte die Abfrage per if und elsif gemacht. Nur wird dann der $receiver bei der entsprechenden Bedingung nicht geändert, sondern nimmt den ersten Wert der if-Bedingung.
Meine Idee war, dass die Variable ($receiver) entsprechend geändert wird, wenn die bestimmte Bedingung (Länderauswahl) zutrifft.

Hat da jemand eine Idee?

Besten Dank und Grüße
Timo
renee
 2009-01-26 15:50
#118347 #118347
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ohne Code lässt sich nix sagen. Wir sind ja keine Hellseher ;-)
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/
Gast Gast
 2009-01-26 18:10
#118351 #118351
Also das Formular sieht so aus:
Code: (dl )
1
2
3
4
5
6
7
8
<form name="form1" method="post" action="/cgi-bin/contact.pl">
<select name="country">
<option value="usa">Vereinigte Staaten</option>
<option value="uk">Vereinigtes K&ouml;nigreich</option>
</select>

<input type="submit" class="Button" value="Absenden">
</form>

Und die Perl-Datei so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl

use DBI;
use CGI qw/:all/;

## Daten einlesen
$country = param('country');

if ($country = "usa") { $receiver ="global\@..."; }
elsif ($country = "uk") { $receiver ="europe\@..."; }
... usw

Im Endeffekt soll einfach dann die Mail an die entsprechende Adresse geschickt werden.
Hoffe ihr könnt damit was anfangen.
Struppi
 2009-01-26 18:25
#118355 #118355
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Stringvergleiche gehen in Perl so:
eq = equal
ne = not equal

Code (perl): (dl )
$string1 eq $string2 
pq
 2009-01-26 18:39
#118356 #118356
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
*immer*
Code (perl): (dl )
1
2
use warnings;
use strict;
benutzen.
(Wiki:UseStrict)

dann hätte dich perl bei diesem script gewarnt. du schreibst einen vergleich mit einem einzigen
gleichheitszeichen. aber ein einziges gleichheitszeichen ist eine zuweisung? wie soll das
funktionieren? du willst doch nicht zuweisen, sondern vergleichen. was für ein buch nutzt du
zum perl-lernen?
in einem weiteren schritt hätte perl dich dann gewarnt, dass du strings mit == vergleichen willst.
das macht man stattdessen mit 'eq'.
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
Gast Gast
 2009-01-27 08:39
#118372 #118372
Hab jetzt mal ein wenig rumgespielt. Bekomme mit folgendem Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl -w

use DBI;
use CGI qw/:all/;
use warnings;
use strict;

$country = param('country');

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body>\n";
print "<h1>Hurra, es klappt!</h1>\n";
print "</body></html>\n";

einen "Internal Server Error". Sobald ich die Zeile $country = param('country'); lösche, funktioniert es wieder.
renee
 2009-01-27 08:56
#118373 #118373
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du solltest den von pq verlinkten Artikel schon lesen. Dort steht drin, dass man jede Variable deklarieren muss. (hint: "my" löst viele Probleme)
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/
Gast Gast
 2009-01-27 09:23
#118375 #118375
Hallo renee,
danke für den Hinweis. Nur, was ich nicht verstehe, dass in dem Ursprungs-Perlskript nichts von "my" stand. Dort wurden eine ganze Reihe von Parametern deklariert nach diesem Motto: "$country = param('country');", was auch funktioniert hatte.

Jedenfalls sieht mein Code jetzt so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl -w

use DBI;
use CGI qw/:all/;
use warnings;
use strict;

my $receiver;
my $country = param('country');

if ($country eq "usa") { $receiver ="global\@..."; }
elsif ($country eq "uk") { $receiver ="europe\@..."; }

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body>\n";
print "<h1>$receiver</h1>\n";
print "</body></html>\n";


Nur leider erfolgt keine Ausgabe.
renee
 2009-01-27 09:45
#118377 #118377
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Die mys sind erst durch das use strict zwingend notwendig. Da das Ursprungsskript das nicht verwendet hat, waren die mys nicht unbedingt notwendig.

Das use strict sollte in jedem Perl-Programm Pflicht sein, da es viele Fehler verhindert, weil es den Programmierer gleich auf mögliche Fehler hinweist.

Zu Deinem Problem:

Was heißt "es kommt keine Ausgabe"? Kommt ein Fehler oder wird Dein HTML ausgegeben nur zwischen den <h1></h1> steht nix?

Lass Dir mal zusätzlich zum $receiver auch mal $country ausgeben.
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/
Gast Gast
 2009-01-27 09:58
#118378 #118378
$country wird ausgegeben.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl -w

use DBI;
use CGI qw/:all/;
use warnings;
use strict;

my $receiver;
my $country = param('country');

if ($country eq "usa") { $receiver ="global\@..."; }
elsif ($country eq "uk") { $receiver ="europe\@..."; }

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body>\n";
print "<h1>$receiver $country</h1>\n";
print "</body></html>\n";
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2009-01-26 15:30.