perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 21
Click for quality!




11.02.2012 / 07:08

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  CGI: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragFomularscript um Ausgabeseite erweitern
Seitenanfang
Hallo zusammen,

ich habe zur Zeit folgendes vorgefertigtes Script. Es funktioniert soweit einwandfrei. Ich möchte nun, dass die eingegebenen Formulardaten nicht nur per Mail bei mir ankommen, sondern auch noch einmal auf der "Dankeseite" erscheinen, welcher der User dann sieht. In der SUB "return_html" habe ich schon einmal engefangen und testweise eine Variable ausgegeben. Dort sollen nun die Daten aus dem Formular ausgegeben werden. Also jeweils der Feldname und der Eintrag (z.B. "Name: Nicole") Ich weiß jedoch nicht, wie ich darauf zugreife :( Habe sonst keine Erfahrungen mit Perl, vll. kann mir ja jemand einen Tipp geben??? Danke

Grüße, Nicole


#!/usr/bin/perl -w
############################################################################
#
# (c) Markus Wolf, 1998-2003
#
############################################################################
#
# mailer.cgi
# COPYRIGHT NOTICE
# Copyright 2002 Markus Wolf
# All Rights Reserved.
#
# EMail : support@perlunity.de
# URL : http://www.perlunity.de
#
# mailer.cgi darf von jedermann kostenlos benutzt und ge?ndert werden,
# solange dieser Copyright-Verweis und die restlichen Kommentare erhalten
# bleiben. Mit dem Einsatz dieses Skripts akzeptieren Sie, da? Markus Wolf
# von jeglicher Haftung und Gew?hrleistung hinsichtlich des Einsatzes
# befreit ist.
#
# Der Verkauf und die Verbreitung dieses Skripts, auch in modifizierter
# Form, ist ohne vorherige Absprache ausdr?cklich untersagt. Mit anderen
# Worten: Bitte fragen Sie mich, bevor Sie versuchen, mit meinem Skript
# Geld zu verdienen.
#
# Um dieses Skript ?ber das Internet oder irgendein anderes Medium
# weiterzuverbreiten, ben?tigen Sie vorher meine Erlaubnis. In jeden
# Fall m?ssen der Copyright-Verweis und die restlichen Kommentare
# erhalten bleiben.
#
############################################################################

############################################################################
# Systemeinstellungen
############################################################################

#Wechsel in das aktuelle Verzeichnis
$0 =~ /^(.*)[\/\\].*/ && chdir ($1) ;

#Module
use lib "libs/" ;
use strict ;
use CGI::Carp qw(fatalsToBrowser) ;
use Tie::IxHash ;
use Net::SMTP ;

############################################################################
# Variablendefinition (m?ssen alle angepa?t werden)
############################################################################

#Sendmail-Pfad (Unix)
my $mailprog = "/usr/sbin/sendmail" ;

#SMTP-Server (Windows) - nur eintragen, wenn ?ber smtp verschickt werden
my $smtpserver = "" ;

#SMTP-Debugging (0-nein / 1-ja)
my $smtpdebug = 0 ;

#SICHERHEIT : Hostnamen die Mail empfangen d?rfen -> recipient-Parameter
my @recihosts = ( 'kerzelsklassikmaschinen.de', 'gmx.net' ) ;

#Subjekt der Mail, wenn das Hidden-Feld nicht definiert ist
my $stdsub = "Subject: Mail ueber das Formular";

#Zeitverschiebung in Stunden (+ oder -)
my $zeitverH = 0 ;

#Offline-Modus zum Testen (1=Mail speichern/0=Mail verschicken)
my $offline = 0 ;

#File-Locking (Win9x=0/sonst=1)
my $lock = 0 ;

#############################################################################
# Hauptprogramm starten
#############################################################################

&send_mail() ;

#############################################################################
# Mail verschicken
#############################################################################

sub send_mail {

my $datum=&date_time() ;

###
#Formfelder parsen

my ($MAILHEADER,$MAILFORM,$fehlfeld,$mussfelder)=&parse_form() ;

###
#Fehlercode verarbeiten

unless ($fehlfeld==1) {

###
#Mail verschicken

my ($mailcc,$mailbcc) ;
my $referer = ($ENV{'HTTP_REFERER'}||'kein REFERER vorhanden!') ;
my $absendermail = ($MAILFORM->{$MAILHEADER->{'sender_email'}}||$MAILHEADER->{'recipient'}) ;
my $mailsub = $stdsub ;
my $mailheader = "To: $MAILHEADER->{'recipient'}\n";

$mailheader .= "From: $absendermail\n";
$mailheader .= "X-Mailer: perlunity.de FormMailer \n";

if ($MAILHEADER->{'recipient_cc'}) {
$mailcc = $MAILHEADER->{'recipient_cc'} ;
$mailheader .= "Cc: $MAILHEADER->{'recipient_cc'}\n";
}

if ($MAILHEADER->{'recipient_bcc'}) {
$mailbcc = $MAILHEADER->{'recipient_bcc'} ;
$mailheader .= "Bcc: $MAILHEADER->{'recipient_bcc'}\n";
}

if ($MAILHEADER->{'subject'}) {
$mailsub = $MAILHEADER->{'subject'} ;
}

$mailheader .= "Subject: $mailsub\n\n";
my $mailtext = "-" x 72 . "\n";
$mailtext .= "Mail wurde am $datum verschickt\n";
$mailtext .= "-" x 72 . "\n\n";

foreach my $fn (keys %{$MAILFORM}) {

$mailtext .= "[$fn]\n" ;
$mailtext .= "$MAILFORM->{$fn}\n\n" ;
}

$mailtext .= "-" x 72 . "\n";
$mailtext .= "Script wurde von der IP $ENV{'REMOTE_ADDR'} aufgerufen:\n$referer\n" ;
$mailtext .= "-" x 72 . "\n";


###
#Mail verschicken

&mailing($MAILHEADER->{'recipient'},$absendermail,$mailcc,$mailbcc,$mailsub,$mailheader,$mailtext) ;


###
#Mailadresse speichern

if ($MAILFORM->{$MAILHEADER->{'sender_email'}}) {

open (DAT , ">> data/emails.data") ;
flock(DAT,2) if ($lock==1) ;
print DAT "$MAILFORM->{$MAILHEADER->{'sender_email'}}\n" ;
close (DAT) ;
}

###
#Counter

open (COUNT , "+< data/emails.counter") ;
flock(COUNT,2) if ($lock==1) ;
my $counter=<COUNT>;
seek(COUNT,0,0);
$counter++ ;
print COUNT $counter ;
close (COUNT) ;


###
#Export, wenn definiert

if ($MAILHEADER->{'export_file'} && $MAILHEADER->{'export_fields'}) {

my $export ;

foreach my $ex ( split(/,/,$MAILHEADER->{'export_fields'}) ) {

$MAILFORM->{$ex} =~ s/(\n|\012|\015)+/ /g ;
$export .= $MAILFORM->{$ex}.";" ;
}

open (DAT , ">> data/$MAILHEADER->{'export_file'}") ;
flock(DAT,2) if ($lock==1) ;
print DAT qq($export\n) ;
close(DAT) ;
}
}

###
#R?ckgabeseite nach der Mailzustellung

#&return_html($fehlfeld,$mussfelder,$MAILHEADER->{'redirect'}) ;
$return_html($fehlfeld,$mussfelder,$feldnamen,$MAILHEADER->{'redirect'}) ;

}

#############################################################################
# Formulardaten werden ausgelesen
#############################################################################

sub parse_form {

my (%MAILHEADER,%MAILFORM) ;
my (@required,$buffer,$mussfelder) ;
my $fehlfeld=0 ;

tie %MAILHEADER , "Tie::IxHash" ;
tie %MAILFORM , "Tie::IxHash" ;

###
#Buffer lesen

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

###
#Werte verarbeiten

foreach my $paar (split(/&/, $buffer)) {

my ($feldnamen, $wert) = split(/=/, $paar);

$feldnamen =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$feldnamen =~ tr/+/ /;

$wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$wert =~ tr/+/ /;
$wert =~ s/<!--(.|\n)*-->//g;

if ( $wert && (

$feldnamen eq 'recipient' ||
$feldnamen eq 'recipient_cc' ||
$feldnamen eq 'recipient_bcc' ||
$feldnamen eq 'subject' ||
$feldnamen eq 'redirect' ||
$feldnamen eq 'sender_email' ||
$feldnamen eq 'export_file' ||
$feldnamen eq 'export_fields'
) ) {

$feldnamen =~ s/(\015\012|\015|\012|\n|\r)/ /g ;
$wert =~ s/(\015\012|\015|\012|\n|\r)/ /g ;

$MAILHEADER{$feldnamen} = $wert;

} elsif ($feldnamen eq 'required') {

@required = split(/\|/ , $wert);

} else {

$MAILFORM{$feldnamen} = $wert if ($feldnamen !~ /button/i) ;
}
}

###
#Empf?nger-Host checken

my $hosttest1=0 ;
my $hosttest2=0 ;
my $hosttest3=0 ;

foreach my $recihosts (@recihosts) {

if ($MAILHEADER{'recipient'} =~ /$recihosts$/i) {

$hosttest1=1 ;
}

if ($MAILHEADER{'recipient_cc'} && $MAILHEADER{'recipient_cc'} =~ /$recihosts$/i ) {

$hosttest2=1 ;
}

if ($MAILHEADER{'recipient_bcc'} && $MAILHEADER{'recipient_bcc'} =~ /$recihosts$/i ) {

$hosttest3=1 ;
}
}

if ($hosttest1==0) {

$mussfelder = "<font color=\"ff0000\">Mailempf?nger nicht zugelassen!</font><br>" ;
$fehlfeld=1 ;
}

if ($hosttest2==0 && $MAILHEADER{'recipient_cc'}) {

$mussfelder = "<font color=\"ff0000\">Mailempf?nger (CC) nicht zugelassen!</font><br>" ;
$fehlfeld=1 ;
}

if ($hosttest3==0 && $MAILHEADER{'recipient_bcc'}) {

$mussfelder = "<font color=\"ff0000\">Mailempf?nger (BCC) nicht zugelassen!</font><br>" ;
$fehlfeld=1 ;
}

###
#Mussfelder checken

foreach my $require (@required) {

if (!$MAILFORM{$require}) {

$mussfelder.= "<font color=\"F89329\">$require</font><br>" ;
$fehlfeld=1 ;
}

}

foreach my $require ('recipient','redirect') {

if (!$MAILHEADER{$require}) {

$mussfelder.= "<font color=\"F89329\">Systemfeld: $require</font><br>" ;
$fehlfeld=1 ;
}

}

###
#Spamcheck

foreach my $key (keys %MAILHEADER) {

if ($MAILHEADER{$key} =~ /\n/) {

$mussfelder.= "<font color=\"ff0000\">Systemfeld: $key (NEWLINE NOT ALLOWED)</font><br>" ;
$fehlfeld=1 ;
}
}

foreach my $key (keys %MAILFORM) {

if ($MAILFORM{$key} =~ /(to|from|cc|bcc)\:\s+/i) {

$mussfelder.= "<font color=\"ff0000\">NOSPAM: $key</font><br>" ;
$fehlfeld=1 ;
}
}

###
#R?ckgabe Form-Felder

return(\%MAILHEADER,\%MAILFORM,$fehlfeld,$mussfelder) ;

}

#############################################################################
# R?ckgabeseite ausgeben
#############################################################################

sub return_html {

my $fehlfeld=shift ;
my $mussfelder=shift ;
my $redirect=shift ;
my $line ;

my $test = "TEST";

###
#R?ckgabeseite ausgeben

if ($fehlfeld==1) {

###
#Fehler

print "Content-Type: text/html\n\n" ;

open(RE , "< tmpl/stdfehl.htm") || die "Kann das Fehlertemplate -tmpl/stdfehl.htm- nicht laden !" ;
while ($line=<RE>) {

if ($line =~ /<!--mussfelder-->/i) {
print "$mussfelder";
} else {
print $line ;
}

} close(RE) ;

} else {

###
#Dank-Seite

print "Content-Type: text/html\n\n" ;

open(RE , "< tmpl/stddank.htm") || die "Kann das Fehlertemplate -tmpl/stddank.htm- nicht laden !" ;
while ($line=<RE>) {

if ($line =~ /<!--feldnamen-->/i) {
print $test;
} else {
print $line ;
}

} close(RE) ;
}

}

############################################################################
# Das eigentliche Mailing ( UNIX/Linux - Sendmail | Windows - SMTP )
############################################################################

sub mailing {

my ($mailto,$mailfrom,$mailcc,$mailbcc,$mailsub,$mailheader,$mailtext) = @_ ;

###
#Absender-Mail checken

unless ($mailfrom =~ /^.*?\@.*?\..*?$/) {

$mailfrom=$mailto ;
}

###
#SMTP-Debug

if ($smtpserver && $smtpdebug==1) {

print "Content-Type: text/html\n\n<pre>" ;
print "$mailto,$mailfrom,$mailsub,$mailheader" ;
}

###
#Mail-Versand

if($offline==1) {

###
#Mail in Datei schreiben (cgi-bin/shop/mail)

open(MAIL,"> ./temp/mail.txt") ;
print MAIL $mailheader ;
print MAIL $mailtext ;
close (MAIL) ;

} else {

if($smtpserver) {

###
#Mail per SMTP unter NT verschicken

my $smtp = Net::SMTP->new( $smtpserver, Hello => $smtpserver , Debug => $smtpdebug );
my $header=qq(To: $mailto\nFrom: $mailfrom\nSubject: $mailsub\n) ;

$smtp->mail($mailfrom);
$smtp->to($mailto , {SkipBad=>1} ) ;
$smtp->to($mailcc , {SkipBad=>1} ) if($mailcc) ;
$smtp->to($mailbcc , {SkipBad=>1} ) if($mailbcc) ;
$smtp->data();
$smtp->datasend($mailheader."\n\n");
$smtp->datasend($mailtext);
$smtp->dataend();
$smtp->quit();


} else {

###
#Mail per SENDMAIL unter Unix verschicken

open(MAIL,"| $mailprog -t") || die "Kann die E-Mail ?ber -$mailprog- nicht verschicken. Es ist eventl. der falsche sendmail-Pfad eingestellt." ;
print MAIL $mailheader ;
print MAIL $mailtext ;
close (MAIL) ;

}
}

}

#############################################################################
# Aktuelles Datum und Uhrzeit zur?ckgeben
#############################################################################

sub date_time {

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+(3600*$zeitverH));

###
#Formatierung

my $datum = sprintf "%02d.%02d.%04d um %02d:%02d" , $mday , $mon+=1 ,$year+=1900 , $hour , $min ;

###
#R?ckgabe Datum

return($datum) ;

}

#############################################################################
# ENDE
#############################################################################

Datum: 17.10.2007-16:06

Beitragre: Fomularscript um Ausgabeseite erweitern
Seitenanfang
PS: Die Daten sollen also dort aufgelistet werden, wo zur Zeit "print $test;" steht.

Datum: 17.10.2007-16:08

-






-
-