Thread Formular Reset bzw. Site-Wechsel, ohne Button (16 answers)
Opened by Olli at 2011-05-27 18:39

GwenDragon
 2011-05-30 11:28
#149235 #149235
User since
2005-01-17
14544 Artikel
Admin1
[Homepage]
user image
So könntest du das machen (als Anschaungsbeispiel, weil ich deinen Code nicht kenne), wenn nach dem erfolgreichen Senden etwas angezeigt werden soll.

Code (perl): (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
#!/usr/bin/perl

use strict;
use warnings;

use CGI;

my $q = CGI->new;

my $firmen_mail = 'info@example.org';    # eigene Mailadresse

my $name    = $q->param('name')    || '';
my $email   = $q->param('mail')    || '';
my $anfrage = $q->param('anfrage') || '';

my $mail_sent = 0;                       # Flag, ob Mail gesendet wurde

# ab hier Parameter auf Gültigkeit prüfen
my $fehlermeldung = '';
my $parameter_fehler = 0;

# # ungetester Regex!
# besser Mailadressen mit Modul Email::Valid testen!
if ( $email !~ /[a-zA-Z0-9][a-zA-Z0-9_.-]+\@[a-zA-Z0-9_.-]+(\.[a-zA-Z]+)/ ) { 
  $parameter_fehler = 1;
  $fehlermeldung = 'E-Mail falsch eingegeben';
}
#

# sendmail und Parameter
my $sendmail = "> mailout.txt";    # Ausgabe an Datei nur für lokales Testen!!!!
#my $sendmail = "| /usr/lib/sendmail -t -oi";

if ( !$parameter_fehler && $name && $email && $anfrage ) {    # Formular wurde abgesendet
    if ( open( my $sm, $sendmail ) ) {    # sensmail öffnen
        $email =~ s/[\r\n]//g;

        print $sm <<MAIL;                 # Mail-Header und -Body senden
From: $name <$email>
To: Informationszentrale <$firmen_mail>
Subject: Ihre Anfrage

$anfrage
MAIL

        close($sm)
          && $mail_sent++;    # sendmail schließen und Flag für gesendet setzen

        $q->delete_all();     # alle CGI-Parameter löschen
    }
}

print $q->header;
print $q->start_html( -title => 'Anfrage' );

if ( not $mail_sent ) {
    print  $q->p( "Fehleingabe: ", $q->b( $fehlermeldung ) ) if length $fehlermeldung;

    print $q->start_form,
      $q->p( "Name   : ", $q->textfield( -name => 'name' ) ),
      $q->p( "E-Mail : ", $q->textfield( -name => 'mail' ) ),
      $q->p( "Anfrage: ", $q->textarea( -name => 'anfrage' ) ),
      $q->submit,
      $q->end_form;
}
else {
    print $q->p(
        [ "Danke für Ihre Anfrage.", "Wir werden Sie demnächst kontaktieren." ]
    );
}

print $q->end_html;


//EDIT:
Eigentlich müsstest du wie in Zeile 23 (der Code ungetestet!) noch erweitert prüfen, ob alle Daten der Parameter gültig sind und dann eine Fehlermeldung später anzeigen.
Aber das kannst du ja noch einfügen.
Last edited: 2011-05-30 12:28:48 +0200 (CEST)
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

View full thread Formular Reset bzw. Site-Wechsel, ohne Button