Heiko Hirsch: Formular in PHP mit Berechnung

Hallo,
ich möchte ein einfaches Formular gestalten mit folgenden Inhalten:

Bestellnummer 1: | Anzahl | = Preis
Bestellnummer 2: | Anzahl | = Preis

So könnte jetzt z.B. nur Bestellnummer 1 ausgefüllt werden.

Am Ende soll der Preis automatisch berechnet werden
Wenn der Preis über 20 Euro ist sollen 20% abgezogen werden.

Und die Adresse soll eingegeben werden.
Das ganze wird verschickt über dieses Script:
if($dateiname) {
                $trenner = md5(uniqid(time()));
                $header .= "\n";
                $header .= "MIME-Version: 1.0";
                $header .= "\n";
                $header .= "Content-Type: multipart/mixed; boundary=$trenner";
                $header .= "\n\n";
                $header .= "This is a multi-part message in MIME format";
                $header .= "\n";
                $header .= "--$trenner";
                $header .= "\n";
                $header .= "Content-Type: text/plain";
                $header .= "\n";
                $header .= "Content-Transfer-Encoding: 8bit";
                $header .= "\n\n";
                $header .= $Text;
                $header .= "\n";
                $header .= "--$trenner";
                $header .= "\n";
                $header .= "Content-Type: ".$_FILES['anhang']['type']."; name=$dateiname_mail";
                $header .= "\n";
                $header .= "Content-Transfer-Encoding: base64";
                $header .= "\n";
                $header .= "Content-Disposition: attachment; filename=$dateiname_mail";
                $header .= "\n\n";
                $dateiinhalt = fread(fopen($dateiname, "r"), filesize($dateiname));
                $header .= chunk_split(base64_encode($dateiinhalt));
                $header .= "\n";
                $header .= "--$trenner--";

// Keinen Anhang, nur Mail
            } else {
                $header .= "\nContent-Type: text/plain";
                $header .= "\nContent-Transfer-Encoding: 8bit";
                $header .= "\n\n".$Text;
            }

//-> Alles ok, Mail verschicken.
            mail($empfaenger,$pbetreff[(int)$_POST['betreff']],'', $header);
            $gesendet = true;

Mein Problem ist folgendes:

  • Die Berechnung habe ich manuell über Javascript hinbekommen

  • Die Prüfung bekomme ich auch hin (ob Daten vorhanden sind)

  • Wie kann ich den berechneten Wert prüfen ob er höher als 20€ ist.

Hat irgendjemand ein kleines Formular parat oder eine URL das ich das ganze nocheinmal theoritisch durchgehen kann was ich hier falsch mache?

Liebe Grüße
Heiko

  1. HI

    Ich versteh ehrlich gesagt dein Problem noch nicht so ganz, was mir aber sofort aufgefallen ist ist , dass du die Berechnung per JavaScript durchführst und scheinbar auch direkt in dein PHP-Skript übernimmst. Das solltest du in keinem Fall tun, da man Formulare immmer beeinflussen kann und sie somit nicht sicher sind.

    Gruß
    Moe

  2. Hallo Heiko

    • Wie kann ich den berechneten Wert prüfen ob er höher als 20€ ist.

    if(berechneterWert > 20)tueAnweisung();

    Hat irgendjemand ein kleines Formular parat oder eine URL das ich das ganze nocheinmal theoritisch durchgehen kann was ich hier falsch mache?

    Du hast von keinem FEHLER erzählt, nur von mangelndem Know-How.

    Kann es sein, dass Du nicht so richtig weißt, was Du da tust? Ist das vielleicht eine Hausaufgabe in einem PHP-Kurs?

    Einen schönen Start in die Woche!

    *Alex*

    1. Kann es sein, dass Du nicht so richtig weißt, was Du da tust? Ist das vielleicht eine Hausaufgabe in einem PHP-Kurs?

      Einen schönen Start in die Woche!

      Nein, nein es ist keine "Hausaufgabe" sondern ich möchte für einen Bekannten der ein Fotogeschäft hat so ein Formular einstellen.
      Er glaubt das Leute Fotos übers Internet nachbestellen.

      In das Formular soll der Kunde eintragen können:
      1. Ankreuzen beim passenden Format (z.b. 9*13) und dahinter die Nummer des Fotos eingeben und die Stückzahl.
      Am Ende hat der Kunde z.B. 5 Fotos 9*13 nachbestellt zu je z.B. 6 Euro und 7 Fotos mit Format XY für je 3 euro.

      Am Ende soll dann festgestellt werden,
      AHA du Kunde hast mehr als 20 Euro zusammen dafür bekommst du 20% Rabatt.
      Und lieber Kunde trage hier deine Adresse ein.

      Das ganze soll dann als Mail bei ihm ankommen.

      • Ein einfaches PHP Formular bekomme ich hin das Daten per Mail schickt
      • HTML Formulare bekomme ich auch hin

      Ich schaffe nicht

      • Formulare, die irgendwas berechnen
      • Und dann feststellen das ein Betrag über einem bestimmten Betrag ist und einen % Satz abziehen
      • Und das ganze in einem hinzubekommen.

      Also wie du schon gesagt hast, es liegt eher am fehlenden Wissen, trotz tagelanger Recherche mit google und Bücher oder am fehlenden Talent das gelesene umzusetzen.

      Ich weiß nicht bin aber auf jeden Fall verzweifelt, da ich gesagt habe "logisch bekomme ich sowas hin, ist doch ein Kinderspiel", obwohl er nochmal gesagt hat "oder soll ich einen Profi fragen".
      Tja so hab ich Pech gehabt, wenn mir nicht was einfällt oder irgendwo eine Fee auftaucht und sagt:
      Hier nimm dieses Skript
      werde ich eingestehen müssen, das ich weder im Stande noch in der Lage dazu bin ein Formular das über html-Grundkurs und selfhtml-Kapitel Formulare hinausgeht zu erstellen.

      1. Kann es sein, dass Du nicht so richtig weißt, was Du da tust? Ist das vielleicht eine Hausaufgabe in einem PHP-Kurs?

        Einen schönen Start in die Woche!

        Nein, nein es ist keine "Hausaufgabe" sondern ich möchte für einen Bekannten der ein Fotogeschäft hat so ein Formular einstellen.
        Er glaubt das Leute Fotos übers Internet nachbestellen.

        In das Formular soll der Kunde eintragen können:

        Du brauchst erst mal ein

        • html Formular
        • mit PHP addierst du die Werte
        • und dann wird das Formular verschickt.

        Welche der Punkte sind unklar?

        1. Du brauchst erst mal ein

          • html Formular
          • mit PHP addierst du die Werte
          • und dann wird das Formular verschickt.

          Welche der Punkte sind unklar?

          Danke für die Antwort.
          Mir geht es darum ob jemand ein vorgefertigtes Skript für mich hat, mit einer Spalte wo ich eintragen kann "Stückzahl" und "Bestellnummer" und am Ende rechnet er "Stückzahl x Preis (der vorher festgelegt ist).
          Danke

          1. Mahlzeit,

            Mir geht es darum ob jemand ein vorgefertigtes Skript für mich hat, mit einer Spalte wo ich eintragen kann "Stückzahl" und "Bestellnummer" und am Ende rechnet er "Stückzahl x Preis (der vorher festgelegt ist).

            Du vermischst hier ständig HTML-Formulare mit (sinnvollerweise serverseitigen) Skripten für die Auswertung der Eingaben. Ich kenne KEIN Skript[1], das eine "Spalte" besitzt, in die man etwas eintragen könnte.

            Wo genau liegt jetzt eigentlich Dein Problem? Kannst Du die Daten, die Dein PHP-Skript vom HTML-Formular geschickt bekommt, nicht verarbeiten? Weißt Du nicht, wie Du die Verarbeitung zu programmieren hast? Dann solltest Du Dir vielleicht die Grundlagen von PHP zu Gemüte führen.

            Normalerweise sehen Multiplikationen und Additionen so ähnlich aus wie in fast jeder anderen Programmiersprache:

            $foo = $bla + $fasel;  
            $endbetrag = $foo * $bar;
            

            MfG,
            EKKi

            [1] (lasse mich jedoch gern vom Gegenteil überzeugen)

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Wo genau liegt jetzt eigentlich Dein Problem? Kannst Du die Daten, die Dein PHP-Skript vom HTML-Formular geschickt bekommt, nicht verarbeiten? Weißt Du nicht, wie Du die Verarbeitung zu programmieren hast? Dann solltest Du Dir vielleicht die Grundlagen von PHP zu Gemüte führen.

              Hallo,
              mir ist es klar, das mein Formular aus html + php bestehen muß und an eine cgi Schnittstelle die Daten übermittelt.

              Kunde trägt ein:
              Stück Bestellnummer                Preis
              2     49494                        20
              Ein Stück kostet 10 Euro er hat 2 bestellt also 20 Euro.
              So er ist über 15 Euro, also werden ihm nochmal 5% abgezogen.

              Also 20 Euro - 5% = 19€

              Unten soll er noch seine Adressdaten eingeben, diese sollen geprüft werden auf Korrekte eingabe und dann wird das ganze an eine cgi Schnittstelle übermittelt, die es dann per Mail schickt.

              1. Mahlzeit,

                mir ist es klar, das mein Formular aus html + php bestehen muß und an eine cgi Schnittstelle die Daten übermittelt.

                Jein. Ein Formular besteht nur aus HTML. Ziel eines Formulars kann natürlich ein PHP-Skript sein. Das verarbeitet dann die übergebenen Daten (berechnet z.B. den Preis, zieht Rabatt ab und schickt eine Email) und gibt anschließend eine Ausgabe zurück - und das kann dann wieder HTML sein.

                Vielleicht ist für Dich das Thema Affenformular ganz interessant?

                Kunde trägt ein:
                Stück Bestellnummer                Preis
                2     49494                        20
                Ein Stück kostet 10 Euro er hat 2 bestellt also 20 Euro.
                So er ist über 15 Euro, also werden ihm nochmal 5% abgezogen.

                Also 20 Euro - 5% = 19€

                Wenn Du also genau weißt, was Du willst und das auch darstellen kannst - was GENAU ist Dein Problem? Dass Du nicht weißt, wie Du mit PHP rechnen kannst? Dass Du nicht weißt, wie Du das Ergebnis verschicken sollst?

                Bitte schildere Dein Problem genauer - es kann hier keiner in Deinen Kopf schauen oder Deine Gedanken lesen und Glaskugeln sind auch nicht allzu verbreitet ...

                Unten soll er noch seine Adressdaten eingeben, diese sollen geprüft werden auf Korrekte eingabe und dann wird das ganze an eine cgi Schnittstelle übermittelt, die es dann per Mail schickt.

                Dann gestalte das Formular entsprechend, gib als Ziel ein PHP-Skript an und lass dieses dann genau die Rechnungen und den Mailversand erledigen (letzteres hast Du ja sogar schon, wenn ich mich recht erinnere).

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                1. Mahlzeit,

                  Affenformular

                  Narf! Der Link sollte natürlich so aussehen: Affenformular

                  MfG,
                  EKKi

                  --
                  sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                  1. Mahlzeit,

                    Affenformular

                    Danke.

                    Habe glaube ich mittlerweile langsam die Lösung:
                    Schritt eins: Erstellen der Tabelle
                    Schritt zwei: html Befehle für Tabelle
                    Schritt drei: Kalkulieren der in html vorhandenen Variablen
                    Schritt vier: Prüfen ob Betrag über gewisser Höhe ist
                    Schritt fünf: Das ganze an die cgi-Schnittstelle die 1&1 zur Verfügung steht weiterleiten, dort kommt Sie als Mail an.
                    Vielen Dank soweit.

                    Hier mein erster Quellcode:

                    <table border="1">
                      <tr>
                        <th>Größe</th>
                        <th>Stück</th>
                        <th></th>

                    <th>Euro</th>
                        <th>
                      </tr>
                      <tr>
                        <td>13x18</td>
                        <td><select size=1

                    name="13x18nr.1"><option>0<option>1<option>2<option>3<option>4<option>5<option>6<option>7<option>8<option>9</select></td>
                        <td><input name="13x18nr1-nummer" size=8 maxlenght=8></td>
                    <td>
                    <?php
                       $a = 13x18nr.1 * 5

                    echo $a;

                    ?>

                    1. Mahlzeit,

                      Habe glaube ich mittlerweile langsam die Lösung:

                      Ich glaube eher nicht. Mir scheint, Du hast wirklich prinzipielle und strukturelle Verständnisprobleme. Bitte eigne Dir die Grundlagen von HTTP, HTML und PHP an.

                      Schritt eins: Erstellen der Tabelle
                      Schritt zwei: html Befehle für Tabelle

                      Es gibt in HTML keine Befehle. Du kannst eine HTML-Seite erstellen, in der eine Tabelle vorkommt, das ist richtig.

                      Schritt drei: Kalkulieren der in html vorhandenen Variablen

                      Es gibt in HTML keine Variablen. Ich wiederhole mich zum zweiten Mal: HTML ist keine Programmiersprache.

                      Schritt vier: Prüfen ob Betrag über gewisser Höhe ist

                      Was mit PHP ohne weiteres möglich ist:

                      if ($betrag > $gewisse_hoehe) {  
                        tue_dieses();  
                        tue_jenes();  
                      }
                      

                      Schritt fünf: Das ganze an die cgi-Schnittstelle die 1&1 zur Verfügung steht weiterleiten, dort kommt Sie als Mail an.

                      Was ist das für eine CGI-Schnittstelle (Nicht jeder hier ist Kunde bei 1&1 und/oder kennt die dort vorhandenen Funktionalitäten!)? Und wieso kommen sie dort als Mail an? Normalerweise bekommen CGI-Skripte Parameter vom Webserver zur Verfügung gestellt und verarbeiten diese dann auf irgendeine Art und Weise. Als ERGEBNIS dieser Verarbeitung kann dann in der Tat eine Mail verschickt werden.

                      name="13x18nr.1"><option>0<option>1<option>2<option>3<option>4<option>5<option>6<option>7<option>8<option>9</select></td>

                      Hier fehlen die schließenden <http://de.selfhtml.org/html/formulare/auswahl.htm#listen@title=</option>>-Tags. Bitte validiere Deinen HTML-Code.

                      <?php
                         $a = 13x18nr.1 * 5

                      "13x18nr1." ist AFAIK kein gültiger Variablenname. Abgesehen davon: wo genau weist Du Deiner "Variablen" einen Wert zu?

                      PHP-Code wird vom Webserver ausgeführt (s.o. "Grundlagen von PHP") - der Browser bekommt davon nichts zu sehen. Insbesondere könnte er, selbst wenn er ihn bekäme, damit nichts anfangen.

                      MfG,
                      EKKi

                      --
                      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                      1. Was ist das für eine CGI-Schnittstelle (Nicht jeder hier ist Kunde bei 1&1 und/oder kennt die dort vorhandenen Funktionalitäten!)? Und wieso kommen sie dort als Mail an? Normalerweise bekommen CGI-Skripte Parameter vom Webserver zur Verfügung gestellt und verarbeiten diese dann auf irgendeine Art und Weise. Als ERGEBNIS dieser Verarbeitung kann dann in der Tat eine Mail verschickt werden.

                        Ich vermute das er sowas ähnliches meint.
                        Er schickt wohl Daten an dieses "CGI-Skript" und dieses Skript schickt ihm eine Mail.

                        Die andere Möglichkeit nutzt man heutzutage nicht mehr, das Mails direkt per Mail weitergeleitet werden.

                    2. Hier mein erster Quellcode:

                      »

                      Und was macht dein Quellcode genau?
                      Bei mir bringt er Fehlermeldungen.

  3. Hallo Heiko,

    ich möchte ein einfaches Formular gestalten mit folgenden Inhalten:
    Bestellnummer 1: | Anzahl | = Preis
    Bestellnummer 2: | Anzahl | = Preis
    Am Ende soll der Preis automatisch berechnet werden
    Wenn der Preis über 20 Euro ist sollen 20% abgezogen werden.
    Und die Adresse soll eingegeben werden.

    Das ganze wird verschickt über dieses Script: [...]
    Mein Problem ist folgendes:

    • Die Berechnung habe ich manuell über Javascript hinbekommen
    • Die Prüfung bekomme ich auch hin (ob Daten vorhanden sind)
    • Wie kann ich den berechneten Wert prüfen ob er höher als 20€ ist.

    Du vermischst Javascript und PHP. Wenn ich es richtig verstehe, möchtest du, dass eine Kunde das Formular ausfüllt und gleich in einem weiteren Feld der Gesamtbetrag zusammengerechnet wird. Du kannst dies in Javascript genauso machen, wie du die Formularfelder prüfst. Entweder über einen Button, der bei onClick die entsprechenden Felder addiert und bei einem Wert höher 20 wieder 5% abzieht oder du kannst auch einen anderen Eventhandler benutzen.

    Aber eigentlich ist das nicht sinnvoll. Sicherer und logischer (weil es auch mit abgeschalteten Javascript funktioniert) ist, dass du alles über PHP machst. D.h. dein Formular nimmt erstmal nur Daten auf und sendet diese nach dem Bestätigen (ohne Javascriptprüfungen) an eine z.B. check.php. Diese prüft nun auf Vorhandensein der Daten, rechnet die Beträge zusammmen und prüft ggf. Adressdaten. Wenn alles ok ist, zeigst du damit einfach eine Bestätigungseite an, wo dem Kunden nochmal explizit mitgeteilt wird, welche Daten er eingegeben hat, wie sich nun die Gesamtsumme zusammensetzt, welche Positionen er bestellt hat. Klickt er ok, geht es zur z.B. mail.php und diese versendet dann die Daten. Im Fehlerfalle schickst du ihn zurück zum Ausgangsformular und zeigst gleich noch die Fehler an, die du gefunden hast.

    Das ist natürlich nicht nur mit einem Skript zu lösen, welches du kopieren kannst. Dazu musst du selbst aktiv werden.
    Hilfreich ist bestimmt Wissen über:
    [Link:http://de3.php.net/manual/de/ref.session.php@title=- Sessions]
    [Link:http://de3.php.net/manual/de/ref.strings.php@title=- Stringfunktionen]

    Du kannst dir die Funktionalität natürlich auch kaufen oder ggf. auch kostenlos finden, aber dann müsstest du Wissen im Einstellen und Konfigurieren solcher Skripte haben und wie du diese in deine bestehenden Sourcen einbindest. EIn Beispiel ist http://um-fritz.de/artikel

    ciao
    romy

  4. Hallo,
    ich möchte ein einfaches Formular gestalten mit folgenden Inhalten:

    Bestellnummer 1: | Anzahl | = Preis
    Bestellnummer 2: | Anzahl | = Preis

    So könnte jetzt z.B. nur Bestellnummer 1 ausgefüllt werden.

    Was möchtest du genau machen?

    Du hast also ein Formular in dem Du Werte einträgst?
    z.B. 4 Stück und willst das das Formular etwas berechnet?

    Oder wie genau?