mslin: Im Formular direkt rechnen

Hallo,

ich wende mich an euch, da ich keinen anhaltspunkt habe nach was ich suchen soll...

habe folgendes vor:

Ein Formular mit einem Artikel, darin gibt der Sachbearbeiter die Menge ein und sobald er das Feld z.B. mit der Tab-Taste verlässt soll automatisch und sofot der Preis * Menge gerechnet werden - noch bevor er das Formular absendet...

Ist da evtl. Java das richtige dafür?

Hab leider von Java keinen Schimmer...  Hat Ihr noch einen Tip für mich ?

Gruß
mslin

  1. Hi,

    Ist da evtl. Java das richtige dafür?

    nein, Java halte ich für ungeeignet. Nimm JavaScript.

    Hat Ihr noch einen Tip für mich ?

    Serverseitige Techniken wie PHP sind für clientseitige Aktionen absolut ausgeschlossen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hi,

    Ein Formular mit einem Artikel, darin gibt der Sachbearbeiter die Menge ein und sobald er das Feld z.B. mit der Tab-Taste verlässt soll automatisch und sofot der Preis * Menge gerechnet werden - noch bevor er das Formular absendet...

    dann ist der gewählte Themenbereich PHP natürlich unbrauchbar, denn PHP käme erst wieder zum Zug, *wenn* das Formular abgeschickt wird.

    Ist da evtl. Java das richtige dafür?

    Denkbar, wäre aber mit Elefanten auf Mücken geschossen.

    Hab leider von Java keinen Schimmer...  Hat Ihr noch einen Tip für mich ?

    Das ist ein typischer Anwendungsfall für Javascript (nicht Java). Du brauchst auch gar nicht viel.

    * den Eventhandler onchange, den du an die Eingabefelder für Preis und Menge bindest
    * eine Funktion, die die Werte dieser beiden Eingabefelder ermittelt, sie auf Gültigkeit prüft, multipliziert und als Wert eines dritten EIngabefeldes zurückschreibt.
    * Um auf die Eingabefelder und ihre Eigenschaften zuzugreifen, ist in diesem Fall wohl Schema 2 die günstigste Möglichkeit.

    Wenn du an einer konkreten Stelle nicht weiterkommst, hilft dir bestimmt gern jemand, aber zunächst wird etwas Eigeninitiative erwartet.

    Wichtig bei der serverseitigen Verarbeitung nach dem Absenden des Formulars: Verlasse dich nicht darauf, dass im Feld für den berechneten Gesamtpreis etwas Sinnvolles drinsteht, oder dass überhaupt etwas drinsteht!

    So long,
     Martin

    --
    Zwei Stammtischbrüder:
    Hier steht, dass laut Statistik über 60 Prozent aller Ehefrauen fremdgehen.
    Was soll ich mit dieser Information? Ich brauche Namen, Fotos, Telefonnummern ... !
    1. Ok,

      habe gesucht und bin fündig geworden...

      hier mal testcode von mir:

      <script type="text/javascript">
      <!--
      function rechnen()
      {
      brutto=String(document.DD_form.brutto.value).replace(",", ".");
      RAB_DD_1=String(document.DD_form.RAB_DD_1.value).replace(",", ".");
      RAB_DD_2=String(document.DD_form.RAB_DD_2.value).replace(",", ".");
      var Wert = netto_DD=brutto*((100-RAB_DD_1)/100)*((100-RAB_DD_2)/100);
      document.DD_form.netto_DD.value=String(Wert.toFixed(2)).replace(".", ",");

      }
      //-->
      </script>

      Die Berechnung funktioniert schon mal super...

      nun stehe ich aber vor dem Problem, daß ich diese berechneten Werte per Post auch noch weiter an das nächste PHP senden möchte um diese Werte in die mysql-DB zu speichern...

      <form name="alles_uebernehmen" aktion="nächstes.php">
      ...
      <form name="DD_form">
      ...

      Ein Formular in einem Formular? Wie könnte ich das lösen?

      Gruß
      mslin

      1. Hallo,

        habe gesucht und bin fündig geworden...

        na prima!

        <script type="text/javascript">
        <!--

        Die Auskommentierung von Javascript mag vor zehn Jahren noch angebracht gewesen sein; heute ist sie es gewiss nicht mehr. Browser wie Netscape 4 dürften in freier Wildbahn kaum noch anzutreffen sein.

        function rechnen()
        {
        brutto=String(document.DD_form.brutto.value).replace(",", ".");
        RAB_DD_1=String(document.DD_form.RAB_DD_1.value).replace(",", ".");
        RAB_DD_2=String(document.DD_form.RAB_DD_2.value).replace(",", ".");
        var Wert = netto_DD=brutto*((100-RAB_DD_1)/100)*((100-RAB_DD_2)/100);
        document.DD_form.netto_DD.value=String(Wert.toFixed(2)).replace(".", ",");

        }

        Die expliziten Umwandlungen in Strings sind unnötig; wenn Javascript an einer Stelle meint, einen String zu benötigen, werden die Argumente automatisch umgewandelt.
        Und die diversen replace() ... naja, wenn jemand darauf besteht, ein Komma anstatt eines Dezimalpunkts eingeben zu dürfen, okay. Immerhin funktioniert die Geschichte ja auch dann noch tadellos, wenn ich die Werte von vornherein mit Dezimalpunkt eingebe. Ich mag es nicht, wenn mir (wie z.B. bei ebay oder beim Postbank-Onlinebanking) die Verwendung eines Kommas vorgeschrieben wird.

        Die Berechnung funktioniert schon mal super...

        Würde ich anhand des Codes auch vermuten.

        nun stehe ich aber vor dem Problem, daß ich diese berechneten Werte per Post auch noch weiter an das nächste PHP senden möchte um diese Werte in die mysql-DB zu speichern...

        Das passiert doch ganz automatisch, denn alle Eingabefelder, die der obige Code anspricht, liegen in demselben Formular. Wenn das abgeschickt wird, ist das berechnete Feld netto_DD zwangsläufig dabei. Du solltest es aber serverseitig dennoch ignorieren, weil (wie schon erwähnt) der User auch irgendeinen Mist hineinschreiben kann, oder weil das Feld leer sein könnte, weil Javascript nicht ausgeführt wird.

        <form name="alles_uebernehmen" aktion="nächstes.php">
        ...
        <form name="DD_form">
        ...
        Ein Formular in einem Formular? Wie könnte ich das lösen?

        Warum die Schachtelung? Wozu brauchst du ein zweites Formular?

        Ciao,
         Martin

        --
        Gott hilft niemandem, er erfreut sich nur an unseren Leiden.
          (Ashura)