gary: mehrere Form-Befehle ?

Hallo zusammen,

Ich habe eine Page, auf der verschiedene Formularfelder sind:

<form name="Box00" action="">
<form name="Box01" action="">
<form name="Box02" action="">
usw.

Weiter unten auf der Page kommt dann ein Adressformular:

<h1>Formular</h1>

<form name="Formular" action="http://www.muster.com/cgi-bin/muster.pl"
  method="post" onsubmit="return chkFormular()">

<pre>
<input type="hidden" name="recipient" value="abc@muster.com">
<input type="hidden" name="redirect" value="http://www.muster.com/order_answer_ch.htm">
Anrede:  <input type="text" size="40" maxlength="40" name="Anrede">
Vorname: <input type="text" size="40" maxlength="40" name="Vorname">
Nachname: <input type="text" size="40" maxlength="40" name="Nachname">
Geburtsdatum: <input type="text" size="40" maxlength="10" name="Geburtsdatum">
Strasse/Nr.: <input type="text" size="40" maxlength="40" name="Strasse">
Platz:  <input type="text" size="40" maxlength="10" name="Platz">
Ort:  <input type="text" size="40" maxlength="40" name="Ort">
Land:  <input type="text" size="40" maxlength="40" name="Land">
E-Mail:  <input type="text" size="40" maxlength="40" name="Mail">

Formular: <input type="submit" value="Absenden"><input type="reset" value="Abbrechen">

</pre>
</form>

Mit dem Befehl:

<form name="Formular" action="http://www.muster.com/cgi-bin/muster.pl"
  method="post" onsubmit="return chkFormular()">

wird ja die übertragung der Inhalte gestartet. Kann man denn auch die Daten der oberen Formulare  oder villeicht sogar Variabelwerte mitschicken ?

gruss gary

  1. Hallo,

    du könnstes z.B. per JS die Feldwerte der oberen Formulare nach dem Klick auf den Absenden-Button auslesen.
    Hierzu kann ich dir das JS-Besipiel von Selfhtml (Formular überprüfen) empfehlen, dort kannst du auch wunderbar die Ansprache der verschiedenen Felder einsehen.
    In deinem "Hauptformular" musst du dann noch die zuvor eingelesenen Werte in hidden-Fields übertragen.
    So kannst du alle Werte entsprechend mit senden.

    Gruss
    Georg

    1. Hi,

      Genau so wie du es beschreibst wär das die ideale Lösung.
      Das Scriptläuft. Nur er sendet die Variable nicht.
      Die Rollbox stellt die Mengenangabe eines Artikels dar.
      D. h. die brauch ich natürlich auch.

      Kopf des Quelltext.:
      function chkFormular () {
        if (document.Formular.Anrede.value == "") {
          alert("Bitte Ihre Anrede eingeben!");
          document.Formular.Anrede.focus();
          return false;
      x..
      x..
      x..
      _______________________________________________________________
      REM für selfhtml: soll Istzustand von Box00 der Variable Artikel
          zuweisen  REM Ende
      _______________________________________________________________

      Box00() {
       Artikel = (document.Box00.D00.value);
      }

      x..
      x..
      x..
      ... weitere if abfragen...

      und unten:

      Artikelmenge: <input type="hidden" Artikel >

      Als hiddenfeld, wie du gesagt hast. Geht aber nicht...

      Gruss Gary

      1. Hallo nochmal,

        na, du musst auch dem hidden-field den Wert schon geben:
        document.name_des_hauptforms.artikel.value = artikel;

        Das hidden-Field dementsprechend:
        <input type="hidden" name="artikel">

        Gruss
        Georg

        1. Hello again,

          Ich glaube das problem sitzt wo anders. Es gibt keine Fehlermeldung. Aber den wert des Rollfeldes will er einfach nicht übertragen. Die Rollfeldsyntax muss stimmen, den auf der Homepage rechne ich sogar mit dem Feldwert. Also ich stell mal den Quelltext zur Verfügung und geh in der Zwischenzeit eine rauchen, bevor mein Kopf vor lauter Buchstaben und Zahlen explodiert. Soll ja angeblich die Sichtweise öffnen, wenn man ein break macht.

          jaja also hier mein Problemkind:

          <html>
          <head>
          <title>Formulareingaben</title>
          <script type="text/javascript">
          function chkFormular () {
            if (document.Formular.Anrede.value == "") {
              alert("Bitte Ihre Anrede eingeben!");
              document.Formular.Anrede.focus();
              return false;
            }
            if (document.Formular.Vorname.value == "") {
              alert("Bitte Ihren Vornamen eingeben!");
              document.Formular.Vorname.focus();
              return false;
            }
            if (document.Formular.Nachname.value == "") {
              alert("Bitte Ihren Nachnamen eingeben!");
              document.Formular.Nachname.focus();
              return false;
            }
            if (document.Formular.Geburtsdatum.value == "") {
              alert("Bitte Ihr Geburtsdatum eingeben!");
              document.Formular.Geburtsdatum.focus();
              return false;
            }
            if (document.Formular.Geburtsdatum.value.indexOf(".") == -1) {
              alert("Kein Geburtsdatum TT.MM.JJJJ");
              document.Formular.Geburtsdatum.focus();
              return false;
            }
            if (document.Formular.Strasse.value == "") {
              alert("Bitte Strasse eingeben!");
              document.Formular.Strasse.focus();
              return false;
            }
            if (document.Formular.Platz.value == "") {
              alert("Bitte PLZ eingeben!");
              document.Formular.Platz.focus();
              return false;
            }
           var chkZ = 1;
            for (i = 0; i < document.Formular.Platz.value.length; ++i)
              if (document.Formular.Platz.value.charAt(i) < "0" ||
                  document.Formular.Platz.value.charAt(i) > "9")
                chkZ = -1;
            if (chkZ == -1) {
              alert("Platz erlaubt nur Zahlen!");
              document.Formular.Platz.focus();
              return false;
            }

          if (document.Formular.Ort.value == "") {
              alert("Bitte Ort eingeben!");
              document.Formular.Ort.focus();
              return false;
            }
            if (document.Formular.Land.value == "") {
              alert("Bitte Land eingeben!");
              document.Formular.Land.focus();
              return false;
            }
            if (document.Formular.Mail.value == "") {
              alert("Bitte Ihre E-Mail-Adresse eingeben!");
              document.Formular.Mail.focus();
              return false;
            }
            if (document.Formular.Mail.value.indexOf("@") == -1) {
              alert("Keine gültige E-Mail-Adresse!");
              document.Formular.Mail.focus();
              return false;
            }
            CheckD00() {
              for (i = 0; i < document.Box00.D00.length; ++i)
              if (document.Box00.D00.options[i].selected == true)
           artikel = (document.Box00.D00.options[i].value)
            }
          }
          </script>
          </head>
          <body>

          <form name="Box00" action="">
                  <p align="center"></p>
                 <select name="D00" size="1" onchange="CheckD00()">
                    <option value="0" selected>x 0</option>
                    <option value="1">x 1</option>
                    <option value="2">x 2</option>
                    <option value="3">x 3</option>
                    <option value="4">x 4</option>
                    <option value="5">x 5</option>
                 </select>
          </form>

          <h1>Formular</h1>

          <form name="Formular" action="http://www.muster.com/cgi-bin/OrderForm.pl"
            method="post" onsubmit="return chkFormular()">

          <pre>
          <input type="hidden" name="recipient" value="abc@muster.com">
          <input type="hidden" name="redirect" value="http://www.muster.com/order_answer_ch.htm">
          Anrede:  <input type="text" size="40" maxlength="40" name="Anrede">
          Vorname: <input type="text" size="40" maxlength="40" name="Vorname">
          Nachname: <input type="text" size="40" maxlength="40" name="Nachname">
          Geburtsdatum: <input type="text" size="40" maxlength="10" name="Geburtsdatum">
          Strasse/Nr.: <input type="text" size="40" maxlength="40" name="Strasse">
          Platz:  <input type="text" size="40" maxlength="10" name="Platz">
          Ort:  <input type="text" size="40" maxlength="40" name="Ort">
          Land:  <input type="text" size="40" maxlength="40" name="Land">
          E-Mail:  <input type="text" size="40" maxlength="40" name="Mail">
          <input type="hidden" name="artikel">

          Formular: <input type="submit" value="Absenden"><input type="reset" value="Abbrechen">

          </pre>
          </form>

          </body>
          </html>

          gruss gary

          1. Hallo zusammen.

            Jetzt bin ich soweit, dass er das "Box00" Feld verschickt. Allerdings schreibt er dort statt einen werrt von 1 bis 5 die Variable als text hin. Also in der e-mail steht dann Box00: artikel <--(anstatt den wert 1-5)

            gruss gary

            1. Hallo nochmals,

              Sorry aber ich bekomm das alleine nicht hin.

              Da muss was falsch sein.
              <input type="hidden" name="Box00" value=artikel>

              gruss gary

          2. Hi,

            CheckD00() {
                for (i = 0; i < document.Box00.D00.length; ++i)
                if (document.Box00.D00.options[i].selected == true)
            artikel = (document.Box00.D00.options[i].value)
              }
            }

            Hier wird einer Variablen namens "artikel" der Wert zugeordnet.

            Im Formular weiter unten steht dann nur noch:

            <input type="hidden" name="artikel">

            Das ist ein leeres Eingabefeld, das zufällig(?) ebenfalls "artikel" heißt.
            Es fehlt ihm noch der Inhalt, den du mitschicken willst.
            Den sollte man in der Funktion chkFormular() – oder besser gleich dort in CheckD00() – als value diesem letzten Formularfeld zuordnen, anstatt ihn in einer globalen Variablen abzuspeichern, wo er fortan nur ungenutzt rumliegt.

            Gruß, Don P

            1. Hi Don P,

              Das Adressformular was du im thread siehst wollte ich auf meiner homepage einbauen, da es in der lage ist per cgi daten zu verschicken.

              Wenn du mal reinschauen willst:www.vam-shop.com dann auf shop klicken und dann auf die deutsche oder die schweizer fahne klicken. dort bin ich mit der Programmierung am weitesten. Die rechenroutinen gehen alle.Was ich anstrebe ist die errechneten werte , die stückzahlen, Preise alles mit den addressen mitschicken. Wenn ich es bei einem feld und bei einem rollfeld schaffe, kann ich den rest alleine anpassen. ich komm nur nicht auf die richtige formel. Danke fürs schreiben. gruss gary.

              1. Hi gary,

                Wenn du mal reinschauen willst:www.vam-shop.com [...]

                Sorry, das ist mir jetzt too much, aber:

                Da muss was falsch sein.
                <input type="hidden" name="Box00" value=artikel>

                Allerdings: Was soll denn value=artikel bedeuten?
                Du meinst mit "artikel" wohl die globale Variable, die in CheckD00() den Wert bekommen hat. Aber woher soll der Browser wissen, dass du die meinst? Dass du überhaupt hier etwas javaScriptiges meinst?

                Für den Browser sieht <input [...] value=artikel> so aus, als hätte man die Anführungszeichen um den Wert "artikel" vergessen, und tolerant wie Browser nunmal sind, schickt er trotzdem den String "artikel" mit, so wie er angegeben ist.

                Ersetze also in CheckD00() die Zeile (ihr fehlt eh ein Semikolon):
                artikel = (document.Box00.D00.options[i].value)

                durch:
                document.Formular.artikel.value = document.Box00.D00.options[i].value;

                und alles wird gut.

                Die Zeile mit dem Formularfeld
                <input type="hidden" name="artikel">

                kann so bleiben. Der Wert wird ja dann von CheckD00() eingesetzt.

                Gruß, Don P

                1. Hi nochmal,

                  Hier mein cgi testprog, es ist viel kleiner als die Internetseite:

                  <html>
                  <head>
                  <title>Formulareingaben</title>
                  <script type="text/javascript">
                  function chkFormular () {
                    if (document.Formular.Anrede.value == "") {
                      alert("Bitte Ihre Anrede eingeben!");
                      document.Formular.Anrede.focus();
                      return false;
                    }
                    if (document.Formular.Vorname.value == "") {
                      alert("Bitte Ihren Vornamen eingeben!");
                      document.Formular.Vorname.focus();
                      return false;
                    }
                    if (document.Formular.Nachname.value == "") {
                      alert("Bitte Ihren Nachnamen eingeben!");
                      document.Formular.Nachname.focus();
                      return false;
                    }
                    if (document.Formular.Geburtsdatum.value == "") {
                      alert("Bitte Ihr Geburtsdatum eingeben!");
                      document.Formular.Geburtsdatum.focus();
                      return false;
                    }
                    if (document.Formular.Geburtsdatum.value.indexOf(".") == -1) {
                      alert("Kein Geburtsdatum TT.MM.JJJJ");
                      document.Formular.Geburtsdatum.focus();
                      return false;
                    }
                    if (document.Formular.Strasse.value == "") {
                      alert("Bitte Strasse eingeben!");
                      document.Formular.Strasse.focus();
                      return false;
                    }
                    if (document.Formular.Platz.value == "") {
                      alert("Bitte PLZ eingeben!");
                      document.Formular.Platz.focus();
                      return false;
                    }
                   var chkZ = 1;
                    for (i = 0; i < document.Formular.Platz.value.length; ++i)
                      if (document.Formular.Platz.value.charAt(i) < "0" ||
                          document.Formular.Platz.value.charAt(i) > "9")
                        chkZ = -1;
                    if (chkZ == -1) {
                      alert("Platz erlaubt nur Zahlen!");
                      document.Formular.Platz.focus();
                      return false;
                    }

                  if (document.Formular.Ort.value == "") {
                      alert("Bitte Ort eingeben!");
                      document.Formular.Ort.focus();
                      return false;
                    }
                    if (document.Formular.Land.value == "") {
                      alert("Bitte Land eingeben!");
                      document.Formular.Land.focus();
                      return false;
                    }
                    if (document.Formular.Mail.value == "") {
                      alert("Bitte Ihre E-Mail-Adresse eingeben!");
                      document.Formular.Mail.focus();
                      return false;
                    }
                    if (document.Formular.Mail.value.indexOf("@") == -1) {
                      alert("Keine gültige E-Mail-Adresse!");
                      document.Formular.Mail.focus();
                      return false;
                    }
                    CheckD00() {
                      for (i = 0; i < document.Box00.D00.length; ++i)
                      if (document.Box00.D00.options[i].selected == true)
                     document.Formular.artikel.value = document.Box00.D00.options[i].value;
                   }
                  }
                  </script>
                  </head>
                  <body>

                  <form name="Box00" action="">
                          <p align="center"></p>
                         <select name="D00" size="1" onchange="CheckD00()">
                            <option value="0" selected>x 0</option>
                            <option value="1">x 1</option>
                            <option value="2">x 2</option>
                            <option value="3">x 3</option>
                            <option value="4">x 4</option>
                            <option value="5">x 5</option>
                         </select>
                  </form>

                  <h1>Formular</h1>

                  <form name="Formular" action="http://www.beispiel.com/cgi-bin/Beispiel.pl"
                    method="post" onsubmit="return chkFormular()">

                  <pre>
                  <input type="hidden" name="recipient" value="beispiel@beispiel.com">
                  <input type="hidden" name="redirect" value="http://www.beispiel.com/order_answer_ch.htm">
                  Anrede:  <input type="text" size="40" maxlength="40" name="Anrede">
                  Vorname: <input type="text" size="40" maxlength="40" name="Vorname">
                  Nachname: <input type="text" size="40" maxlength="40" name="Nachname">
                  Geburtsdatum: <input type="text" size="40" maxlength="10" name="Geburtsdatum">
                  Strasse/Nr.: <input type="text" size="40" maxlength="40" name="Strasse">
                  Platz:  <input type="text" size="40" maxlength="10" name="Platz">
                  Ort:  <input type="text" size="40" maxlength="40" name="Ort">
                  Land:  <input type="text" size="40" maxlength="40" name="Land">
                  E-Mail:  <input type="text" size="40" maxlength="40" name="Mail">
                  <input type="hidden" name="artikel">

                  Formular: <input type="submit" value="Absenden"><input type="reset" value="Abbrechen">

                  </pre>
                  </form>

                  </body>
                  </html>

                  Da ahnst es wen ich hier Code reinstelle: Es geht leider trotz Anpassung immer noch. In de E-Mail sind alle Adressdaten drin, nur den Wert des Rollfeldes will er einfach nicht in der Mail anzeigen.

                  gruss gary.

                  1. Tja,

                    Da liegt wohl noch mehr im Argen. Zum Beispiel in CheckD00():
                        for (i = 0; i < document.Box00.D00.length; ++i)
                    Warum ++i und nicht i++? Mit ++i erhöhst du i, bevor es abgefragt wird. Das ist wohl nicht der Sinn.

                    Die ganze for-Schleife kann ersetzt werden durch die Zeile:
                    document.Formular.artikel.value = document.Box00.D00.options[document.Box00.D00.options.selectedIndex].value;

                    Außerdem:
                    Die Funktion chkFormular() sollte am Schluss true zurückgeben. Wie es aussieht, gibt sie gar nichts zurück oder aber false, falls ein Eingabefeld nicht richtig ausgefüllt ist. Schreib also in chkFormular() ganz am Ende:
                    return true;

                    und anschließend noch, nur zum Testen:
                    alert(document.Formular.artikel.value);
                    Das sollte dir dann vor dem Abschicken eine Zahl von 0 bis max. Artikelzahl anzeigen, je nachdem welcher ausgewählt ist.

                    In de E-Mail sind alle Adressdaten drin, nur den Wert des Rollfeldes will er einfach nicht in der Mail anzeigen.

                    Aha, die Daten werden also dann von http://www.beispiel.com/cgi-bin/Beispiel.pl als Mail verschickt.
                    Wird denn in diesem Beispiel.pl auf dem Server dein neues Formularfeld "artikel" überhaupt abgefragt und in die Mail gepackt? Es scheint ja ein Perl-Programm zu sein. Schon mal von Perl gehört und mal reingeschaut, was mit den Formulardaten dort passiert?

                    Gruß, Don P

                    1. Hi Don P,

                      for (i = 0; i < document.Box00.D00.length; ++i)
                      Warum ++i und nicht i++? Mit ++i erhöhst du i, bevor es abgefragt wird. Das ist wohl nicht der Sinn.

                      Dies hat frontpage alleine so gemacht, als ich das Rollfeld eingefügt habe. Und es funktioniert auf der homepage beim ändern der Anzahl sehr gut. Das heisst ich mach da lieber nichts dran, sonst "verreckt " mir vielleicht noch alles.

                      Die ganze for-Schleife kann ersetzt werden durch die Zeile:
                      document.Formular.artikel.value = document.Box00.D00.options[document.Box00.D00.options.selectedIndex].value;

                      Ok, im cgi testprogramm kann ich das sichermachen, nur wenns ums Einsetzten nacher geht, kann ich dort die schleife nicht entfernen, sonst rechnet er eventuell nacher nicht mehr.

                      Außerdem:
                      Die Funktion chkFormular() sollte am Schluss true zurückgeben. Wie es aussieht, gibt sie gar nichts zurück oder aber false, falls ein Eingabefeld nicht richtig ausgefüllt ist. Schreib also in chkFormular() ganz am Ende:
                      return true;

                      Keine Ahnung, hab das Programm glaub von selfhtml as beispiel vorliegen,war also so. Ich probier es aber doch aus. (meinst du direkt am ende der Zeile oder am Schluss vor dem </script>

                      Aha, die Daten werden also dann von http://www.beispiel.com/cgi-bin/Beispiel.pl als Mail verschickt.
                      Wird denn in diesem Beispiel.pl auf dem Server dein neues Formularfeld "artikel" überhaupt abgefragt und in die Mail gepackt? Es scheint ja ein Perl-Programm zu sein. Schon mal von Perl gehört und mal reingeschaut, was mit den Formulardaten dort passiert?

                      Mein Formmailer ist vom provider. Ich bin froh, das ich ihn gegen spamming sichern konnte in dem ich nur eine e-mail zulasse. Dies hab ich im pear-Prog selber gemacht, unter proffesioneller anleitung von selfhtml- und ich kann sagen das war ne mords geburt (cgi / Rechte rwx Übertragungsmodus AscII ) der Mailer funktioniert so wie er ist. Wenn ich mehr felder will,kann ich das im script /html machen. Am Mailer ist nix zum einstellen oder anders gesagt : ich bin froh das der läuft)

                      Ich werde nach und nach deine Vorschläge testen, ha ja ganzes Wochenende zeit.

                      Irgendwann wird es schon laufen...

                      Merci Und tausend dank gary...

                      1. Hi gary,

                        Keine Ahnung,

                        Hmm, das merkt man. Selber bin ich, was Webentwicklung angeht, auch nicht so der Fuchs, deshalb versuch' ich u.a. hier dazuzulernen. Mit zu wenig Ahnung macht es aber m.E. wenig Sinn, an größeren realen Projekten wie einem online-Shop rumzubasteln. Sorry, aber ich glaub´, das kann eigentlich nur in die Hose gehen. Das Web ist zu gefährlich, als dass man da mal schnell was reinbastelt, wovon man selber nicht genau weiss, was es damit auf sich hat. Das hackt einem nachher der Nächstbeste kaputt, und wenn es um ein Geschäft geht, kann das teuer werden.

                        Irgendwann wird es schon laufen...

                        Hoffen wir's.

                        Merci Und tausend dank gary...

                        Gern geschehen.

                        Schönes Wochenende, Don P

              2. Hi gary,

                Wenn du mal reinschauen willst:www.vam-shop.com dann auf shop klicken und dann auf die deutsche oder die schweizer fahne klicken.

                Ok, war jetzt doch neugierig. Das ist dort ja um Einiges komplizierter.

                Was jedenfalls auffällt, sind viele Zeilen wie:
                <form action="input_text_value.htm"

                Da fehlt eindeutig die abschließende Klammer ">" des form-Tags.

                Der Weg, den ich dir für den hier geposteten Code gezeigt habe, sollte funktionieren.

                Viel Spass noch, bzw. schlaf' vielleicht erst mal drüber...

                Don P

  2. wird ja die übertragung der Inhalte gestartet. Kann man denn auch die Daten der oberen Formulare  oder villeicht sogar Variabelwerte mitschicken ?

    Du kannst zB. per JavaScript die anderen Formulare auslesen und die Werte als Parameter an die URL bei action hängen.

    1. Hi,

      Der grösste teil der Felder wird bereits ausgelesen. Aber wie häng ich es an die url bei action ?

      gruss gary

      1. Der grösste teil der Felder wird bereits ausgelesen. Aber wie häng ich es an die url bei action ?

        document.getElementsByName("Formular")[0].action += "?wert1=bla&wert2=blubb&wert3=blubber";

        also erstamal ein ?, dann die Wertepaare getrennt jeweils durch ein &

        Musste natürlich als GET-Variablen in deinem serverseitigen Skript verarbeiten.

        1. hi, das geht nicht. Amserverseitigen script kann ich nichts machen. (Zu riskant)

          gruss gary