Abrechnungstool

Dark Ranger

Erfahrenes Mitglied
Guten Tag

Ich wollte mir per PHP und MySQL ein Abrechnungstool programmieren.
Ich wollte darin speichern, was ich so ausgegeben und eingenommen habe.

Vorgestellt habe ich es mir so:
Also man kann zu verschiedenen Sachen etwas eintragen:
Bank
Bar
Sparschwein
Sparen

sind die groben Oberkategorien.
Dann gibt es noch solche Kategorien wie Mittagessen, Geldautomat, Lohn, Miete usw.
Da z.B. die Miete nur vom Konto abgebucht wird, wird diese Unterkategorie auch nur angezeigt, wenn man bank ausgewählt hat, ich denke da dürfte ich keine Probleme haben dies per Javascript zu realisieren.

Mein eigentliches Problem liegt darin, dass ich gern wissen würde wieviel ich Bar, aufm Konto, im Sparschwein usw. habe bevor ich meinen Lohn bekomme, also der Computer muss merken, ahja jetzt kommt Lohn also muss ich vorher noch den aktuellen Betrag von Bank Bar usw. speichern und dann von vorne anfangen zu zählen.
Das ganze soll Monatsweise ausgegeben werden, allerdings bekomme ich meinen Lohn nicht am 1. sondern immer am Ende des Monats, aber er soll mir halt anzeigen, wie Kontostand, Bar usw. sind bevor ich Lohn bekomme, also müsste sich das ganze ein wenig verschieben.

Mhhh ich glaube keiner versteht was ich will, aber vielleicht könnt ihr ja einfach fragen und mir vielleicht auch schon ein paar ideen geben.
 
Hi,

Du brauchst dafür zumindest mal 2 Tabellen, a) für die einzelnen Kategorien (Bank, Sparschwein, Lohn, ...) und b) für die einzelnen Bewegungen (Miete bezahlt, Lohn erhalten, ...).

In der Tabelle mit den Bewegungen speicherst Du dann die Kategorie, den Betrag und das Datum.

Wenn Du jetzt wissen willst welchen Kontostand Du am Tag X hast/hattest gibst Du in einem entsprechenden Formular das Datum und wieder die Kategorie an. Damit filterst Du dann die in der Datenbank gespeicherten Daten.
 
Also habe ich dich richtig verstanden und ich soll für jeden Tag den Kontostand usw. in der Datenbank speichern?

Aber dann müsste ich doch:
ID, Kategorie, Betrag, Bankkontostand,Barkontostand, Sparkontostand, Schweinkontostand und Datum
in der Datenbank speichern oder? Und das für jeden Tag?

Also bei meinen Versuchen hatte ich es auch mit zwei Tabellen wie du es gesagt hast. Naja warte ich mal auf deine Antwort ob ich das so richtig verstanden habe mit den tabellen
 
Zuletzt bearbeitet:
Mhhh bin da noch nicht weitergekommen!
Es muss doch eine bessere Lösung geben als jedesmal alles in der DB zu speichern oder?

Es soll eine Übersichtsseite geben und da soll er einfach alles auflisten, da wäre doch dann die Möglichkeit das ganze auszurechnen oder? Ich weiß nur nicht wie, mir fehlt da ein wenig der Denkanstoss ^^
 
Nein es soll nicht immer der aktuelle Kontostand gespeichert werden.

Du erstellst Dir ein Formular in dem Du dann die einzelnen Kategorien auswählen kannst (Bank, Sparschwein, ...). Zusätzlich gibts Du in diesem Formular ein bestimmtes Datum an (egal ob das von heute, das von gestern oder ...). Jetzt klickst Du auf den Submit Button und übergibst diese Werte als Parameter für eine SQL-Abfrage, zum Beispiel so :

PHP:
SELECT SUM(betrag) FROM bewegungen WHERE kategorie = 'xyz' AND datum <= '2007-10-10'

Damit wird dann immer der aktuelle Stand berechnet.
Man kann das dann natürlich auch noch so ändern das die Abfrage die Endbeträge für alle Konten berechnet :

PHP:
SELECT SUM(betrag) AS aktuell FROM bewegungen WHERE datum <= '2007-10-10' GROUP BY kategorie

Ob das jetzt stimmt weiß ich nicht genau aber ich denke schon.
 
Danke du hast mir sehr geholfen!

Habe jetzt auch noch eine dritte Tabelle, einmal "Bar, Sparen, Sparschwein, Bank" und einmal die Kategorien "Miete, Lohn, Mittagessen,......" und dann halt da wo ich speichere "ID, CatID(z.B. 1 für Miete), CodeID(z.B. 4 für Bank), Betrag und Datum)

Code:
SELECT sum(Betrag) As Aktuell,CodeName FROM ".$dbtable." As d INNER JOIN ".$dbjointable1." as co ON d.CodeID = co.ID WHERE d.Date <='".$date."' GROUP BY d.CodeID

Dadurch gibt er mir das halt alles schön aus ^^

Nun könnte ich es ja auch noch so machen das man auf einer anderen Seite das ganze sich für die verschiedenen Kategorien auswählen kann, oder was meint ihr?

Irgendwer ein paar Vorschläge?
 
Zuletzt bearbeitet:
Also bin schon gut weit gekommen! ^^

Aber ich habe jetzt nochmal ne Frage
Im moment sieht es so aus:
Kategorie______|______Betrag_____|____________|_____Datum
----------------------------------------------------------------------------------------------------
Miete_________|______-100_______|___Bank_____|____10.10.2007
----------------------------------------------------------------------------------------------------
Geschenk_____|_______-25_______|_____Bar____|_____10.10.2007
----------------------------------------------------------------------------------------------------
Mittagessen___|_______-10_______|_____Bar____|_____11.10.2007
-----------------------------------------------------------------------------------------------------
Lohn_________|__min. 1.000.000___|___Bank____|_____11.10.2007
----------------------------------------------------------------------------------------------------


Aber ich würde es lieber so haben:
Kategorie______|______Betrag_____|____________|_____Datum
----------------------------------------------------------------------------------------------------
Miete_________|______-100_______|___Bank_____|
---------------------------------------------------------------------------_____10.10.2007
Geschenk_____|_______-25_______|_____Bar____|
----------------------------------------------------------------------------------------------------
Mittagessen___|_______-10_______|_____Bar____|
--------------------------------------------------------------------------______11.10.2007
Lohn_________|__min. 1.000.000___|___Bank____|
----------------------------------------------------------------------------------------------------


Also er soll die ganzen Daten immer zu einem Datum zusammenfassen, meint ihr das ist möglich?

Edit:
Naja blöd wenn hier die ganzen Leerzeichen entfernt werden ^^ Hoffe so geht es die _ dienen nur als Abstandshalter

Code:
$dbtable = $dbprefix.'data';
      $dbjointable1 = $dbprefix.'cat';
      $dbjointable2 = $dbprefix.'code';
      $result = mysql_query("SELECT * FROM ".$dbtable." As d INNER JOIN ".$dbjointable1." As c ON d.CatID = c.ID INNER JOIN ".$dbjointable2." As co on d.CodeID = co.ID ORDER BY d.Date,co.CodeName ASC");
So hole ich die Daten aus der MySQL Datenbank
 
Zuletzt bearbeitet:
Wenn ich das Group by dranhänge, dann wird mir ja nur ein Datensatz für das Datum ausgegeben, aber ich will ja alle Datensätze haben!

Ich denke die Lösung des Problems müsste man eher beim erstellen der Tabelle suchen:
Code:
$dbtable = $dbprefix.'data';
      $dbjointable1 = $dbprefix.'cat';
      $dbjointable2 = $dbprefix.'code';
      $result = mysql_query("SELECT * FROM ".$dbtable." As d INNER JOIN ".$dbjointable1." As c ON d.CatID = c.ID INNER JOIN ".$dbjointable2." As co on d.CodeID = co.ID ORDER BY d.Date,co.CodeName ASC");
      echo "<table width='75%' border='1'>";
      echo "<tr>";
      echo "<td width='30%'><b>Kategorie</b></td>";
      echo "<td width='10%'><b>Betrag</b></td>";
      echo "<td>&nbsp;</td>";
      echo "<td width='200px'><b>Datum</b></td>";
      echo "</tr>";
      while($line = @mysql_fetch_array($result))
      {
        $date = $line["Date"];
        $year = substr($date,0,4);
        $month = substr($date,5,2);
        $day = substr($date,8,2);
        $date = mktime(0,0,0,$month,$day,$year);
        $output_date = date("d.m.Y",$date);
        echo "<tr>";
        if($line['CatName']=="")
        {
          echo "<td>".$line['CatOptional']."</td>";
        }
        else
        {
          echo "<td>".$line["CatName"]."</td>";
        }
        if($line['Betrag']>0)
          echo "<td><font color='green'>+".$line["Betrag"]." €uro</font></td>";
        elseif($line['Betrag']<0)
          echo "<td><font color='red'>".$line["Betrag"]." €uro</font></td>";
        else
          echo "<td><font color='black'>+/- ".$line["Betrag"]." €uro</font></td>";
        echo "<td>".$line['CodeName']."</td>";
        echo "<td><a href='calc.php?datum=$output_date'>".$output_date."</a></td>";
        echo "</tr>";
      }
      ?>
      </table>
Eigentlich müsste man da irgendwie das ganze zu realisieren
 
Nein, der Ansatz mit "GROUP BY" ist schon richtig. Du musst eine Vorauswahltreffen in der du das "GROUP BY" benutzt und dann anhand der Vorauswahl, die einzelnen Datensätze auslesen.
 
Zurück