You are not logged in.

  • Login

1

Monday, January 19th 2009, 7:22pm

SUM mit Checkbox-Auswahl

Hallo Zusammen,

ich ein Formular, in dem ich mittels Checkboxen (Häkchen setzen vor dem Datensatz) die Datensätze addieren/summieren möchte, aber eben nur die, die ich ausgewählt habe. Wenn ich die Häkchen gesetzt und den Button "cmd_rechnen" drücke, soll das Ergebnis der Addition erstmal einfach ausgeben werden.

Folgendes habe ich mir bislang überlegt.

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if($_POST["cmd_rechnen"] && $_POST["opt_haken"])
         {
                 $sumsatz=$_POST["opt_haken"];
                 foreach($sumsatz as $add_id)
                 {
                         $gas = mysql_query("SELECT SUM(gas) FROM verbrauch WHERE monat = $add_id");
                         $strom = mysql_query("SELECT SUM(strom) FROM verbrauch WHERE monat = $add_id");
                         $wasser = mysql_query("SELECT SUM(wasser) FROM verbrauch WHERE monat = $add_id");
                         list($antwort) = mysql_fetch_row($gas);
                         list($antwort2) = mysql_fetch_row($strom);
                         list($antwort3) = mysql_fetch_row($wasser);
                 }
                 echo "Gas: $antwort";
                 echo "<br>Strom: $antwort2";
                 echo "<br>Wasser: $antwort3";
         }


Dabei habe ich aber das Problem, dass bei z.B drei gesetzten Haken, nur jeweils der letzte ausgelesene Wert ausgeben wird...also nicht addiert wird. Ich überschreibe sozusagen jedes Mal die Variable ohne zu addieren. Vielleicht könnt ihr mir helfen, eine Lösung zu finden, wie ich bei dem Schleifendurchlauf den neuen Wert auf den alten addiere.

This post has been edited 1 times, last edit by "Billie" (Jan 19th 2009, 7:30pm)


2

Monday, January 19th 2009, 7:38pm

Moin.

Das Problem ist, dass du nach jedem Schleifendurchlauf die Variable $antwort usw. neu definierst.

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$sumsatz=$_POST["opt_haken"];
$antwort = 0;
$antwort2 = 0;
$antwort3 = 0;
                 foreach($sumsatz as $add_id)
                 {
                         $gas = mysql_query("SELECT SUM(gas) FROM verbrauch WHERE monat = $add_id");
                         $strom = mysql_query("SELECT SUM(strom) FROM verbrauch WHERE monat = $add_id");
                         $wasser = mysql_query("SELECT SUM(wasser) FROM verbrauch WHERE monat = $add_id");
 
list($buf) = mysql_fetch_row($gas);
$antwort += $buf;
list($buf) = mysql_fetch_row($strom);
$antwort2 += $buf;
list($bug) = mysql_fetch_row($wasser);
$antwort3 += $buf;
                 }
                 echo "Gas: $antwort";
                 echo "<br>Strom: $antwort2";
                 echo "<br>Wasser: $antwort3";
         }



Okay ist jetzt keine sehr schöne Lösung, doch sollte die erstmal funktionieren.

MfG

3

Monday, January 19th 2009, 8:07pm

Hi keksnicoh,

deine Lösung funktioniert fast perfekt...ich bekomme für das Wasser allerdings immer den gleichen Wert wie bei Strom raus, ansonsten wird richtig gerechnet bei Gas und Strom. :thumbsup:

4

Monday, January 19th 2009, 10:00pm

Hab jetzt nicht großartig den Quelltext gelesen. Nur hat sich da glaub ich ein kleiner Tippfehler eingeschlichen, vllt liegt es daran:

PHP Quellcode

1
2
list($bug) = mysql_fetch_row($wasser);
$antwort3 += $buf;


$bug soll wohl eher auch $buf heißen

5

Monday, January 19th 2009, 10:25pm

Hab jetzt nicht großartig den Quelltext gelesen. Nur hat sich da glaub ich ein kleiner Tippfehler eingeschlichen, vllt liegt es daran:

$bug soll wohl eher auch $buf heißen


Ich hab da 3x drüber gelesen und den Fehler nicht gesehen :pinch:

Aber Danke euch beiden, super schnelle Hilfe!

6

Tuesday, January 20th 2009, 1:49pm

Quoted

list($bug) =...
Hahaha schade das nicht alle Bugs im Quellcode so heißen können :pinch:
:D

7

Tuesday, January 20th 2009, 4:23pm

Ich wollte jetzt noch einen Button hinzufügen, mit dem ich die Differenz von zwei Datensätze ausrechnen und erstmal wieder einfach ausgeben kann.

Und zwar hab ich mir das hier überlegt.

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if($_POST["cmd_differenz"] && $_POST["opt_haken"])
         {
                  $dif=$_POST["opt_haken"];
                  foreach($dif as $differenz_id)
                  {
                         $gas = mysql_query("SELECT gas from verbrauch WHERE monat = $differenz_id");
                         $strom = mysql_query("SELECT strom from verbrauch WHERE monat = $differenz_id");
                         $wasser = mysql_query("SELECT wasser from verbrauch WHERE monat = $differenz_id");
 
                         list($bufgas) = mysql_fetch_row($gas);
                         list($bufstrom) = mysql_fetch_row($strom);
                         list($bufwasser) = mysql_fetch_row($wasser);
 
                         $difgas = $bufgas - $bufgas //hier will ich den ersten Wert minus den zweiten Wert rechnen, weiß aber nicht, wie ich die Variable ansprechen soll;
                         $difstrom = $bufstrom - $bufstrom;
                         $difwasser = $bufwasser - $bufwasser;
 
                         echo "Differenz Gas: $difgas";
                         echo "<br>Differenz Strom: $difstrom";
                         echo "<br>Differenz Wasser: $difwasser";
                  }
 
 
         }


Das ist ja nichts anderes, als den einen Wert minus den anderen Wert zu rechnen. Auch hier habe ich das Problem, dass ich mit dem zweiten ausgelesenen Wert den ersten Wert in der Variable überschreibe und somit als Ergebnis immer Null bekomme. Könnt mir helfen, wie man ersten Wert minus den zweiten Wert rechnet?

8

Tuesday, January 20th 2009, 6:45pm

Ich hab da 3x drüber gelesen und den Fehler nicht gesehen :pinch:

Meine Empfehlung dazu. Bei der Entwicklung immer mit error_reporting(E_ALL) arbeiten.

ansonsten...
neuen wert erfahren - alten wert vergleichen - neuen wert sichern...

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
list($gas) = mysql_fetch_row($gas);
 list($strom) = mysql_fetch_row($strom);
 list($wasser) = mysql_fetch_row($wasser);
 
 $difgas = $gas - $bufgas;
 $difstrom = $strom - $bufstrom;
 $difwasser = $wasser - $bufwasser;
 
 $bufgas = $gas;
 $bufgas = $strom;
 $bufwasser = $wasser;


Gruß

9

Tuesday, January 20th 2009, 7:02pm

Danke d0nut :)

Wieder was gelernt, hatte noch das Problem, dass nicht nur das Endergebnis ausgegeben wurde, sondern auch die ersten ausgelesenen Werte...lag jedoch daran, dass ich die Ausgabe in der Schleife eingebaut hatte, außerhalb der foreach Schleife wird nur das richtige Ergebnis ausgegeben.

Danke nochmal...

10

Tuesday, January 20th 2009, 11:03pm

Ich hab da 3x drüber gelesen und den Fehler nicht gesehen :pinch:

Meine Empfehlung dazu. Bei der Entwicklung immer mit error_reporting(E_ALL) arbeiten.


Meine Empfehlung dazu: immer auch E_STRICT aktiviert haben, damit man zum besserem Programmierstil erzogen wird: error_reporting(E_ALL | E_STRICT); (Ab Version 6 ist E_STRICT in E_ALL enthalten, bis dahin sollte man es während der Entwicklung manuell hinzufügen. PS: E_STRICT setzt PHP 5 voraus!).

Similar threads

Social bookmarks