Schrift
[thread]2973[/thread]

Hilfe mit Formular Script: CGI - Perl ### Formular (Seite 2)

Leser: 2


<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten
Captain Future
 2004-01-17 23:23
#28176 #28176
User since
2004-01-16
19 Artikel
BenutzerIn
[default_avatar]
Hallo,

also das mit dem @email_list funktioniert irgendwie noch nicht trotz my.

Global symbol "@email_list" requires explicit package name at formpost.pl line 32.
Global symbol "@email_list" requires explicit package name at formpost.pl line 88.
BEGIN not safe after errors--compilation aborted at formpost.pl line 96.
[Sat Jan 17 21:36:19 2004] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: /home/xyz4711.de/www/cgi-bin/formpost.pl
Code: (dl )
1
2
# E-Mail Adresse des Empf&auml;ngers (mit \@):
my @email_list = ("info\@xyz4711.de", "webmaster\@xyz4711.de");

Ebenso in line 88.

Was stimmt da denn nicht ?

MfG Captain Future
Dubu
 2004-01-18 15:05
#28177 #28177
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Captain Future,18.01.2004, 11:18]
Code: (dl )
1
2
### Line 130 ###
print MAIL "To: $email_list[$recipient, $recipient_bcc]\n";

[/quote]
Ups, das hatte ich beim ersten Mal uebersehen. Das klappt so nicht.

Erstens sagst du durch das '$' bei $email_list, dass das Ergebnis ein Skalar sein soll, kein Array und keine Liste. Du moechtest jedoch mehrere Elemente aus @email_list, also hiesse es richtig "@email_list[$recipient, $recipient_bcc]".

Zweitens muessen allerdings im "To:"-Feld die Adressen durch Kommata getrennt werden, was so natuerlich nicht geschieht. Einerseits koenntest du jetzt durch ein $"=','; erreichen, dass die Listenelemente durch Komma getrennt werden, aber in diesem Fall halte ich es fuer uebersichtlicher, die beiden Elemente hintereinander zu setzen:
Code: (dl )
print MAIL "To: $email_list[$recipient], $email_list[$recipient_bcc]\n";

Wozu brauchst du eigentlich die Variablen $recipient und $recipient_bcc? Sie koennen ja doch nur die Werte 0 und 1 haben. ???

Quote
Code: (dl )
1
2
3
4
5
6
7
### Line 169 ###
print <<"ENDE"
<html>
...
href="mailto:webmaster@xyz4711.de"><i>Webmaster</i></a></font></b></font>
...
ENDE

Die Fehlermeldung ist deshalb etwas missverstaendlich, weil Perl das gesamte Here-Document zur Zeile des Print-Befehls zaehlt. Der eigentliche Fehler ist zwar innerhalb des ausgegebenen Textes, aber einige Zeilen tiefer. Dort muss einfach ein '\' vor das '@', damit Perl nicht mehr denkt, du wolltest eine Arrayvariable @xyz4711 ausgeben.

Quote
Code: (dl )
1
2
3
4
5
6
7
### Line 203 ###
print <<"FIN"
<html>
...
href="mailto:webmaster@xyz4711.de"><i>Webmaster</i></a></font></b></font>
...
FIN

Das Gleiche hier: Ersetze "webmaster@xyz4711" durch "webmaster\@xyz4711".

Quote
[Sun Jan 18 10:36:44 2004] formpost.pl: Missing right curly or square bracket at formpost.pl line 233, at end of line
[Sun Jan 18 10:36:44 2004] formpost.pl: syntax error at formpost.pl line 233, at EOF

Tja, Perl hat festgestellt, dass irgendwo eine schliessende geschwungene oder eckige Klammer fehlt. Da Perl nicht weiss, wie die Logik des Programms aussieht, kann es dir auch nicht genauer sagen, wo diese fehlt; nur ist am Ende des Programms eine zu wenig geschlossen.

Wenn ich nun ueber den Text drueber schaue, dann hat Perl mehr als recht, denn es fehlt nicht nur eine, sondern ganz viele Klammern: In allen Zeilen der Form
Code: (dl )
if ($FORM{'Kacheloefen'} ne "") {print MAIL "$FORM{'Kacheloefen'}\n";

fehlt hinten die schliessende geschwungene Klammer!

Da hast du noch etwas Arbeit. :)

Uebrigens: Diese Zeilen kannst du auch so schreiben:
Code: (dl )
print MAIL "$FORM{Kacheloefen}\n" if $FORM{Kacheloefen} ne "";

Da kann man sich dann die Klammern wirklich sparen. ;)
eisbeer
 2004-01-18 23:25
#28178 #28178
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Laut meinem Perl ist \xA0 übrigens ein á,
aber in Zeile 61 finde ich das beim besten willen nicht :)

Du hast vielleicht aus versehen etwas beim Kopieren
reingebracht ...
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
Captain Future
 2004-01-24 02:42
#28179 #28179
User since
2004-01-16
19 Artikel
BenutzerIn
[default_avatar]
Hi Dubu,

Danke erstmal.
Habe deine Punkte gecheckt und ausgebessert und diverse Sachen im Script überprüft und verbessert.
Manche Sachen sieht man einfach nicht erst wenn man wieder Abstand davon gewinnt oder mit der Nase draufgestupft wird.

Aber wie mache ich das mit der missing()-Geschichte ?
Hier soll ja alles was fehlt (ob nur Vorname, ein oder zwei Einträge oder alle) aufgelistet werden und durch eine Variable $fehler ausgegeben werden.

Ein paar Fehler sind wohl noch drin habe das Script + Error-File aktualisiert und auch die Formulardatei auf diesem Server (Siehe errors.txt).

Währe super wenn von Euch noch einer Bock hat sich das anzuschauen.
Schonmal Danke im Voraus.

Bin ich froh wenn das die Tage läuft und vor allem mein Perlbuch endlich kommt.

MfG Captain Future
Dubu
 2004-01-28 22:36
#28180 #28180
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Captain Future,28.01.2004, 02:08]
Code: (dl )
1
2
3
4
my $fehler;
my $checker=0;
sub falsch {
       $fehler = @_;

[/quote]
Das weist $fehler die Anzahl der Elemente in @_ zu. (@_ im skalaren Kontext!) Du meinst sowas:
Code: (dl )
        $fehler .= shift;

Das haengt das erste Element in @_, also den ersten Uebergabeparameter, hinten an $fehler an.

Mir ist aber dennoch schleierhaft, warum $fehler dann '11' oder '111' ist. (Oder gibst du in missing() $fehler mehrfach aus?)

Quote
Code: (dl )
1
2
3
4
        $checker=1;
}
...
&falsch('Fehler 06: Bitte eine gueltige eMail Adresse eingeben !<br>') unless ($email =~ m/^[a-zA-Z0-9][-\_\.]*[a-zA-Z0-9]\@[a-zA-Z0-9][-\_\.]*[a-zA-Z0-9]\.([a-zA-Z]){2,4}$/);

Das ist keine gute Regex fuer E-Mail-Adressen.
Du verlangst ein alphanumerisches Zeichen am Anfang, dann beliebig oft '-', '_' oder '.' hintereinander, dann noch ein weiteres alphanumerisches Zeichen vor dem '@'. Dahinter sieht's genauso aus. Da wird kaum jemand eine korrekte E-Mail haben.
Nimm lieber Email::Valid o.ae. dafuer. Eine korrekte Regex fuer E-Mail-Adressen geht ueber ca. eine Seite (s. Friedl, "Regular Expressions").

Quote
Code: (dl )
&falsch('Fehler 07: Bitte eine gueltige Telefonnummer eingeben !<br>') unless ($telefon =~ m/^[0]\d+.\d+$/);

Warum setzt du die Null in eckige Klammern? Das bedeutet "ein beliebiges Zeichen aus der Menge, die nur die Null enthaelt". Danach kommt eine oder mehr Ziffern, ein beliebiges Zeichen ('.'), gefolgt von einer oder mehr Ziffern. Hm.

Quote
Code: (dl )
&falsch('Fehler 08: Bitte eine gueltige Telefaxnummer eingeben !<br>') unless ($telefax =~ m/^[0]\d+.\d+$/);

s.o.

Quote
Code: (dl )
&falsch('Fehler 09: Bitte einen gueltigen Strassennamen eingeben !<br>') unless ($strasse =~ m/\w?\-\w/);

Deine $strasse muss ein '-' enthalten?

Quote
Code: (dl )
&falsch('Fehler 10: Bitte einen gueltigen Ortsnamen eingeben !<br>') unless ($ort =~ m/\D/);

Dein Ort ist gueltig, wenn mindest ein Zeichen keine Ziffer ist.

Quote
Code: (dl )
&falsch('Fehler 11: Bitte einen gueltigen Landesnamen eingeben !') unless ($land =~ m/\D/);

s.o.

Tja, mit den Regexen hast du noch ein paar Probleme.
Crian
 2004-01-16 02:30
#28181 #28181
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Zu

Code: (dl )
1
2
3
### Zeile 74 ###
&falsch(Fehler 01: Bitte eine gueltige Postleitzahl(PLZ) eingeben !) unless ($input08 =~ m/\d{5});
### Zeile 75 ###


Du musst den übergebenen String in Anführungszeichen setzen, dann sollte es auch klappen.

Außerdem rate ich davon ab, Funktionen mit & aufzurufen, da das den Prototypen außer Kraft setzt.\n\n

<!--EDIT|Crian|1074213052-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pq
 2004-01-16 14:52
#28182 #28182
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hallo strat, dazu muss ich jetzt mein übliches sprüchlein ablassen:
[quote=Strat,16.01.2004, 11:37]Email-Adressen wie irgendwas.@irgendwas.de sind auch gueltig...[/quote]
im wahrsten sinne des wortes. als beispieladressen bitte immer example.org
o.ä. verwenden, sonst freut sich der inhaber von irgendwas.de ganz doll über viel post.
danke =)
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
format_c
 2004-01-17 21:44
#28183 #28183
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
So:
Code: (dl )
1
2
# E-Mail Adresse des Empf&auml;ngers (mit \@):
my @email_list = ("info\@xyz4711.de", "webmaster\@xyz4711.de");


Mit dem HTML-Formular: Angenommen, das Formular liegt in http://domain.de/pfad/form.html

Und das Script in http://domain.de/cgi-bin/script.pl

Sieht der Form-Tag so aus:
Code: (dl )
<form action="../cgi-bin/script.pl" method="....


Gruß Alex
renee
 2004-01-18 14:52
#28184 #28184
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[Sun Jan 18 10:36:44 2004] formpost.pl: Multidimensional syntax $email_list[$recipient, $recipient_bcc] not supported at formpost.pl line 130.
[Sun Jan 18 10:36:44 2004] formpost.pl: Useless use of private variable in void context at formpost.pl line 130.

Hier greifst Du falsch auf die Arrayelemente zu. Mach das mal so:
Code: (dl )
1
2
3
4
5
6
open (MAIL, "|$mailprog -oit") || die "Kann Sendmail nicht starten: $!";

### Line 130 ###
print MAIL "To: $email_list[0], $email_list[1]\n";
print MAIL "From: $input05, $input06\n\n";
print MAIL "------ KUNDENANFRAGE via WebFormular ------\n";


[Sun Jan 18 10:36:44 2004] formpost.pl: Possible unintended interpolation of @xyz4711 in string at formpost.pl line 169.
[Sun Jan 18 10:36:44 2004] formpost.pl: Possible unintended interpolation of @xyz4711 in string at formpost.pl line 203.
[Sun Jan 18 10:36:44 2004] formpost.pl: Global symbol "@xyz4711" requires explicit package name at formpost.pl line 169.

Hier musst Du das @ mit einem Backslash escapen. In etwa so:
Code: (dl )
<font color="#FFDF00"><i>Ihr xyz4711 &nbsp;&nbsp; || &nbsp;&nbsp; &copy; </i><a href="mailto:webmaster\@xyz4711.de">
\n\n

<!--EDIT|renee|1074430400-->
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/
Captain Future
 2004-01-18 20:02
#28185 #28185
User since
2004-01-16
19 Artikel
BenutzerIn
[default_avatar]
Hi,
habe ich gleich mal umgesetzt.

Aber irgenwo krankelts noch:

[Sun Jan 18 17:44:01 2004] formpost.pl: Global symbol "$fehler" requires explicit package name at formpost.pl line 203.
[Sun Jan 18 17:44:01 2004] formpost.pl: Missing right curly or square bracket at formpost.pl line 232, at end of line
[Sun Jan 18 17:44:01 2004] formpost.pl: syntax error at formpost.pl line 232, at EOF
[Sun Jan 18 17:44:01 2004] formpost.pl: Execution of formpost.pl aborted due to compilation errors.

Hier mal den Link zum Script als .txt:
http://www.geocities.com/Area51/Shuttle/5695/formpost.txt

MfG Captain Future
<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten



View all threads created 2004-01-16 12:37.