Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Dodawanie wielu liczb z tabeli bazy danych w php
-Kubula-
post 9.11.2007, 23:21:37
Post #1





Goście







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?
Powód edycji: dodalem tag (cysiaczek)
Go to the top of the page
+Quote Post
Foxx
post 10.11.2007, 00:14:38
Post #2





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


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ć.
Go to the top of the page
+Quote Post
-Kubula-
post 10.11.2007, 02:54:32
Post #3





Goście







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 .
Go to the top of the page
+Quote Post
Foxx
post 10.11.2007, 03:19:52
Post #4





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


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. ?>
Go to the top of the page
+Quote Post
-petylyl-
post 10.11.2007, 03:27:15
Post #5





Goście







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 to the top of the page
+Quote Post
-Gość-
post 10.11.2007, 03:29:25
Post #6





Goście







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).
Go to the top of the page
+Quote Post
-Kubula-
post 10.11.2007, 05:02:47
Post #7





Goście







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
Go to the top of the page
+Quote Post
Foxx
post 10.11.2007, 09:06:42
Post #8





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


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?

Ten post edytował Foxx 10.11.2007, 09:08:06
Go to the top of the page
+Quote Post
-Kubula-
post 11.11.2007, 20:09:03
Post #9





Goście







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
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: 18.05.2025 - 07:40