Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] array_sum(), Źle mi sumuje, dodaje "o jeden za duzo"
-greg87g-
post 28.02.2009, 21:41:32
Post #1





Goście







mam tablice:
Kod
$tablica[0]=1
$tablica[1]=0
$tablica[2]=3
$tablica[3]=0
$tablica[4]=0


a funkcja array_sum($tablica) zwraca mi wartosc 6 :/
wiem, logicznie rzecz biorąc, jest jakis element o ktrym zapomnialem i on jest tez sumowany, ale
kiedy jakis element zwiększę o jeden to suma zwieksza sie o 2!

czyli jesli $tablica[0]=2 to array_sum(tablica) zwroci 8
poprostu wzrost wartosci o 1 powoduje zwiekszenie sumy (juz blednej sumy, a nie liczonej od nowa) o 2


jesli to pomocne to powiem ze elementy biore z bazy danych (niektóre w bazie mają wartosc 0, a w stworzonej tablicy sa puste) i dodam ze wyswietlilem sobie wszystkie elementy tablicy oraz wynik i elementy sa ok, a wynik zly

Ten post edytował greg87g 1.03.2009, 18:28:03
Go to the top of the page
+Quote Post
kefirek
post 28.02.2009, 21:47:37
Post #2





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


No przecierz zwraca poprawną wartosc 4
  1. <?php
  2. $tablica[0] = 1;
  3. $tablica[1] = 0;
  4. $tablica[2] = 3;
  5. $tablica[3] = 0;
  6. $tablica[4] = 0;
  7.  
  8. echo array_sum($tablica);
  9. ?>
Go to the top of the page
+Quote Post
-greg87g-
post 28.02.2009, 21:54:48
Post #3





Goście







no to moze oryginal:
Kod
[b]switch($_POST[odp]){[/b]
  
  
                            [i]case '0':
                            $odp='a';              
                            break;

                            case '1':
                            $odp='b';              
                            break;

                            case '2':
                            $odp='c';              
                            break;

                            case '3':
                            $odp='d';              
                            break;

                            case '4':
                            $odp='e';              
                            break;

                            case '5':
                            $odp='f';              
                            break;

                            case '6':
                            $odp='g';              
                            break;

                            case '7':
                            $odp='h';              
                            break;

                            case '8':
                            $odp='i';              
                            break;

                            case '9':
                            $odp='j';              
                            break; };[/i]

  1. [b]$selekt="SELECT a, b, c, d, e, f, g, h FROM ankiety WHERE lp=$lp";[/b]
  2. $zrob=mysql_query($selekt);
  3. $fecz=mysql_fetch_array($zrob);
  4.  
  5. [b]$suma=array_sum($fecz);
  6. $zwieksz=$fecz[$odp]+1;[/b]
  7.  
  8. [b]$aktualizuj="UPDATE ankiety SET $odp=$zwieksz, razem=$suma WHERE lp=$lp";[/b]
  9. [i]$zrobaktualizacje=mysql_query($aktualizuj);[/i]

i stan tych elementow w bazie:
a=2
b=1
c=1
d=2
e=0
f=0
g=0
h=0
i=0
j=0

razem=10

Ten post edytował greg87g 1.03.2009, 18:29:15
Go to the top of the page
+Quote Post
ayeo
post 28.02.2009, 21:58:22
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


~greg87g, proszę uzupełnić posta o znaczniki BBcode i pamiętać o nich na przyszłość.

Pozdrawiam!


--------------------
Go to the top of the page
+Quote Post
kefirek
post 28.02.2009, 22:01:52
Post #5





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


A tak po za tym to można to dorazu na w zapytaniu sumować i bylo by wiele lepiej

  1. <?php
  2. $zrob = mysql_result(mysql_query("SELECT SUM(a + b + c + d + e + f + g + h)  FROM ankiety WHERE lp=$lp"),0 );
  3. echo $zrob;
  4. ?>


Lub

  1. <?php
  2. $selekt="SELECT a, b, c, d, e, f, g, h FROM ankiety WHERE lp=$lp";
  3. $zrob=mysql_query($selekt);
  4.  
  5. $liczby = array();
  6. while($fecz = mysql_fetch_assoc($zrob)) {
  7. $liczby[] = $fecz['a'];
  8. $liczby[] = $fecz['b'];
  9. $liczby[] = $fecz['c'];
  10. $liczby[] = $fecz['d'];
  11. $liczby[] = $fecz['e'];
  12. $liczby[] = $fecz['f'];
  13. $liczby[] = $fecz['g'];
  14. $liczby[] = $fecz['h'];
  15. }
  16. $suma = array_sum($liczby);
  17. ?>


Ten post edytował kefirek 28.02.2009, 22:20:44
Go to the top of the page
+Quote Post
-greg87g-
post 1.03.2009, 00:00:12
Post #6





Goście







z jakiegos dziwnego powodu dalej nie dziala. a nawet gorzej, po zastosowaniu tego kodu wogole sie nic nie sumuje (teraz kolumna z suma pokazuje 0) a kolumny z odpowiedziami się nie dodają.

bo wlasciwie to chodzi o to, ze mi to działało, updatowało mi kolumny z wartościami (o jeden w górę) i suma mi się fajnie aktualizowała (z tym, że błędna). napewno ktos mial juz taki problem, ze mu dodawało do wszystkich kolumn zamiast 1 to dwa, i potem przy kolejnym dodawaniu dodalo znowu 2, tyle ze juz do tego zlego wyniku ktory byl przed chwila

moge wkleic tu caly kod odpowiedzialy za ten moj mechanizm ale pewno i tak nikomu si enie bedzie chcialo tego wszystkiego czytac i rozumiec, bo blad jest tutaj gdzies na poziomie przekazywania zmiennych miedzy odswierzeniem strony a polaczeniem z bazą, no bo skoro wyswietle sobei elelementy ktore mi się sumują i wyswietle sobi tego sume to suma jest zla to znaczy, ze cos sie dodalo dwa razy... chyba

ok:) znalzłem rozwiązanie;)
cały dinks plegał na tym, ze tablica zrobiona za pomoca funkcji mysql_fetch_array() dawala bardzo dziwne klucze:
zamiast
a, b, c, d, e

zrobila:
0, a, 1, b, 2, c, 3, d, 4, e

dziwactwo jakies.
faktycznie pomoglo zastosowanie mysql_fetch_assoc()

txh
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 02:02