mehrere checkboxen mit "and" abfragen

solala123

Erfahrenes Mitglied
Hallo,
ich habe wieder ein Problem,
probiere gerade mit checkboxen herum.
was ich möchte und nicht kann :mad:

es sollen in der Zeilen 1-5stehen feste Beträge als sollwert.
in Zeilen 2-5 soll der Betrag erst nach anklicken zu Zeile 1 addiert werden und bei Gesamtkosten inkl. MwSt/Monat addiert und mit 1,19 multipliziert werden
und in der letzten Zeile soll der obige Wert mit 12 multipliziert werden

das multiplizieren und addieren ist ja kein Problem, nur die Abfrage zweier oder mehrere checkboxen bekomme ich nicht hin.

if(isset($_POST["zeile21"]) and ($_POST["zeile31"] )) //diese Zeile bekomme ich nicht hin && <-- ging auch nicht
$gesamtkosten = $zeile1 + $zeile2 + zeile3;


Und als 2te:
ist es möglich mit php zu rechnen ohne die Seite zu verlassen? oder muß ich da die Spezialisten von Javascript fragen.

so sieht meine Testseite aus:

Code:
<?php 

$zeile1 = $_POST["zeile1"];
$zeile2 = $_POST["zeile2"];
$zeile3 = $_POST["zeile3"];
$zeile4 = $_POST["zeile4"];
$zeile5 = $_POST["zeile5"];
$gesamtkosten = $_POST["gesamtkosten"];
$gesamtkosten_jahr = $_POST["gesamtkosten_jahr"];




echo "$zeile1" . " ". "$zeile2"  . " ". "$zeile3" . " ". "$zeile4" . " ". "$zeile5" . " ". "$gesamtkosten" . " ". "$gesamtkosten_jahr"              ; 
?>

<?php if(isset($_POST["zeile1"])){ 
$zeile1 = $_POST["zeile1"];
$zeile2 = $_POST["zeile2"];
$zeile3 = $_POST["zeile3"];
$zeile4 = $_POST["zeile4"];
$zeile6 = $_POST["zeile5"];

$gesamtkosten = 0;


 if(isset($_POST["zeile21"]))
$gesamtkosten =  $zeile1 + $zeile2;

 if(isset($_POST["zeile31"]))
$gesamtkosten = $zeile1 + $zeile3;


 if(isset($_POST["zeile41"]))
$gesamtkosten = $zeile1 +  $zeile4;

 if(isset($_POST["zeile51"]))
$gesamtkosten = $zeile1 + $zeile5;




 if(isset($_POST["zeile21"]) and ($_POST["zeile31"] ))  //diese Zeile bekomme ich nicht hin
$gesamtkosten =  $zeile1 + $zeile2 + zeile3;






}
 ?>



<form action="Test.php" method="post">



<table width="85%">
  <tr>
    <th colspan="5" ><div align="left"><span class="Stil2">Addieren in Abhängigkeit einer checkbox&nbsp;</span></div></th>
    </tr>
            <td><span class="Stil2">Zeile 1:</span></td>
              <td><div align="center">
            <input name="zeile1" type="text" value="10"  size="8">
          </div></td>
    <td><span class="Stil2">€</span></td>
    <td colspan="2"><span class="Stil1"> Optionen</span></td>
    </tr>

  <tr>
    <td><span class="Stil2">Zeile 2:</span></td>
    <td><div align="center">
      <input name="zeile2" type="text" value="20"  size="8">
    </div></td>
    <td><span class="Stil2">€</span></td>
    <td><input name="zeile21" type="checkbox" onClick="submit" value=""></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><span class="Stil2">Zeile 3:.</span></td>
    <td><div align="center">
      <input name="zeile3" type="text" value="30"  size="8">
    </div></td>
    <td><span class="Stil2">€</span></td>
    <td><input name="zeile31" type="checkbox" value=""></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>Zeile 4:</td>
    <td><div align="center">
      <input name="zeile4" type="text" value="40"  size="8">
    </div></td>
    <td><span class="Stil2">€</span></td>
    <td><input name="zeile41" type="checkbox" value=""></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>Zeile 5</td>
    <td><div align="center">
      <input name="zeile5" type="text" value="50" size="8">
    </div></td>
    <td><span class="Stil2">€</span></td>
    <td><input name="zeile51" type="checkbox" value=""></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><span class="Stil2">Gesamtkosten inkl.MwSt. / Monat:</span></td>
    <td><div align="center">
      <input name="gesamtkosten" type="text" size="8" value="<?php echo $gesamtkosten; ?>">
    </div></td>
    <td><span class="Stil2">€</span></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
    <tr>
    <td><span class="Stil2">Gesamtkosten inkl.MwSt. / Jahr:</span></td>
    <td><div align="center">
      <input name="gesamtkosten_jahr" type="text"  size="8" readonly="true">
    </div></td>
    <td><span class="Stil2">€</span></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>

</table>

<input type="submit" name="submit" value="Abschicken" />
</form>

Danke für Euere Hilfe
Gruß
Rainer
 
Zuletzt bearbeitet:
Muss es nicht so heißen:
PHP:
if(isset($_POST["zeile21"]) and isset($_POST["zeile31"] )) {
}
So wäre es auch möglich:
PHP:
if(isset($_POST['zeile21'], $_POST['zeile31'])) {
}

ist es möglich mit php zu rechnen ohne die Seite zu verlassen? oder muß ich da die Spezialisten von Javascript fragen.
Nicht möglich.
PHP wird auf der Serverseite ausgeführt und gibt Daten aus.
Nachdem (oder schon währenddessen) der Browser die Daten empfangen hat, interpretiert er sie (z.B. als HTML, JavaScript, CSS, ...).

Entweder du sendest eine Anfrage via JavaScript (Stichwort AJAX) an dein PHP-Skript, damit das PHP-Skript irgendwas berechnen kann, oder du berechnest gleich in JavaScript, sofern du z.B. keine DB-Daten o.Ä. brauchst.

Beachte aber, dass du trotzdem serverseitig die Berechnungen erneut erledigen solltest, damit die Daten nicht gefälscht hochgeladen werden können.
 
Was mich beim obigen Code ein bisschen verwirrt:

Du willst die Beträge addieren so bald die entsprechende Checkbox markiert wurde, aber die Beträge die in den Textfeldern stehen können gelöscht werden!

Wenn diese Beträge fest vorgegebene Werte sind, dann gib diesen Wert als Value bei der Checkbox an!

Wenn die Beträge variabel sind und vom Besucher der Seite anzugeben sind, dann lasse die Checkboxen weg und rechne nur mir dem Inhalt der Textfelder!

PHP:
<form name="" action="test.php" method="post" >
	10 - <input type="checkbox" name="check[]" value="10" />
	<br />
	20 - <input type="checkbox" name="check[]" value="20" />
	<br />
	30 - <input type="checkbox" name="check[]" value="30" />
	<br />
	40  - <input type="checkbox" name="check[]" value="40" />
	<br />
	50  - <input type="checkbox" name="check[]" value="50" />
	<br />
	<input type="submit" name="submit" value="Abschicken" />
</form>

<?php
if (isset($_POST["submit"])) {
	$gesamt = array_sum($_POST["check"]);
	$mwst = $gesamt * .19;
	echo "Gesamtbetrag : " .$gesamt;
	echo "<br />";
	echo "Mehrwertsteuer : " .$mwst;
	echo "<br />";
	echo "Gesamtbetrag inkl. Mehrwertsteuer : " .($gesamt + $mwst);
}
?>
 
Hallo Thomas,
die Vorgaben sind als value geschrieben.
Da diese Tabelle in ein anderes Formular integriert werden soll, muß vorher der Wert berechnet werden, bevor das Formular abgeschickt wird.
So wie du es gemacht hast funktioniert
Aber wie gesagt, ich vermute mal, das es in javascript geschrieben werden muß um es sofort zu berechnen.

mfg
Rainer

Hallo ComFreek,
Danke für deine Antwort,
so habe ich es auch schon versucht aber es rechnet immer nur mit einer checkbox, das von Tombe funktioniert aber mich würde es trotz allem interessieren weshalb die Abfrage mit 2 oder mehreren checkboxen so nicht funktioniert
mfg
Rainer
 
Hallo Rainer,

bei dir haben die Textfelder den VALUE-Wert, nicht die Checkboxen!

Was ich bei dir halt auch als Problem ansehe ist das du so immer prüfen musst ob die vorgegebenen Werte überschrieben oder sogar gelöscht wurden.

Wenn die Daten durch die Checkboxen übermittelt werden, können sie (eigentlich) nicht manipuliert werden.

Wenn du vor dem Absenden rechnen willst bzw. musst, dann musst du es mit Javascript lösen (hat ja ComFreek auch schon geschrieben). Wobei das auch nur zum Teil stimmt, da du ja mit den Werten von Formular auf der nächsten Seite rechnen könntest.

Was das eigentliche Problem angeht, so denke ich musst du jede Checkbox einzeln prüfen.

PHP:
if (isset($_POST["zeile1"]) and isset($_POST["zeile2"]))

Das greift nur wenn sowohl "zeile1" als auch "zeile2" übermittelt wird, nicht aber wenn es nur "zeile1" oder "zeile2" ist.

Da du jetzt 2, 3, 4, ... Checkboxen hast, müsstest du sämtliche Kombinationen jeweils in einen IF-Block packen und das macht keinen Sinn.

PHP:
$gesamt = 0;
if (isset($_POST["zeile1"])) $gesamt = $_POST["zeile1"] * 12;
if (isset($_POST["zeile2"])) $gesamt = $gesamt + ($_POST["zeile2"] * 12);
if (isset($_POST["zeile3"])) $gesamt = $gesamt + ($_POST["zeile3"] * 12);
...
if (isset($_POST["zeileX"])) $gesamt = $gesamt + ($_POST["zeileX"] * 12);

So werden die übermittelten Werte einzeln geprüft und wenn vorhanden zur Variable $gesamt dazu gezählt.

Das Beispiel muss natürlich noch prüfen ob die Werte auch numerisch sind, das habe ich mir aber gespart.
 
Zuletzt bearbeitet:
Hallo Thomas,
da hast du Recht, ich werde die Lösung auch so machen wie du es vorgeschlagen hast.
Was aber nicht geht, ist das rechnen auf der andren Seite, denn wenn das Formular nich komplett ausgefüllt ist, kann man es nicht senden und man sollte doch schon vor dem Senden wissen was es kosten soll.
Wenn du nach dem Rechnen sendest, sind die Daten von dem Formular, das schon bisher ausgefüllt wurde wieder gelöscht.

PS weißt du weshalb die Abfrage von ComFreek so nicht funktioniert ?
 
Was das Rechnen angeht, so könntest du einen Button ins Formular machen "Betrag berechnen", wird das Formular mit diesem Button abgeschickt, wird nur der neue Betrag ausgerechnet.

Dann gibt es noch einen Button "Weiter" und mit dem kommst du auf die nächste Seite.

Warum es mit ComFreeks Beispiel meiner Meinung nach nicht geht, habe ich oben noch nachträglich reingeschrieben.
 
Nochmal generell zu den checkboxen,
es sollte doch grundsätzlich möglich sein, dass eine IF Abfrage erst statt findet, wenn alle beide checkboxen einen Haken haben bzw. true sind und das muß oder sollte doch mit and oder && funktionieren,
oder ich bin schon wieder falsch :D

kann man den Button "Betrag berechnen " nicht auch gleich mit den klick bzw. mit dem Häkchen von der checkbox berechnen lassen vielleicht mit oncklick oder so.
Und wie macht man es, dass die vorherigen einträge nicht gelöscht werden?
Wenn man mit javascript die Werte wieder eintragen läßt, bleiben sie auch nach absenden des Formulars erhalten !?
 
Ja natürlich geht das, siehe auch oben.

PHP:
if (isset($_POST["zeile1"]) && isset($_POST["zeile2"])) {
    echo "Beide wurden markiert."
}

Schau dir das mal an, hier bleiben die gewählten Werte auch nach dem Absenden markiert:

PHP:
<form name="" action="test.php" method="post" >
10 - <input type="checkbox" name="c1" value="" <?php if (@in_array(10, $_POST["check"])) echo "checked"; ?>/>
 - <input type="text" name="text[]" readonly value="<?php if (@in_array(10, $_POST["check"])) echo (10 * 12); ?>" size="20" />
<br />
20 - <input type="checkbox" name="c2" value="20" <?php if (@in_array(20, $_POST["check"])) echo "checked"; ?>/>
 - <input type="text" name="text[]" readonly value="<?php if (@in_array(20, $_POST["check"])) echo (20 * 12); ?>" size="20" />
<br />
30 - <input type="checkbox" name="check[]" value="30" <?php if (@in_array(30, $_POST["check"])) echo "checked"; ?>/>
 - <input type="text" name="text[]" readonly value="<?php if (@in_array(30, $_POST["check"])) echo (30 * 12); ?>" size="20" />
<br />
40  - <input type="checkbox" name="check[]" value="40" <?php if (@in_array(40, $_POST["check"])) echo "checked"; ?>/>
 - <input type="text" name="text[]" readonly value="<?php if (@in_array(40, $_POST["check"])) echo (40 * 12); ?>" size="20" />
<br />
50  - <input type="checkbox" name="check[]" value="50" <?php if (@in_array(50, $_POST["check"])) echo "checked"; ?>/>
 - <input type="text" name="text[]" readonly value="<?php if (@in_array(50, $_POST["check"])) echo (50 * 12); ?>" size="20" />
<br />
<input type="submit" name="submit" value="Abschicken" />
</form>

<?php
if (isset($_POST["submit"])) {
	$gesamt = array_sum($_POST["check"]) * 12;
	$mwst = $gesamt * .19;
	echo "Gesamtbetrag : " .$gesamt;
	echo "<br />";
	echo "Mehrwertsteuer : " .$mwst;
	echo "<br />";
	echo "Gesamtbetrag inkl. Mehrwertsteuer : " .($gesamt + $mwst);
}
?>

Ist nicht besonders schön, aber es geht!

kann man den Button "Betrag berechnen " nicht auch gleich mit den klick bzw. mit dem Häkchen von der checkbox berechnen lassen vielleicht mit oncklick oder so.
Und wie macht man es, dass die vorherigen einträge nicht gelöscht werden?
Wenn man mit javascript die Werte wieder eintragen läßt, bleiben sie auch nach absenden des Formulars erhalten !?

Das geht nur wenn du die Berechnung wirklich direkt auf der Seite mit Javascript machst. Eine Funktion die beim Anklicken einer Checkbox ausgeführt wird.

Das "wieder eintragen" ist nur nötig wenn das Formular gesendet wurde.
 
Danke Thomas,
dafür brauch ich jetzt mal etwas Zeit um mir das genau anzuschauen,
außerdem hab ich jetzt hunger :D
mfg
Rainer
 
Zurück