Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Kontostand abfragen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-consult PHP Entwicklung
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Kontostand abfragen


 
Sven4972
24-07-2010, 10:25 
 
Hallo,

ich lasse mir mit folgendem Code, den Kontostand eines Mitgliedes ausgeben:


$abfrage = "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
FROM konto where nickname='" . $_POST['auswahl'] . "'";
$ergebnis = mysql_query($abfrage);
$result = mysql_query("SELECT SUM(betrag) as plus FROM konto
where nickname='" . $_POST['auswahl'] . "' AND typ='Einnahme'");
$row=mysql_fetch_object($result);
$summe1 = $row->plus;
$result = mysql_query("SELECT SUM(betrag) as minus FROM konto
where nickname='" . $_POST['auswahl'] . "' AND typ='Ausgabe'");
$row=mysql_fetch_object($result);
$summe2 = $row->minus;
$diff= $summe1-$summe2;
echo "<tr><td class='links'><strong>Einnahmen</strong></td>";
echo "<td class='mitte3'><strong>";
echo $summe1;
echo "</strong></td><td class='rechts'><strong>Euro</strong></td></tr>";
echo "<tr><td class='links'><strong>Ausgaben</strong></td>";
echo "<td class='mitte3'><strong>";
echo $summe2;
echo "</strong></td><td class='rechts'><strong>Euro</strong></td></tr>";
echo "<tr><td class='links'><strong>Kontostand</strong></td>";
echo "<td class='mitte3'><strong>";
echo $diff;
echo "</strong></td><td class='rechts'><strong>Euro</strong></td></tr>";


Nun möchte ich mir eine Liste ausgeben lassen, wo die Kontostände aller Mitglieder aufgelistet werden.
Versucht habe ich bis jetzt:


$abfrage = "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
FROM konto GROUP BY nickname";
$ergebnis = mysql_query($abfrage);
$result = mysql_query("SELECT SUM(betrag) as plus FROM konto
WHERE typ='Einnahme' GROUP BY nickname");
$row=mysql_fetch_object($result);
$summe1 = $row->plus;
$result = mysql_query("SELECT SUM(betrag) as minus FROM konto
WHERE typ='Ausgabe' GROUP BY nickname");
$row=mysql_fetch_object($result);
$summe2 = $row->minus;
$diff= $summe1-$summe2;
while ($row = mysql_fetch_object($ergebnis))
{
echo "<tr><td class='links'>";
echo $row -> nickname;
echo "</td><td class='mitte3'>";
echo $summe1;
echo "</td><td class='rechts'>Euro</td></tr>";
}
?>


Nun wird aber bei jedem Mitglied der gleiche Kontostand angezeigt.

Was muss geändert werden, damit bei jedem Mitglied der richtige Kontostand angezeigt wird?


LG Sven

 
Thora
24-07-2010, 11:05 
 
$summe2 = $row->minus;
$diff= $summe1-$summe2;

Muss innerhalb der while-schleife gesetzt werden da sonst nur einmal der Betrag errechnet wird und dann nicht wieder verändert wird.

Somit hast du den ersten Kontostand aus der DB bei jedem Mitglied ;)

Gruß
Thora

 
Sven4972
24-07-2010, 15:17 
 
Hallo,

wenn ich das in die While-Schleife mit einbaue, dauert die Ausführung des Scriptes länger,
und es wird bei jedem Mitglied, immer noch der gleiche Kontostand angezeigt.


LG Sven

 
wahsaga
24-07-2010, 16:38 
 
Code herzeigen - wir können nicht immer raten, was die Leute verbocken, wenn sie versuchen Ratschläge zu befolgen ...

 
Sven4972
24-07-2010, 16:54 
 
Hallo,

ich habe es so versucht:


$abfrage = "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
FROM konto GROUP BY nickname";
$ergebnis = mysql_query($abfrage);
$result = mysql_query("SELECT nickname, SUM(betrag) as plus FROM konto
WHERE typ='Einnahme' GROUP BY nickname");
$row=mysql_fetch_object($result);

$result = mysql_query("SELECT nickname, SUM(betrag) as minus FROM konto
WHERE typ='Ausgabe' GROUP BY nickname");
$row=mysql_fetch_object($result);

$platz = 0;
while ($row = mysql_fetch_object($ergebnis))
{
$summe1 = $row->plus;
$summe2 = $row->minus;
$diff= $summe1-$summe2;
echo "<tr><td class='links'>";
echo $platz = $platz + 1;
echo "</td><td class='mitte1'>";
echo $row -> nickname;
echo "</td><td class='mitte2'>";
echo $diff;
echo "</td><td class='rechts'>Euro</td></tr>"; }


Und auch so:


$abfrage = "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
FROM konto GROUP BY nickname";
$ergebnis = mysql_query($abfrage);
$platz = 0;
while ($row = mysql_fetch_object($ergebnis))
{
$result = mysql_query("SELECT nickname, SUM(betrag) as plus FROM konto
WHERE typ='Einnahme' GROUP BY nickname");
$row=mysql_fetch_object($result);
$summe1 = $row->plus;
$result = mysql_query("SELECT nickname, SUM(betrag) as minus FROM konto
WHERE typ='Ausgabe' GROUP BY nickname");
$row=mysql_fetch_object($result);
$summe2 = $row->minus;
$diff= $summe1-$summe2;
echo "<tr><td class='links'>";
echo $platz = $platz + 1;
echo "</td><td class='mitte1'>";
echo $row -> nickname;
echo "</td><td class='mitte2'>";
echo $diff;
echo "</td><td class='rechts'>Euro</td></tr>"; }



LG Sven

 
wahsaga
24-07-2010, 17:06 
 
SQL-Abfragen in Schleifen sind ganz böse - da ist klar, dass dabei die Performance in den Keller geht.

Die Ermittlung von plus und minus kannst du auf jeden Fall in einer Abfrage vereinen, in dem du auch noch nach typ gruppierst.

Und bist du an den einzelnen Daten, die die erste Abfrage liefert, überhaupt interessiert in diesem Fall?
Wenn ja - beschäftige dich mit JOINs, http://aktuell.de.selfhtml.org/artikel/datenbanken/
Wenn nein - dann weg damit.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:20 Uhr.