Daten aus DB addieren und in DB speichern

Begonnen von tommy67, 13. Mai 2010, 08:19:40

Vorheriges Thema - Nächstes Thema

tommy67

Guten Morgen,
ich hoffe ich finde hier jemanden der mir helfen kann.
Kurz erklärt, ich habe ein Profil Formular welches Daten aus einer DB liest und anzeigt.
Ein User aknn seine Daten dann verändern und diese werden dann wieder in die DB geschrieben.
Soweit funktioniert das auch.
Ich habe aber noch 2 weitere Felder in der DB die auf dem Formular nicht angezeigt werden.
gesamt und durch
Diese sollen beim Abschicken der Formulars berechnet und in die DB geschrieben werden.
Auszug aus der php Datei:


  # statische felder speichern
  db_query(\"UPDATE prefix_user
     SET
         homepage = \'\".get_homepage(escape($_POST[\'homepage\'], \'string\')).\"\',
         wohnort = \'\".escape($_POST[\'wohnort\'], \'string\').\"\',
         icq = \'\".escape($_POST[\'icq\'], \'string\').\"\',
         msn = \'\".escape($_POST[\'msn\'], \'string\').\"\',
         yahoo = \'\".escape($_POST[\'yahoo\'], \'string\').\"\',
         \".$avatar_sql_update.\"
         aim = \'\".escape($_POST[\'aim\'], \'string\').\"\',
         staat = \'\".escape($_POST[\'staat\'], \'string\').\"\',
         geschlecht = \'\".escape($_POST[\'geschlecht\'], \'string\').\"\',
         status = \'\".escape($_POST[\'status\'], \'string\').\"\',
         opt_mail = \'\".escape($_POST[\'opt_mail\'], \'string\').\"\',
         opt_pm = \'\".escape($_POST[\'opt_pm\'], \'string\').\"\',
         opt_pm_popup = \'\".escape($_POST[\'opt_pm_popup\'], \'string\').\"\',
         gebdatum = \'\".get_datum(escape($_POST[\'gebdatum\'], \'string\')).\"\',
         sig = \'\".substr(escape($_POST[\'sig\'], \'string\'),0,$allgAr[\'forum_max_sig\']).\"\',
  gilde = \'\".escape($_POST[\'gilde\'], \'string\').\"\',
         lev = \'\".escape($_POST[\'lev\'], \'string\').\"\',
  alf = \'\".escape($_POST[\'alf\'], \'int\').\"\',
  fen = \'\".escape($_POST[\'fen\'], \'int\').\"\',
  gla = \'\".escape($_POST[\'gla\'], \'int\').\"\',
  hel = \'\".escape($_POST[\'hel\'], \'int\').\"\',
  mid = \'\".escape($_POST[\'mid\'], \'int\').\"\',
  nam = \'\".escape($_POST[\'nam\'], \'int\').\"\',
  forn = \'\".escape($_POST[\'forn\'], \'int\').\"\',
  wat = \'\".escape($_POST[\'wat\'], \'int\').\"\',
  ruf = \'\".escape($_POST[\'ruf\'], \'int\').\"\',
  tok = \'\".escape($_POST[\'tok\'], \'int\').\"\',
  kar = \'\".escape($_POST[\'kar\'], \'int\').\"\',
  abe = \'\".escape($_POST[\'abe\'], \'int\').\"\',
  sos = \'\".escape($_POST[\'sos\'], \'int\').\"\',
  vol = \'\".escape($_POST[\'vol\'], \'int\').\"\',
  cad = \'\".escape($_POST[\'cad\'], \'int\').\"\',
  ran = \'\".escape($_POST[\'ran\'], \'int\').\"\',
  gle = \'\".escape($_POST[\'gle\'], \'int\').\"\',
  pgi = \'\".escape($_POST[\'pgi\'], \'int\').\"\',
  ctp = \'\".escape($_POST[\'ctp\'], \'int\').\"\'
      WHERE id = \".$_SESSION[\'authid\']
     );
$abfrage = \'SELECT gilde,lev,alf,fen,gla,hel,mid,nam,forn,wat,ruf,tok,kar,abe,sos,vol,cad,ran,
gle,pgi,ctp,gesamt,durch FROM `prefix_user` WHERE id = \"\'.$_SESSION[\'authid\'].\'\"\';
$gesamt = 0;
$gesamt = $row->alf + $row->fen + $row->gla + $row->hel + $row->mid + $row->nam + $row->forn + $row->wat +
$row->ruf + $row->tok + $row->kar + $row->abe + $row->sos + $row->vol + $row->cad + $row->ran + $row->gle +
$row->pgi + $row->ctp;
$durch = ($gesamt/19);        
  db_query(\"UPDATE prefix_user
   SET
         gesamt = \'$gesamt\',
         durch = \'$durch\'           
     WHERE id = \".$_SESSION[\'authid\']
     );

 
 
Das Problem fängt unten ab Zeile 44 $abfrage = .... an
Ich hoffe das ihr mir dabei helfen könnt und bedanke mich schon mal im voraus.

Powie

Mal ganz einfach gesagt ohne speziell auf dein Problem einzugehen.
Erkläre mal was in den beiden Feldern drin steht und was da errechnet werden soll.

tommy67

Hi Powie,
Also im Prinzip geht es nur um folgenden Bereich des Codes

        $abfrage = \'SELECT gilde,lev,alf,fen,gla,hel,mid,nam,forn,wat,ruf,tok,kar,abe,sos,vol,cad,ran,
gle,pgi,ctp,gesamt,durch FROM `prefix_user` WHERE id = \"\'.$_SESSION[\'authid\'].\'\"\';
       $gesamt = 0;
       $gesamt = $row->alf + $row->fen + $row->gla + $row->hel + $row->mid + $row->nam + $row->forn + $row->wat +
$row->ruf + $row->tok + $row->kar + $row->abe + $row->sos + $row->vol + $row->cad + $row->ran + $row->gle +
$row->pgi + $row->ctp;
       $durch = ($gesamt/19);          
         db_query(\"UPDATE prefix_user
           SET
         gesamt = \'$gesamt\',
         durch = \'$durch\'              
             WHERE id = \".$_SESSION[\'authid\']
     );

 
Korrigiere mich wenn ich was falsches schreibe.
Ich sehe das so:
Ich frage die Daten aus der DB ab
$abfrage = ...
setze $gesamt auf 0
und will die Daten aus der Abfrage in $gesamt addieren
$durch = $gesamt duch eine Zahl (19) teilen
und dann beides in die DB schreiben.
Alle Werte sind in der DB auf INT gesetzt, ausser durch ist DOUBLE 4,2
Für eine andere Idee wie ich $gesamt Berechnen und speichern kann bin ich dankbar,
da das so wie ich es versucht habe scheinbar nicht geht.

tommy67

`Also, habe noch mal weiter getestet.
Habe die Zeile $gesamt = alf + fen + ... mal rausgenommen und
$gesamt = 25
gemacht
Es wird dann tatsächlich die 25 in der DB gespeichert und $durch auf 1,32.
Soweit scheint ja alles richtig zu sein !!!
Nur die Berechnung von $gesamt = ... ist wohl falsch
Wie kann ich diese Daten sonst addieren ?
Keine Idee wie ich die Daten addiert bekomme ?

Powie

Wenn die Spalten in der DB als INT definiert sind dann hast du keine Kommastellen, nur Ganzzahlen. Du musst die Definition der Felder in Double ändern.
P.S. Du kannst genauso die Datenbank rechnen lassen!!!
Bsp: select ( feld1 * feld2 ) as ergebnis From .......

tommy67

Hi Powie,
Also in allen Feldern ausser im feld durch werden nur ganzzahlen eingetragen ...
nur durch ist mit Kommastellen und das Habe ich als DOUBLE 4,2
Kannst du mir das mit der Datenbank rechnen lassen genauer erklären ?
Vllt. sogar den ganzen Code dafür schreiben, also nur für die Berechnung  $gesamt
Ich wäre Dir zuwas von Dankbar.

Powie

Ich verstehe deinen Code leider so gut wie garnicht, daher fällt mir das recht schwer.
Was dir aber hilft: http://dev.mysql.com/doc/refman/5.1/de/mathematical-functions.html\" rel=\"external nofollow\">http://dev.mysql.com/doc/refman/5.1/de/mathematical-functions.html

tommy67

vergiss doch einfach mal alles andere an Code und stell Dir folgendes vor :
ich möchte aus einer DB einige Zellen auslesen (oder auch direkt berechnen)
DB
user | spalte1 | spalte2 | spalte3 | ... |  spalte20 | spalte21 |
Test |     10      |      20      |     30     | .... | $gesamt | $durch |
$gesamt = spalte1 + spalte2 + spalte3 ...
$durch = $gesamt / 19
wie berechne ich $gesamt, bzw. wie kann ich die Daten aus der DB holen und dann addieren ?

Powie

Also du möchtest das haben:
Select user,
    (spalte1 + spalte2 + spalte3) as gesamt,
    (  (spalte1 + spalte2 + spalte3 )  / 19 ) as durch
From tabelle.....

lit-web

Er kann doch auch in der Abfrage schon auf alle 3 Spalten mit SUM arbeiten. Und dann die Summen addieren.
 


Taugenichtse die was haben,haben was gegen Habenichtse die was taugen!!!!


adminfrank

Na so ganz versteh ich aber auch nicht was er haben will!  :gaga:

all your base are belong to us