Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Dodawanie wielu liczb z tabeli bazy danych w php
Forum PHP.pl > Forum > Przedszkole
Kubula
Witam,
mam problem z dodawaniem liczb z tabel z bazy danych. Mam dwie tabele w bazie danych o zmiennych $row[1] i $row[2]

Kod dodawania wygląda następująco

  1. <?
  2. $suma = $row[1]+$row[2];
  3. echo "suma: $suma";
  4. ?>


Jesli $row[1] to, załóżmy, liczba 10 a $row[2] liczba 20 to wynik jaki otrzymam to 30 - czyli wszystko ok. Ale jeśli w $row[1] (albo [2]) będzie ciąg liczb np.: (10, 11, 12) albo (10+11+12) to brana jest pod uwagę tylko pierwsza liczba (10). Jak powinien wyglądać kod, kiedy w zmiennej jest ciąg liczb, a ja chce uzyskać wynik dodawania ich wszystkich?
Foxx
Zaproponuję jedno z wielu rozwiązań, które zakłada że separator jest znany i stały:

  1. <?php
  2. $zmienna = "2+3+4";
  3. $suma = 0;
  4.  
  5. $parts = explode("+", $zmienna);
  6.  
  7. foreach($parts as $part){
  8. $suma += $part;
  9. }
  10. echo $suma;
  11. ?>


I dodam, że na pierwszy rzut oka wygląda to na nieprzemyślaną bazę danych. Oczywiście mogę się mylić.
Kubula
Wielkie dzięki za odpowiedź, faktycznie działa. Co do nazw tabel, podałem te nazwy dla przykładu, żeby było łatwiej zrozumieć o co mi chodzi smile.gif

Ale mam jeszcze jedno pytanie, jak zrobić, żeby wynik tej sumy zaraz po przeliczeniu, automatycznie został zapisany w odpowiednią tabelę bazy danych mysql? Np.: żeby wynik dodawania zapisał się do tabeli TABELA_X w polu POLE_X .
Foxx
Nieprzemyślana baza nie z powodu nazw tabel ale z powodu tego, że dane, które ostatecznie okazują się być liczbowe bo przeprowadzasz na nich operacje arytmetyczne, Ty przechowujesz w postaci stringa.
Nawet nie próbuję wymyślić skąd w ogóle się biorą te dane w takiej postaci i po co je tak przechowujesz skoro i tak je sumujesz.

A co do drugiej kwestii
  1. <?php
  2. $zmienna = "2+3+4";
  3. $suma = 0;
  4.  
  5. $parts = explode("+", $zmienna);
  6.  
  7. foreach($parts as $part){
  8. $suma += $part;
  9. }
  10.  
  11. $sql = "INSERT INTO tabela_x (pole_x) VALUES ('".$suma."')";
  12. mysql_query($sql) or die(mysql_error());
  13. ?>
petylyl
Jeśli chodzi o kod formularza to jest on na 100% poprawny, ponieważ wcześniej zanim zacząłem kombinować z funkcją emnty to wyświetlało dane z formularza (także adres). Włączyłem obsługę błędów i pokazuje mi się coś takiego:
Kod
Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0 Fatal error: Unknown: Failed opening required '/srv/www/htdocs/przetworzzamowienie.php' (include_path='.:/usr/share/php5:/usr/share/php5/PEAR') in Unknown on line 0


Hm...
Gość
Cytat(petylyl @ 10.11.2007, 03:27:15 ) *
Jeśli chodzi o kod formularza to jest on na 100% poprawny, ponieważ wcześniej zanim zacząłem kombinować z funkcją emnty to wyświetlało dane z formularza (także adres). Włączyłem obsługę błędów i pokazuje mi się coś takiego:
Kod
Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0 Fatal error: Unknown: Failed opening required '/srv/www/htdocs/przetworzzamowienie.php' (include_path='.:/usr/share/php5:/usr/share/php5/PEAR') in Unknown on line 0


Hm...


Prosze admina o usunięcie tego i poprzedniego postu w tym temacie. Ta wiadomość miała byc odpowiedzią do innego tematu (tego założonego przeze mnie - za pomyłkę przepraszam).
Kubula
Otóż potrzebne mi to jest do gry którą tworzę. Uczestnik zdobywa punkty w różnych kategoriach a ja, żeby tego nie liczyć potrzebuję skryptu, który to zrobi za mnie.

Np.: punktów +XX za coś tam
punktów +XX za coś tam
itd.
suma punktów XX
Foxx
Ale dlaczego twój algorytm wygląda tak:
1. z kolejnych liczb robisz string np. "2+3+4"
2. umieszczasz taki string w tablicy
3. następnie wyciągasz
4. rozbijasz na fragmenty
5. sumujesz
6. na koniec zapisujesz ponownie do bazy sumę

Zamiast
1. kolejną liczbę dodaj do liczby, która już jest w tabeli

Albo:
1. dodaj do siebie wszystkie liczby
2. zapisz sumę w bazie

Dobra, nie wnikam bo nie wiem jak wygląda całość ale czy Tobie się nie wydaje dziwne takie traktowanie danych?
Kubula
Mam 3 pola do wpisywania punktów w panelu administracyjnym, dla każdego gracza osobno.

1. Pole A [ ]
2. Pole B [ ]
3. Pole C [ ]

i na końcu Suma punktów [$suma]

I teraz załóżmy mamy gracza X, wchodzę w jego panel i widzę

1. Pole A [+5, +5, +10 ]
2. Pole B [+5, +5, +5 ]
3. Pole C [+5 ]

Suma punktów: 40

Oczywiście on w swoim panelu widzi to samo, jednak w formie tekstowej, bez możliwości edytowania.
I teraz, chcąc dopisać mu punkt klikam w panel, wybieram sobie pole i wpisuję kolejne +5, co za tym idzie automatycznie suma wyniesie 45.

Mam nadzieję, że to wyjaśniłem smile.gif

Na pytanie, czy to dobry sposób, odpowiem, nie wiem. Taki wymyśliłem i tylko taki potrafiłem zrealizować (przy Twojej pomocy). Z pewnością dałoby to się zrobić lepiej, jednak na tym kończą się moje umiejętności smile.gif

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.