Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]2986[/thread]

Browser-Magie mit Formular



<< >> 10 Einträge, 1 Seite
Captain Future
 2005-02-08 18:09
#28299 #28299
User since
2004-01-16
19 Artikel
BenutzerIn
[default_avatar]
Sorry Leute hatte mich vorhin nicht eingeloggt.

MfG Captain Future
Captain Future
 2005-02-08 18:43
#28300 #28300
User since
2004-01-16
19 Artikel
BenutzerIn
[default_avatar]
Hi Leute,

Habe in der HTML-Datei im form-Tag enctype="text/plain" raus genommen.
Jetzt klappt es im Firefox, Mozill un IE.

Aber ob das sinnvoll ist enctype rauszunehmen.
Und was soll bitte anderes über dieses Formular gesendet werden als text/plain ?

Nehmt mal lieber folgenden Link den Geocities macht etwas Probleme:

http://www.geocities.com/n_meiser/kontakt.html   (Datei mit aktuellen Änderungen)
http://www.geocities.com/n_meiser/kontakt.txt     (ist das .pl Script)
http://www.geocities.com/n_meiser/kontakt_original.html   (Ursprungsdatei)

MfG Captain Future\n\n

<!--EDIT|Captain Future|1107883848-->
GwenDragon
 2005-02-08 19:42
#28301 #28301
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
[quote=Captain Future,08.02.2005, 17:43]Aber ob das sinnvoll ist enctype rauszunehmen.
Und was soll bitte anderes über dieses Formular gesendet werden als text/plain ?[/quote]
Das andere Format ist eben application/x-www-form-urlencoded.

Da musst du dann ein bisschen umwandeln, hat aber den Vorteil, dass jeder Browser das als Standard nimmt.

* Es emnpfiehlt sich, Dateien, die du zum Schreiben öffnest, bis zum close zu sperren! Ansonsten gibt es Müll, wenn du Pech hast!
* Zudem würde ich Dateien ohne den Shellaufruf von cat auslesen
* Schon mal daran gedacht, eingelesene Daten des Formulars auf ungültige Zeichen zu testen? Ansonsten hast du ein Sicherheitsloch.\n\n

<!--EDIT|GwenDragon|1107884964-->
coax
 2005-02-09 04:31
#28302 #28302
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
002: # Pfad zu Prel

Was ist Prel ? hihi



Code: (dl )
021: my $os = "UNIX";

Du kannst die Spezialvariable $^O nutzen um herauszufinden
unter welchen Betriebssystem das Skript laeuft.

Code: (dl )
my $osname = $^O;




Code: (dl )
027: my @email_list = ("info\@chedapinta.com", "webmaster\@chedapinta.com");


Wenn du den qw-Operator nutzt kann man verhindern, dass ein
fehlender Backslash zu ungeahnten Fehlern fuehrt.

Code: (dl )
1
2
3
4
my @email_list = qw(
   info@chedapinta.com
   webmaster@chedapinta.com
);





Was machst du hier ?
Code: (dl )
035: $FORM{'recipient'} = my $recipient;



Code: (dl )
1
2
043: $text =~ s/\cM//g;
044: $text =~ s/\n//g;

Ich verstehe zwar nicht warum du alle Zeilenumbrueche entfernst
aber, hier etwas schneller:
Code: (dl )
$text =~ tr/\r\n//d




Code: (dl )
061: (my $sec, my $min, my $hour, my $mday, my $mon, my $year, my $wday, my $yday, my $isdst) = localtime(time);


kurz:
Code: (dl )
my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);




Code: (dl )
1
2
3
4
5
6
7
067: my $countfile = 'kontaktcount.txt';
068: my $count = `cat $countfile`;
069: chop($count);
070: $count = $count + 1;
071: open (INF, ">$countfile") || die "Kann Countfile nicht öffnen: $!";
072: print INF "$count\n";
073: close (INF);


So viel zu Punkt 2
Code: (dl )
1
2
3
4
5
6
7
8
9
my $countfile = 'kontaktcount.txt';
my $count;
open(COUNT, '<', $countfile) or die $!;
my $count = <COUNT>;
close(COUNT);
chomp($count);
open(COUNT, '>', $countfile) or die $!;
print ++$count;
close(COUNT);

und Punkt 3 (Sperrung der Datei):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
my $countfile = 'kontaktcount.txt';
my $count;
open(COUNT, '<', $countfile) or die $!;
flock(COUNT, 2) or die $!;
my $count = <COUNT> || 0;
flock(COUNT, 8) or die $!;
close(COUNT);
chomp($count);
open(COUNT, '>', $countfile) or die $!;
flock(COUNT, 2) or die $!;
print ++$count;
flock(COUNT, 8) or die $!;
close(COUNT);

oder aber
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
use Fcntl;

my $countfile = 'kontaktcount.txt';
sysopen(COUNT, $countfile, O_RDWR|O_CREATE) or die $!;
flock(COUNT, 2) or die $!;
my $count = <COUNT> || 0;
chomp($count);
seek(COUNT, 0, 0) or die $!;
truncate(COUNT, 0, 0) or die $!;
print COUNT ++$count;
close(COUNT);


Hier pruefst du nur ob eine Ziffer im Namen enthalten ist.
Code: (dl )
089: &falsch('Fehler 04: Bitte einen gueltigen Namen eingeben !<br>') unless ($name =~ m/\D/);


besser waere natuerlich du schlieszt alle Zeichen bis auf
die die du haben willst aus.
Code: (dl )
&falsch('...') unless $name =~ /^[-A-Za-z\s]+$/; # Bindestrich, Buchstaben, Leerzeichen


Code: (dl )
1
2
3
4
5
6
7
8
9
05: open (MAIL, "|$mailprog -oi -t") || die "Kann Sendmail nicht starten: $!";
106: print MAIL "From: $email\n";
107: print MAIL "To: $email_list[0]\n";
108: print MAIL "Subject: $subject\n\n";
109: print MAIL "===========================================\n";
110: print MAIL "====== KUNDENANFRAGE via WebFormular ======\n";
[...]
127: print MAIL "<<< Dies ist ein Service des Webmasters: Nils Meiser >>>";
128: close (MAIL);

mit einen HERE-Dokument sparst du dir ein paar prints und die explizite
Angabe von Newlines:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
print MAIL <<"EOMAIL";
From: $email
To: $email_list[0]
Subject: $subject

===========================================
====== KUNDENANFRAGE via WebFormular ======
[...]
<<< Dies ist ein Service des Webmasters: Nils Meiser >>>
EOMAIL


Grusz Christian :).
,,Das perlt aber heute wieder...'' -- Dittsche
Gast Gast
 2005-02-08 18:00
#28303 #28303
Hi Leute,

habe einen Formmailer für ein Kontaktformular geschrieben und seit ner Zeit am laufen (dachte ich jedenfalls).
Hatte das ganze (cgi) nur mit Opera getestet (grosses Fehler).

Also unter Opera (7.54) läuft es und nach Eingabe in die 3 Pflichtfelder wird die Erfolgsseite gebracht und die Mail versendet.

Unter Mozilla (1.7), Firefox (1.0) und dem IE kommt bei der gleichen Eingabe die Fehlerseite mit allen Fehlern die nur möglich sind (Fehlen aller Eingaben und Falsche Formate).

Also ehrlich das Script läuft ohne Fehlermeldung aber je nach Browser nimmt es die Eingaben an oder nicht ?

Darauf kann ich mir keinen Reim machen.

Könnt Ihr euch das bitte mal anschauen ist einfach zu verhext.

Schonmal Danke im voraus.

Code: (dl )
1
2
3
4
5
Links 2 the needs:

http://www.geocities.com/Area51/Shuttle/5695/kontakt.html

http://www.geocities.com/Area51/Shuttle/5695/kontakt.pl


MfG Captain Future
GwenDragon
 2005-02-08 18:17
#28304 #28304
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Quote
http://www.geocities.com/Area51/Shuttle/5695/konta...

Wie wärs denn, wenn du einen gültigen Mime-Type zurück sendest? application/x-perl ist falsch! Eine merkwürdige Fehlerbehandlung ;)

Ansonsten, kann ich ohne den Quellcode des Skripts auch nichts sagen.\n\n

<!--EDIT|GwenDragon|1107880076-->
GwenDragon
 2005-02-08 19:39
#28305 #28305
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Geht doch!

Hat vielleicht damit zu tun, dass der Server ein bisschen spinnt?

//Edit: Oops, zu spät getestet und dann nicht hier geschaut ;)\n\n

<!--EDIT|GwenDragon|1107885023-->
Captain Future
 2005-02-08 20:47
#28306 #28306
User since
2004-01-16
19 Artikel
BenutzerIn
[default_avatar]
Hi GwenDragon,

O.K. funzt jetzt prima. :-))

Falls ich "application/x-www-form-urlencoded" angeben wollte, geht das dann auch über enctype="application/x-www-form-urlencoded" oder wie geht das genau ?

Vielleicht habt Ihr ja nen ausgesuchten Link zum Thema sonst google ich mal ne Runde.

zu *1 wie das im Detail aussehen würde hätte mich schon interessiert mein Script könnt Ihr ja komplett einsehen. Aber bitte daran denken das Schreiben in die Datei ist nur als Zählerfunktion gedacht.

zu*2 wie würdest du das denn machen und warum bei unix-system nicht cat ?

zu*3 Ja wollte das mit
Code: (dl )
&falsch('Fehler 05: Bitte eine gueltige eMail Adresse eingeben !<br>') unless (Email::Valid->address($email));

abfangen, aber habe das Mod noch nicht installiert. Provider meinte er macht das nicht auf den Server - müßte ich mir in mein eigenes cgi-bin einspielen. Da habe ich aber nicht so die praktische Erfahrung. Tipps und Anleitungen erwünscht.
Die Größe der Eingabe im Textfeld wird im cgi-Script ja auch beschränkt.

Ansonsten schonmal Danke für die schnelle Hilfe.
Manchmal sieht man einfach den Wald nicht mehr vor lauter Bäumen. :-)

MfG Captain Future
Strat
 2005-02-10 22:37
#28307 #28307
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
beim versenden von mails via sendmail oder aehnlichem bekommt man erst beim close mit, ob die mail versendet werden kann oder nicht (z.B. ungueltige absende-mail-adresse)... also ist es sehr nachlaessig, beim close keine fehlerueberpruefung zu machen...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2005-02-10 22:39
#28308 #28308
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ps:
Code: (dl )
1
2
3
unless (close(MAIL)) {
die "Error in sending mail: $!\n";
}

oder
Code: (dl )
close(MAIL) or die "Error in sending mail: $!\n";
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 10 Einträge, 1 Seite



View all threads created 2005-02-08 18:09.