• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Werte aufaddieren und in Array ablegen

funnix

New member
Hallo

ich habe mal wieder eine Frage.

Ich habe in einer MySql für jeden Monat mehrere Zahlen Werte gespeichert z.B. Jan 66.33 Feb 45.20 Jan 12.95 usw.

ich durchlaufe mit PHP jetzt die Datenbank nach Monat sortiert. und möchte jetzt eine JavaScript Array Erzeugen, das die Summe der jeweiligen Monate enthält. Klar könnte ich das in PHP recht einfach machen, aber dann ist ja der Reiz weg ;-) Ich
möchte einfach nachher ein JS Array in der Form: JahresSummen[1] = 69.28
JahresSummen[2] = 45.20 usw.

ich habe mir das bisher so gebaut: <code>
function addMonth(i,zahl){
MonatsSumme=summe(MonatsSumme,zahl);

function summe(x,y){
if(!x) x=0;
var sum=x+y;
alert( x + y +"="+ sum );
return(sum);
}
}
</code>

Aber wie schon zu erwarten klappt das nicht ........


Jemand einen Tipp für mich?

Danke Gruß Funnix
 
Da du nur den JS Quellcode gepostet hast und die Fehlerbeschreibung "Aber wie schon zu erwarten klappt das nicht ........" nichtssagend ist, kann ich jetzt mal nur vermuten wo dein Problem liegt.

Falls die Funktion "summe" falsche Werte liefert, also 1+1 =11 würde ich sie wie folgt abändern:

Code:
function summe(x,y){
if(!x) x=0;
var sum=parseInt(x)+parseInt(y);
alert( x +' + '+ y +"="+ sum );
return(sum);
}

Wenn Zahlen als String übergeben werde, müssen diese erst einmal wieder in Integer gewandelt werden damit man damit rechnen kann.
 
hallo teldri.....

erst mal Danke füpr deine Hilfe... und sorry für meine ungenaue Fehlerbeschreibung:
<code>
for ($i=1; $i<=12; $i++){
$QUERY= "SELECT * FROM rechnungen WHERE zahlstatus >0 AND anreise >='2013-$i-01' AND anreise <='2013-$i-31' ORDER BY anreise ASC";
$result = mysql_query($QUERY);
while ($rowRechnungen = mysql_fetch_array($result)) {
<script type="text/javascript">
addMonth('"<? echo $i ?>"','<? echo $rowRechnungen['anzahlung'] ?>');
</script>
<?

}
</code> Das ist der PHP Teil.
Das ist der JS Teil:
<code>
<script class="code" type="text/javascript">
MonatsSumme=new Array("1","2","3","4","5","6","7","8","9","10","11","12");

for(i=0;i<=12;i++){
MonatsSumme=0;
}
function addMonth(i,zahl){
MonatsSumme=summe(MonatsSumme,zahl);

function summe(x,y){
if(!x) x=0;
var sum=parseInt(x)+parseInt(y);
alert( x +' + '+ y +"="+ sum );
return(sum);
}
}
</script>

}
</code>

Ein Fehler, den ich nach deiner Antwort noch selbst gefunden habe, waren zwei Anführungszeichen bei der Werteübergabe von PHP...
Jetzt scheint es zu klappen, allerdings ohne Nachkomma Stellen?!?!

Gruß

Carsten
 
Hi Carsten,

das wird wohl menie Schuld sein, peinlich...
Wenn es Kommazahlen sind muss es natürlich "parseFloat" und nicht "parseInt" heißen.

Und: Bin mir nicht sicher wie die Zahlen in der DB abgelegt werden...mit Punkt oder Komma.
Für JS muss es auf jeden Fall ein Punktsein.
 
Hallo teldri,

die Daten wurden mit Punkt abgelegt...ich probier es dann mal aus..

Aber mal nochwas.... ich habe daxs Array jetzt korrekt gefüllt, dafür erst mal danke, aber ich möchtre das zu einem späteren Zeitpunkt für eine Grafik(Kurve) zu
verwenden. Nur dann ist es leer????????????????


Danke
Gruß Funnix
 
Zuletzt bearbeitet:
@funnix: Bitte benutze doch die [ CODE ]-Tags, wie schon mehrfach erwähnt. Das macht das Lesen deiner Beiträge wesentlich einfacher und evtl. haben dann sogar mehr Leute Lust sich deinem Problem zu widmen...

Falls die Zahlenwerte mit Komma vorliegen, mittels selfhtml...replace (String) das Komma durch einen Punkt ersetzen.
 
ich verzweifelk gerade, weil ich scheinbar nicht in der Lage bin ein Array zu füllen....
Code:
<script class="code" type="text/javascript">

function addMonth(i,zahl){
    var SUM=summe(MonatsSumme[i],zahl);
    MonatsSumme[i]=SUM;
    alert(MonatsSumme+"<<<>>>"+SUM +" "+i);
}

 function summe(x,y){
  if(!x) x=0;
  var sum=parseFloat(x)+parseFloat(y);
    return(sum);
 }
</script>
<?
for ($i=1; $i<=12; $i++){
  $QUERY= "SELECT *  FROM rechnungen   WHERE zahlstatus >0 AND anreise >='2013-$i-01' AND anreise <='2013-$i-31' ORDER BY anreise ASC";
  $result = mysql_query($QUERY);
    while ($rowRechnungen = mysql_fetch_array($result)) {
          echo "Nr:".$i."<--->".$rowRechnungen['anzahlung']."???????<br>";?>
       <script type="text/javascript">
         addMonth('"<? echo $i ?>"','<? echo $rowRechnungen['anzahlung'] ?>');
          alert(   MonatsSumme);
       </script>
       <?
    }

}

Die Werte werden vom Feinsten berrechnet aber das Array ist nur mit "0" en gefüllt...

Wsas mach ich da bloß verkehrt????

Gruß Funnix
 
Zuletzt bearbeitet:
ich verzweifelk gerade, weil ich scheinbar nicht in der Lage bin ein Array zu füllen....
<code>
<script class="code" type="text/javascript">

function addMonth(i,zahl){
var SUM=summe(MonatsSumme,zahl);
MonatsSumme=SUM;
alert(MonatsSumme+"<<<>>>"+SUM +" "+i);
}

function summe(x,y){
if(!x) x=0;
var sum=parseFloat(x)+parseFloat(y);
return(sum);
}
</script>
<?
for ($i=1; $i<=12; $i++){
$QUERY= "SELECT * FROM rechnungen WHERE zahlstatus >0 AND anreise >='2013-$i-01' AND anreise <='2013-$i-31' ORDER BY anreise ASC";
$result = mysql_query($QUERY);
while ($rowRechnungen = mysql_fetch_array($result)) {
echo "Nr:".$i."<--->".$rowRechnungen['anzahlung']."???????<br>";?>
<script type="text/javascript">
addMonth('"<? echo $i ?>"','<? echo $rowRechnungen['anzahlung'] ?>');
alert( MonatsSumme);
</script>
<?
}

}
<code>

Die Werte werden vom Feinsten berrechnet aber das Array ist nur mit "0" en gefüllt...

Wsas mach ich da bloß verkehrt????

Gruß Funnix
 
Wenn das von deinem letzten Post dein ganzer code ist würde ich vermuten das das Array MonatsSumme nicht existiert, du hast es nicht definiert. Das müsste die Fehlerkonsole dann aber auch anzeigen.

Wenn ich das Array bei mir vorher definiere funktioniert es.
Aber es sollte so definiert werden:
Code:
var MonatsSumme=Array(0,0,0,0,0,0,0,0,0,0,0,0,0);
und nicht so:
Code:
MonatsSumme=new Array("1","2","3","4","5","6","7","8","9","10","11","12");

Um generell zu verhinedrn das dir Javascript Fehler nicht auffallen kannst du in den Funktionen einen try...catch Block einbauen:
Code:
function addMonth(i,zahl){
  try 
    {
    var SUM=summe(MonatsSumme[i],zahl);
    MonatsSumme[i]=SUM;
    alert(MonatsSumme+"<<<>>>"+SUM +" "+i);
    } catch(c) { alert('Fehler: addMonth() =>  '+c); }
}

Der PHP Teil scheint keinen Feher zu haben. Aber generell solltest du PHP Teile so schreiben
Code:
<?php ...code... ?>
.
Neuere PHP Versionen setzen das vorraus, dann ist es direkt kompatibel.
 
Erzeuge dir doch einfach deine Daten als Arrays im Javascript und benutze für die Rechnerei irgendeine Funktion die du am Ende vom Dok-Body definierst und ausführst...

Und was bedeutet eigentlich "vom Feinsten berechnet"? Wo, wie, wann?

Kleines Demo-Script mit Daten zum Testen könnte bei der Problemlösung enorm hilfreich sein ;)
 
Dein Problem liegt daran, dass du hier:
Code:
addMonth('"<? echo $i ?>"',
im JS einen String mit doppelten Anfürhtungsstrichen am Anfang und Ende erzeugst. Entferne entweder die ' oder die " (oder auch beide, da du ja eigentlich mit Zahlen rechnest und $i eine ist - mir ist nicht ganz klar, warum du im JS da mit Strings rumhantierst) und es sollte eigentlich funktionieren...

Warum du da aber unbedingt mit JS hin willst, wo du das sicherer und sauberer mit PHP lösen könntest, ist mir völlig schleierhaft.
 
Wenn du nur die Monatssumme haben willst... wieso überlässt du das nicht der Datenbank, wo es in diesem Fall eher hingehören würde? Du kannst per GROUP BY und SUM() genau das erreichen was du haben willst und sparst dir, dass du das von hand im code machen musst. Die Datenbank kann dies eh schneller erledigen.

Weiterhin: Du verwendest eine veraltete mysql-Extension. Steige doch bitte auf mysqli (man achte auf das i) oder PDO um. Bietet dir nur Vorteile. mysql soll ab PHP6 nicht weiter supportet werden.
Weiterhin, die 2te: Anstatt deine Abfrage 12 mal auszuführen, mit unterschiedlichen Monatszahlen... dies geht auch in einer Abfrage, welches dir wieder performance bringt. (mit PDO oder mysqli hast du hier schon den Vorteil, dass du das statement nur einmal senden willst (falls dir die Umwandlung in eine Abfrage zu schwierig ist) und dann musst du nur noch die Argumente senden.)
$QUERY ist kein guter name in PHP, da Großgeschriebene Variablen in der Regel konstanten sind:
normale variablen in lowerCamelCase : $veryImportantVariable
konstanten in UPPERCASE mit Unterstrichen: define("THIS_IS_A_CONSTANT", "wert");
private / protected Eigenschaften in objekten in lowerCamelCase, aber mit Unterstricht beginnend: $_privateVariable
etc. Schau dir mal die Zend-Coding-Convention an. Die gibt nen guten Grundstock und wird sich weitestgehend dran gehalten.

Entferne entweder die ' oder die "
ich würde behaupten beide... i ist doch ne Zahl und kein String.

Lg Kasalop
 
Zurück
Oben