Two-in-one

Hi Leute,

ich bin nicht sehr bewandert in der Perl Programmierung. Wie ich ein Perlscript aus HTML aufrufe, ist mir klar.

Vorgeschichte:
Eine HTML-Formularseite steht zur Eingabe von Adressdaten zur Verfügung. Diese Daten werden ans Perlscript gesendet und dort für ein Datenbank-Prog aufbereitet. So weit alles klar.

In dem HTML-Formular werden bisher der Vor- und Nachname in einem „Contact“-Feld eingegeben. Im Datenbank-Prog existiert ebenfalls dieses „Contact“-Feld. Der Vorname muß nicht zwingend in dieses Feld mit eingegeben werden.

Jetzt mein Problem:
In einem anderen HTML-Formular werden Vor- und Nachname in getrennten Feldern eingegeben. Dieses Formular MUSS so erhalten bleiben!
Wie kann ich im Perl-Script (oder auch schon teilweise im HTML) diese beiden Felder („Vorname“ und „Name“) mergen (ins Feld „Contact“).

Wer kann mir beim programmieren behilflich sein? Wenn nötig, kann ich auch das Perl-Script zusenden.

Danke :smile:
Bernd (bdiX)

#!/usr/bin/perl

Hi Bernd!

Kommen wir gleich zur Sache:

:In einem anderen HTML-Formular werden Vor- und Nachname in

:getrennten Feldern eingegeben. Dieses Formular MUSS so

:erhalten bleiben!

use CGI;
$daten=new CGI;
$vorname =$daten->param(‚Vorname‘);
$nachname=$daten->param(‚Nachname‘);

:Wie kann ich im Perl-Script (oder auch schon teilweise im

:HTML) diese beiden Felder („Vorname“ und „Name“) mergen (ins

:Feld „Contact“).

$contact=$vorname." ".$nachname;

:smiley:anke :smile:

return „Nichts zu danken“;

Gruss, Ingo

Deine Empfehlung war schon sehr hilfreich. Das kann ich auch fast vollständig nachvollziehen. Mit dem „use CGI;“ und dem „new CGI;“ nach dem „$daten“ komme ich nicht ganz klar.

Die Daten werden in ihre Zuornungen aufgesplittet, dann die unsichbar übertragenen Daten übernommen, alles sortiert und als entsprechend formatierten Datenstrom als Mail verschickt. Dieser wird dann vom mailfähigen Datenbankprog abgerufen und ausgewertet.
Habe ich den teil des Mergen des Vor- und Nachnamen an der richtigen Stelle plaziert?

Mein Script sieht so aus:

#!/usr/bin/perl

Pfad des Mail-Programms auf dem Server

$mailprog = ‚/usr/sbin/sendmail‘;

Wie viele Bytes sollen empfangen werden?

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

Liste mit Schlüsselwort-/Wertepaaren erstellen

@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(„C“, hex($1))/eg;
$name =~ s///g;
$name =~ s/]|\n)*>//g;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(„C“, hex($1))/eg;
$value =~ s///g;
$value =~ s/]|\n)*>//g;
$FORM{$name} = $value;
}

Lesen der unsichtbar übertragenen Variablen

$subject = $FORM{subject};
$to = $FORM{to};
$from = $FORM{from};
$followupurl = $FORM{followupurl};

Mergen des Vor- und Nachnamen in Contact

use CGI;
$daten=new CGI;
$vorname =$daten->param(‚vname‘);
$nachname=$daten->param(‚nname‘);

$contact=$vorname." ".$nachname;

Öffnen des Mail-Programms

open(MAIL,"|$mailprog -t");

Gesendeter Inhalt der EMail-Message

print MAIL „Content-Type: application/x-gm-impdata\n“;
print MAIL „To: $to\n“;
print MAIL „From: $from\n“;
print MAIL „Subject: $subject\n“;
print MAIL „\n“;
print MAIL „[Instructions]\n“;
print MAIL „savethis=Web Import File\n“;
print MAIL „DupCheck1=contact\n“;
print MAIL „DupCheck2=company\n“;
print MAIL „DupCheck3=phone1\n“;
print MAIL „OnNewSendEmail=WEBIMP,Neuer Web-Kontakt ist eingegangen!\n“;
print MAIL „OnDupSendEmail=WEBIMP,DOPPELTER DATENSATZ angelegt!\n“;
print MAIL „OnNewAttachTrack=WEB-HINWEIS\n“;
print MAIL „ProperCase=Company, etc.\n“;
print MAIL „UpperCase=State\n“;
print MAIL „\n“;
print MAIL „[Data]\n“;

foreach $key (keys(%FORM)) {
if ($key ne „subject“ && $key ne „to“ && $key ne „from“ && $key ne „followupurl“ && $key !~ /\bcs._/) {
print MAIL „$key=$FORM{$key}\n“;
}
}

print MAIL „\n“;
print MAIL „[ContSupp]\n“;

foreach $key (keys(%FORM)) {
if ($key ne „subject“ && $key ne „to“ && $key ne „from“ && $key ne „followupurl“ && $key =~ /\bcs._/) {
$rrrt="$key=$FORM{$key}\n";
push(@csliste, $rrrt);
}
}
@Ordnung=sort(@csliste);
for(@Ordnung)
{
print MAIL $_;
}

print MAIL „$key=$FORM{$key}\n“;

print MAIL „\n“;

Close the mail program

close(MAIL);

Forward to the Follow-up URL

print „Location: $followupurl\n\n“;

Hi Bernd,

Mit dem „use CGI;“ und dem
„new CGI;“ nach dem „$daten“ komme ich nicht ganz klar.

Sieht man …
Durch die Verwendung des CGI-Moduls könnte man einiges einfacher und übersichtlicher haben.
Man könnte überhaupt eine Menge an diesem Skript verbessern.
Kommt das vielleicht aus Matt’s Script-Archiv?

Egal, das folgende müsste funktionieren.

#!/usr/bin/perl

Pfad des Mail-Programms auf dem Server

$mailprog = ‚/usr/sbin/sendmail‘;

Wie viele Bytes sollen empfangen werden?

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

Liste mit Schlüsselwort-/Wertepaaren erstellen

@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(„C“, hex($1))/eg;
$name =~ s///g;
$name =~ s/]|\n)*>//g;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(„C“, hex($1))/eg;
$value =~ s///g;
$value =~ s/]|\n)*>//g;
$FORM{$name} = $value;
}

Lesen der unsichtbar übertragenen Variablen -

genaugenommen kopieren, eingelesen sind sie ja bereits.

$subject = $FORM{subject};
$to = $FORM{to};
$from = $FORM{from};
$followupurl = $FORM{followupurl};

Mergen des Vor- und Nachnamen in Contact

Jetzt mal ohne CGI-Modul.

Voraussetzung sind natürlich FORMularfelder

mit den entsprechenden Namen

$vorname =$FORM{‚vname‘};
$nachname =$FORM{‚nname‘};
$contact=$vorname." ".$nachname;

Öffnen des Mail-Programms OHNE FEHLERBEHANDLUNG?!

Das lassen wir für’s erste mal so stehen :frowning:

open(MAIL,"|$mailprog -t");

print MAIL „Content-Type: application/x-gm-impdata\n“;
print MAIL „To: $to\n“;
print MAIL „From: $from\n“;
print MAIL „Subject: $subject\n“;
print MAIL „\n“;
print MAIL „[Instructions]\n“;
print MAIL „savethis=Web Import File\n“;
print MAIL „DupCheck1=contact\n“;
print MAIL „DupCheck2=company\n“;
print MAIL „DupCheck3=phone1\n“;
print MAIL „OnNewSendEmail=WEBIMP,Neuer Web-Kontakt ist eingegangen!\n“;
print MAIL „OnDupSendEmail=WEBIMP,DOPPELTER DATENSATZ angelegt!\n“;
print MAIL „OnNewAttachTrack=WEB-HINWEIS\n“;
print MAIL „ProperCase=Company, etc.\n“;
print MAIL „UpperCase=State\n“;
print MAIL „\n“;
print MAIL „[Data]\n“;

foreach $key (keys(%FORM)) {
if ($key ne „subject“ && $key ne „to“ && $key ne „from“ && $key ne „followupurl“ && $key !~ /\bcs._/) {
print MAIL „$key=$FORM{$key}\n“;
}
}

print MAIL „\n“;
print MAIL „[ContSupp]\n“;

foreach $key (keys(%FORM)) {
if ($key ne „subject“ && $key ne „to“ && $key ne „from“ && $key ne „followupurl“ && $key =~ /\bcs._/) {
$rrrt="$key=$FORM{$key}\n";
push(@csliste, $rrrt);
}
}
@Ordnung=sort(@csliste);
for(@Ordnung)
{
print MAIL $_;
}

print MAIL „$key=$FORM{$key}\n“;

print MAIL „\n“;
close(MAIL);

Forward to the Follow-up URL

according to RFC 2068 (HTTP 1.1) !!!

Aber auch das könnte man ganz komfortabel per CGI-Modul…

print „Status: 302\n“;
print „Location: $followupurl\n\n“;

exit(0);

Soweit das.
Falls dich englischsprachige Texte nicht abschrecken:
Auf http://www.perl.com gibt es einige gute Tutorials,
und auch die mitgelieferte Dokumentation zu Perl
(an der Eingabeaufforderung perldoc eingeben, wenn bei Dir
Perl installiert ist.
Wenn nicht, erstmal installieren, gibt’s z.B. bei
http://www.activestate.com
)
Die Perl-Doku gibt es auch online auf
http://cpan.org (auf perl.com bestimmt auch)

Gruss, Ingo

Hi Ingo,

danke für die praktische Hilfe. Ist immer wieder gut zu wissen, dass man hier mit seinen Problemen richtig ist.

Das Script habe ich auch nur aus eiem, der Software beiliegenden Handbuch übernommen und versucht es nachzuvollziehen. In dem Perl Kochbuch von O’Reilly habe ich leider nicht die praktische Hilfe gefunden, die du mir geben konntest. Auf jeden Fall funktioniert alles so wie ich es mir gedacht habe.

CU…Bernd