FritzHugo3: Formular per E-Mail schicken lassen

Hallo liebe Community, habe leider nicht mehr den richtigen link auf selfhtml gefunden, wo ich damals den code her hab. bin mir auch net ganz sicher obs nun in die kategorie PERL oder CGI passt, aber ich fang einfach mal an. Und sorry fals die Frage schonmal beantwortet wurde, habe nichts gefunden beim suchen.

Ich habe also ein funktionierendes formular im Netz (http://www.bodenseejugend.de/bodenseejugend.de/internetseiten/umfragen/umfrage_1/umfrage_1.htm).
Nach abschicken des Formulars wird es mir per e-mail zugeschickt, dass funktioniert auch inzwischen alles wunderbar.

Mein problem ist nun, dass ich nur die Formularfelder per mail geschickt bekomme, die auch ausgefüllt sind. gibts eine möglichkeit das zu ändern und ich immer (ob nun ausgefüllt oder nicht) alle Felder per Mail zugeschickt bekomme?

und hier ist der code der im Formular eingesetzt wird:

<!--- E-Mail Weiterleitung an cgi-bin-selfmail.pl auf dem Webspaceserver, das die Daten per E-Mail verschickt --->
<form name="Adresse" action="http://www.bodenseejugend.de/cgi-bin/selfmail.pl" method="post" form onreset="return confirmReset(this)">
<input type="hidden" name="return" value="http://www.bodenseejugend.de/bodenseejugend.de/intern
etseiten/umfragen/danke_1.html">
<input type="hidden" name="delimiter" value=": ">
<input type="hidden" name="subject" value="Feedback-Formular">

nun der Code vom selfmail.pl:
#!/usr/bin/perl

-------> Individuelle Parameter des Skriptes - bitte anpassen!

--> SMTP-Programm zum Versenden der Mail:

$Sendmail_Prog = "/usr/sbin/sendmail";

--> Ziel-Mailadresse, an die gesendet werden soll:

$mailto = 'umfrage-1-lexikon@bodenseejugend.de';

-------> Modul für CGI-Scripts einbinden:

use CGI;

-------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:

$query = new CGI;
@names = $query->param;

-------> interne Daten aus den erwarteten hidden-Feldern auslesen:

$delimiter = $query->param('delimiter'); # ---> Begrenzerzeichen zwischen name und value
$returnhtml = $query->param('return'); # ---> URL für Dankeseite
$subject = $query->param('subject'); # ---> E-Mail-Subject

-------> alle Whitespace-Zeichen (Leerzeichen, Tabulator, Newline) in Leerzeichen wandeln

VERHINDERT sonst möglichen MISSBRAUCH des Skripts

$subject =~ s/\s/ /g;

-------> Text der E-Mail aus den Formulardaten ermitteln:

$mailtext = "";
foreach(@names) {
$name = $_;
@values = "";
@values = $query->param($name);
if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}

-------> E-Mail versenden:

open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$mailtext\n";
close(MAIL);

-------> Dankeseite an Browser senden:

print "Location: $returnhtml\n\n";

Wäre echt net von euch, wenn mir das einer eben ändern könnte, habe keine ahnung was diese ganzen zeichen da im code bedeuten, ist chinesisch für mich ;-)

Meine E-Mail FritzHugo3@yahoo.de
Danke David

  1. Hallo

    Mein problem ist nun, dass ich nur die Formularfelder per mail geschickt bekomme, die auch ausgefüllt sind. gibts eine möglichkeit das zu ändern und ich immer (ob nun ausgefüllt oder nicht) alle Felder per Mail zugeschickt bekomme?

    Aus einem Formular werden _immer_ nur die in irgendeiner Weise ausgefüllten Felder übergeben. Das im action-Attribut definierte Programm (Skript oder Emailprogramm) bekommt also auch nur diese Felder zur Weiterverarbeitung.

    Es weiß also nichts über die im Formular vorhandenen Felder, es kennt nur die übermittelten Daten.

    -------> Text der E-Mail aus den Formulardaten ermitteln:

    $mailtext = "";
    foreach(@names) {
    $name = $_;
    @values = "";
    @values = $query->param($name);
    if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
    foreach $value (@values) {
    $mailtext = $mailtext.$name;
    $mailtext = $mailtext.$delimiter;
    $mailtext = $mailtext.$value."\n";
    }
    }
    }

    In diesem Block werden die übermittelten Daten ausgelesen und in den Body der Email (Variable $mailtext) übertragen.

    Wenn du dieses Skript _nur_ für das eine Formular benutzt, kannst du die variable $mailtext auch händisch füllen. _Du_ weißt ja, im gegensatz zum Skript, welche Felder im Formular vorhanden sind. So kannst du für jedes Feld prüfen, ob ein Wert übergeben wurde, und dies dann in der Variable $mailtext eintragen. bei leeren Feldern könntest du diese mit einer Zeichenkette, wie z.B. '---' oder 'k.A.' (für 'keine Angabe') markieren.

    Das hat aber, abgesehen von deiner Unkenntnis der Programmiersprache und dem daraus resultierenden Unvermögen dies umzusetzen, einen _riesengroßen_ Nachteil.

    Das Skript ist dann nur noch für dieses eine Formular zu gebrauchen. Falls du in deiner Seite ein weiteres Formular einbaust, dessen Eingaben ebenfalls per Email  übermittelt werden sollen, brauchst du ein weiteres Skript.

    So, wie das Skript jetzt ist, kann es die Daten jedes Formulars versenden. Aber eben nur mit den Daten aus den wirklich ausgefüllten Feldern.

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    Veranstaltungsdatenbank Vdb 0.1
    1. Aus einem Formular werden _immer_ nur die in irgendeiner Weise ausgefüllten Felder übergeben. Das im action-Attribut definierte Programm (Skript oder Emailprogramm) bekommt also auch nur diese Felder zur Weiterverarbeitung.

      Gibt es keinen Code, befehl weis der geier, der dem sagt das er auch lehre datenfelder an das Mailscribt senden soll und das wiedrum dann alle daten per e-mail zusendet?

      Also ein befehl der einfach alle felder (blind) weiter leitet ohne jedes feld vorher zu definieren und prüfen zu lassen. denn bei Ankreuzkästchen kann ich ja keinen platzhalter reinschreiben, entwerder der ist positiv oder negatig

      1. Hell-O!

        Gibt es keinen Code, befehl weis der geier, der dem sagt das er auch lehre datenfelder an das Mailscribt senden soll und das wiedrum dann alle daten per e-mail zusendet?

        Definiere alle Datenfelder, die dich interessieren, in deinem Script, ggf. übergib ihre Namen dem Script via versteckte Eingabefelder. Weise danach allen denjenigen deklarierten Variablen einen entsprechenden Wert zu. Mal ein simples Beispiel ohne jegliche zwingend notwendige inhaltliche Prüfung der dem Script übergebenen Daten:

        my %formfields = ( FOO => '',  
                           BAR => '',  
                           BAZ => ''  
                         );  
        my $cgi = new CGI;  
        my @params = $cgi->param;  
        foreach(@params) {  
          $formfields{$_} = $cgi->param($_) if exists $formfields{$_};  
        }
        

        Das könntest du jetzt ausbauen, denke ich.

        Siechfred

        --
        Hier könnte Ihre Werbung stehen.
        Dark Millennium || Die neue 1%-Regelung
        1. So, habe das kanze Problem anders gelöst, nämlich mit einem Excel-Makro, läuft soweit gut und der zukünftigen Auswertung steht nichts weiter im Weg, ich bedanke mich bei allen die mir geschrieben haben

          PS.: Ja ich bin absolut der Meinung das ein Forum "zumindest im Design" eines PHPBB-Forum absolut übersichtlicher und komfortabler ist als das Design hier, registrieren hier und einstellen hin oder her.

          1. Hallo FritzHugo3.

            PS.: Ja ich bin absolut der Meinung das ein Forum "zumindest im Design" eines PHPBB-Forum absolut übersichtlicher und komfortabler ist als das Design hier, registrieren hier und einstellen hin oder her.

            Du hast dich registriert? Dann kannst du auf eine Board-ähnliche Darstellung umstellen.

            Ich bin mit dem derzeitigen Aufbau sehr zufrieden und damit auch nicht der Einzige.

            Einen schönen Dienstag noch.

            Gruß, Ashura

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
            [HTML Design Constraints: Logical Markup]
          2. PS.: Ja ich bin absolut der Meinung das ein Forum "zumindest im Design" eines PHPBB-Forum absolut übersichtlicher und komfortabler ist als das Design hier, registrieren hier und einstellen hin oder her.

            Das ist absoluter Unsinn.

            Struppi.

            --
            Javascript ist toll (Perl auch!)
      2. Hallo

        Gibt es keinen Code, befehl weis der geier, der dem sagt das er auch lehre datenfelder an das Mailscribt senden soll und das wiedrum dann alle daten per e-mail zusendet?

        Da HTML keine Befehle im Sinne einer Programmiersprache kennt, nein.

        Also ein befehl der einfach alle felder (blind) weiter leitet ohne jedes feld vorher zu definieren und prüfen zu lassen.

        Du kannst nur auf Seiten des auswertenden Skripts abfragen, ob ein erwarteter Wert auch wirklich übermittelt wurde.

        denn bei Ankreuzkästchen kann ich ja keinen platzhalter reinschreiben, entwerder der ist positiv oder negatig

        Du kannst auch mal darüber nachdenken, ob dein Formular wie gewünscht aufgebaut ist. Deine Ausführung lässt vermuten, dass es bei den Feldern um eine ja/nein-Entscheidung geht. Dafür ist ein Radiobutton-Paar je Frage mit einem Vorgabewert besser geeignet. So bekämst du immer einen Wert (nein/ja oder 0/1). Wobei ich persönlich Letzteres bevorzugen würde.

        Tschö, Auge

        --
        Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
        (Victor Hugo)
        Veranstaltungsdatenbank Vdb 0.1
        1. Du kannst auch mal darüber nachdenken, ob dein Formular wie gewünscht aufgebaut ist. Deine Ausführung lässt vermuten, dass es bei den Feldern um eine ja/nein-Entscheidung geht. Dafür ist ein Radiobutton-Paar je Frage mit einem Vorgabewert besser geeignet. So bekämst du immer einen Wert (nein/ja oder 0/1). Wobei ich persönlich Letzteres bevorzugen würde.

          Tschö, Auge

          Ja das hab ich mir auch schon überlegt mit den runden Kästchen, allerdings kann man da nicht mehrere gleichzeitig anwählen, aber wenn das so kompliziert ist, wird mir wohl nichts anderes übrig bleiben.

          Gäbe zwar in Excel (wo das ganze importiert und ausgewertet werden soll) eine Möglichkeit nen Scribt zu schreiben, der afragt ob gewisse Datenfelder vorhanden sind und diese bei fehlen durch einen platzhalter zu füllen um immer die selben Excel-Felder dem jehweiligen Datenfeld zuzuweisen. aber das ist wohl auch ziemlich komliziert wie ich das so mitbekommen habe.

          Liebes SELFHTML: also die Community hier ist echt spitze, aber das design vom Forum find ich absolut unübersichtlich, wollter net mal drüber nachdenken ein modernes design wie beim Chip-Forum und wie sie alle heissen. PHPBB/PHPBB2

          Gruß David

          1. Hi,

            Liebes SELFHTML: also die Community hier ist echt spitze, aber das design vom Forum find ich absolut unübersichtlich

            es steht Dir frei, Dich hier zu registrieren und das Aussehen über die Benutzereinstellungen individuell zu gestalten und falls Dir die dort möglichen Auswahlkriterien nicht ausreichen, ein eigenes Stylesheet einzubinden, über das Du das Design vollständig selbst definieren kannst.

            PHPBB/PHPBB2

            Igitt, ist nicht Dein Ernst, oder würdest Du als Sportwagenbesitzer mit einem Mittelklassewagen auf die Piste gehen wollen?

            freundliche Grüße
            Ingo

          2. Hallo

            ... mit den runden Kästchen

            runde Kästchen? Ist ja neckig. :-)

            »», allerdings kann man da nicht mehrere gleichzeitig anwählen

            Ja, immer eine Frage nach der anderen, mit jeweils einem Radiobutton-Paar zum beantworten derselben.

            Tschö, Auge

            --
            Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
            (Victor Hugo)
            Veranstaltungsdatenbank Vdb 0.1
            1. Hallo.

              ... mit den runden Kästchen

              runde Kästchen? Ist ja neckig. :-)

              Je nach dem, zu welcher Kaste man gehört.
              MfG, at

              1. Hallo

                ... mit den runden Kästchen

                runde Kästchen? Ist ja neckig. :-)

                Je nach dem, zu welcher Kaste man gehört.

                Ich bin kein Hindu, würde als Laie aber mal behaupten, wenn's ein Kästchen ist, kann es keine der Großen sein.

                Tschö, Auge

                --
                Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
                (Victor Hugo)
                Veranstaltungsdatenbank Vdb 0.1
                1. Hallo.

                  ... mit den runden Kästchen

                  runde Kästchen? Ist ja neckig. :-)

                  Je nach dem, zu welcher Kaste man gehört.

                  Ich bin kein Hindu, würde als Laie aber mal behaupten, wenn's ein Kästchen ist, kann es keine der Großen sein.

                  Klein, aber rund.
                  MfG, at