Werte von Eingabefeldern zusammenrechnen

mistermethod

Grünschnabel
Hallo!

Ich habe folgendes Script:

Code:
<?
   if (isset($_POST['submit']))
   {
      $summe = 0;

      if ($_POST['gr1'] != "")
        $summe += 3 * $_POST['gr1'];

      if ($_POST['gr2'] != "")
        $summe += 4 * $_POST['gr2'];

      if ($_POST['gr3'] != "")
        $summe += 5 * $_POST['gr3'];

      if ($_POST['gr4'] != "")
        $summe += 6 * $_POST['gr4'];

      printf ("Gesamtsumme: %.2f", $summe);
   }

?>
     <form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">
       Größe 1 a 3 Euro <input type="text" name="gr1"><br>
       Größe 2 a 4 Euro <input type="text" name="gr2"><br>
       Größe 3 a 5 Euro <input type="text" name="gr3"><br>
       Größe 4 a 6 Euro <input type="text" name="gr4"><br>
      <input type="submit" name="submit" value="Berechnen">
    </form>
?>

Wenn man auf Submit klickt werden die Kosten pro jeweiligem Karton mit der bestellten Anzahl multipliziert und der Gesamtbetrag wird ausgegeben. So weit so gut.
Der button soll aber nun nicht die werte übergeben und aus den feldern löschen sondern soll, bevor das formular per post abgeschickt sondern wird einfach nur anzeigen wie hoch der gesamtbestellwert mittlerweile ist. falls der kunde damit zufrieden ist kann er das ganze endgültig abschicken, falls nicht kann er die werte verändern und neu berechnen lassen.
eine lösung wäre das ich 2 submit buttons mache, zum berechnen wie jetzt und dann einen zweiten um das ganze an den mailer zu übergeben. geht das? ausserdem müssten nach der berechnung die vom benutzer angegebenen anzahlen noch in den feldern stehen. kann ich den eingabefeldern 'sagen' das sie ihren anfangswert aus einer variable beziehen sollen?

hoffe irgendwer versteht was ich da verzapft habe :-)

mfg
mrm
 
wunderbar, das klappt ja schon mal vorzüglich mit den Variablen :-)
bleibt nur noch 1 Problem: wie bringe ich die Daten jetzt zum mailer? bisher war mein formular folgendermaßen aufgebaut:
Code:
<form name="shop" method="post" action="send.php">

aber das geht ja jetzt nicht mehr wegen der berechnung. Ich brauche quasi einen zweiten submit-button der das ganze an send.php übergibt. lösungsvorschläge? :-)
 
Ich würde die Seite mithilfe einer Variablen ind if/else in 3 "Abschnitte" teilen.

Ungefähr so:
PHP:
if($_GET['action'] == "calc")
{
  // Hier kommt der Teil der berechnet und die Summe ausgibt
  // die Formaction muss hier lauten um auf die Seite zu gelangen, 
  // die die Bestellung abschließt:
  // action="<?php $_SERVER['PHP_SELF']; ?>?action=order"
}
elseif($_GET['action'] == "order")
{
  // Hier wird die Bestellroutine durchgeführt; zB Bestellmail verschicken, etc
}
else
{
  // Hier kommt der Teil der das Bestellformular zeigt
  // die Formaction muss hier lauten um auf die Seite zu gelangen, 
  // die die Bestellung ausrechnet:
  // action="<?php $_SERVER['PHP_SELF']; ?>?action=calc"
}

Hoffe, das war ein wenig verständlich und hilft.

Schönen Sonntag noch!
 
ähm ja nu, die idee gefällt mir doch ich muss sagen bei der umsetzung bin ich hoffnungslos überfordert. also seh ich das richtig wenn ich das jetzt mal so im body habe:
PHP:
falscher Code :-)
so weit so gut, nur wie sag ich den buttons das sie entweder die "order" oder die "calc" funktion ansprechen sollen?
 
Zuletzt bearbeitet:
Wie ich bereits oben beschrieben habe. Du hängst an das PHP-Self in der Formularaction einfach folgendes an:
?action=calc
Du gelangst auf die Seite, auf der die Berechnung durchgeführt wird.
Hier würde ich erneut das Formular der Anfangsseite anzeigen, nur mit festen Summen drin.Darunter machst du 2 Formularbutton: einen zum Abbrechen, falls die Bestellung nicht ausgeführt oder geändert werden soll und einen der dann auf die Seite

?action=order
weiterleitet.


Ich hoffe du verstehst, was ich meine, sonst einfach Fragen. Du musst nur darauf achten, dass Du die Werte der Formularfelder bei jeder action am Besten über versteckte input-Felder mitführst. Das if(isset($submit)) kannst Du dir ruhig sparen.
Gerne kann ich dir auch eine Vorlage erstellen - vielleicht werden dadurch unklarheiten beseitigt.
 
ok, also weiter im text:
PHP:
schon fast richtiger code...

meinst du das in etwa so?
steckt leider voller syntaxfehler, das erste formular wird nicht als solches erkannt, der elseif-teil wird komplett als text ausgegeben... wie binde ich die froumlare in die if schleife ein? muss ich da etwas zusätzliches schreiben? und wie löse ich das wenn der kunde noch mal neu berechnen will?
bin dir sehr dankbar für deine hilfe!

mfg
mrm
 
Zuletzt bearbeitet:
Um etwas, sei es Text oder HTML-Code, in PHP auszugeben, gibt es zwei Möglichkeiten:
Möglichkeit 1)
Über die Befehle echo oder print
PHP:
echo "Hallo Welt \"Achtung bei anzuzeigenden Anführungszeichen!\"";
print "Hallo Welt \"Achtung bei anzuzeigenden Anführungszeichen!\"";
Beachte: Anführungszeichen innerhalb des Strings müssen escaped(also mit einem \ vor dem ") werden!

Möglichkeit 2)
Trennung von PHP & HTML-Code
PHP:
<?php
if($action){
   $rechne = 1+3;
?>
<html>
<head>
  ...
</head>
<body>
Das Summe aus 1 und 3 ergibt <?php echo $rechne; ?>.
</body>
</html>
<?php
} 

else { ... }

Hast Du den Unterschied soweit verstanden? Ich empfehle als kleine Lektüre:
http://www.schattenbaum.net/php

Um dem Besucher ein ändern der Bestellung zu ermöglichen gibt es wieder - du kannst es dir sicher schon denken - zwei Möglichkeiten:

Möglichkeit 1)
Du leitest den Besucher mittels Formularbutton auf die Anfangsseite weiter.
Dazu musst du ein neues Formular um den Button erstellen, in dem Du die vorher eingegebenen Werte über versteckte Felder wieder an die Anfangsseite "schickst" nachdem der Button "Bestellung ändern" gedrückt wurde.
Auf der Anfangsseite füllst Du die Formularfelder wieder mit den gerade übergebenen Daten füllst.

Möglichkeit 2)
So ähnlich wie Möglichkeit 1, nur das Du nun ein extra Formular für den Button "Bestellung abschicken" machst, die Werte aus dem Form wieder in die hidden-Felder einträgst usw. Als form-action gibst du $_SERVER['PHP_SELF'] . "?action=order"
Dann fügst Du einen neuen Button in das alte Formular ein mit der Beschriftung "Bestellung aktualisieren" und gibst als form-action $_SERVER['PHP_SELF'] . "?action=calc" an.

Ich hoffe, das überfordert dich jetzt nicht. Falls doch, erstelle ich dir gerne mal eine Datei, die das leistet zur ansicht.
 
du bist mein persönlicher held :-) hast es geschafft das ichs verstanden hab und mich dazu auch noch gut fühle weil ichs ja irgendwie aus lauter codeschnipseln ohne sonstige hilfe doch noch selber was gebastelt hab (nur für das anhängen der ?action mußte ich noch googlen). und das ohne php kenntnisse *g*
es funktioniert 1a und macht spaß!
PHP:
<?
if($_GET['action'] == "calc") 
{ 
      $summe = 0;

      if ($_POST['gr1'] != "")
        $summe += 3 * $_POST['gr1'];

      if ($_POST['gr2'] != "")
        $summe += 4 * $_POST['gr2'];

      if ($_POST['gr3'] != "")
        $summe += 5 * $_POST['gr3'];

      if ($_POST['gr4'] != "")
        $summe += 6 * $_POST['gr4'];

      printf ("Gesamtsumme: %.2f", $summe);
?>
	 <html>
	 <body>
	  <form action="<? echo $_SERVER['PHP_SELF'];?>?action=calc" method="post">
       Größe 1 a 3 Euro <input type="text" name="gr1" value="<? echo $gr1; ?>"><br>
       Größe 2 a 4 Euro <input type="text" name="gr2" value="<? echo $gr2; ?>"><br>
       Größe 3 a 5 Euro <input type="text" name="gr3" value="<? echo $gr3; ?>"><br>
       Größe 4 a 6 Euro <input type="text" name="gr4" value="<? echo $gr4; ?>"><br>
      <input type="submit" name="submit" value="Neu berechnen">
     </form>
	 	  <form action="<? echo $_SERVER['PHP_SELF'];?>?action=order" method="post">
          <input type="hidden" name="gr1" value="<? echo $gr1; ?>">
          <input type="hidden" name="gr2" value="<? echo $gr2; ?>">
          <input type="hidden" name="gr3" value="<? echo $gr3; ?>">
          <input type="hidden" name="gr4" value="<? echo $gr4; ?>">
      <input type="submit" name="submit" value="Bestellen">
     </form>
	<body>
	</html>
<?
}
elseif($_GET['action'] == "order") 
{
	$empfaenger = "mailto_jsk@gmx.de"; 
	$kopf = "Betreffblubbblah";
	$nachricht = "Test: Gr1:".$gr1." Gr2:".$gr2." Gr3:".$gr3." Gr4:".$gr4;
	if(mail($empfaenger, $kopf, $nachricht, "From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer: PHP/" . phpversion()))
	{
    	echo "passt";
	}
	else
	{
    	echo "passtnicht";
	}
}
else
   {
?>
   <html>
   <body>
     <form action="<? echo $_SERVER['PHP_SELF']; ?>?action=calc" method="post">
       Größe 1 a 3 Euro <input type="text" name="gr1" value="<? echo $gr1; ?>"><br>
       Größe 2 a 4 Euro <input type="text" name="gr2" value="<? echo $gr2; ?>"><br>
       Größe 3 a 5 Euro <input type="text" name="gr3" value="<? echo $gr3; ?>"><br>
       Größe 4 a 6 Euro <input type="text" name="gr4" value="<? echo $gr4; ?>"><br>
      <input type="submit" name="submit" value="Berechnen">
    </form>
	</body>
	</html>
<?
	}
?>

1000 DANK
 
Zurück