Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dynamiczny formularz, tablica - obliczanie faktury
Forum PHP.pl > Forum > PHP
MateuszRyaN
Witam, tak jak w temacie mam problem z pewnymi obliczeniami. Piszę swoja aplikację i wziąłem się teraz za wystawianie faktury. Zanim opiszę swoj problem powiem jak sytuacja wyglądała do tej pory.
Cały proces wystawiania faktury opierał się na wprowadzaniu kontrahenta do bazy danych w zakładce (dodaj_kontrahenta.php) po czym w mogłem wystawić fakturę w zakładce wystaw_fakture.php pobierając elementy z bazy. Formularz wyglądał następująco:



Z początku nie miałem żadnych problemów bo dodawałem tylko jeden towar, wprowadzając wszystko w jednej linii tak jak na screenie. Pobierałem dane postem , obliczenia + zapis do bazy i wszystko było ok.

  1. $nabywca = $_POST['nabywca'];
  2. $data = $_POST['data'];
  3. $nazwa_towaru = $_POST['nazwa_towaru'];
  4. $ilosc = $_POST['ilosc'];
  5. $j_m = $_POST['j_m'];
  6. $cena_brutto = $_POST['cena_brutto'];
  7. $cena_netto = $cena_brutto / 1.23;
  8. $kwota_vat = ($cena_netto * 0.23);
  9. $wartosc_netto = ($cena_netto * $ilosc);
  10. $vat = "23%";
  11. $wartosc_brutto = ($wartosc_netto + $kwota_vat);


Teraz urozmaiciłem ten formularz do formularza dynamicznego...po kliknięciu (+) dodaje się nowy wiersz...po kliknięciu w fakture wszystko trafia do tablicy. Przykład:

nazwa towaru: towar1, ilosc: 1, jednostka miary: szt., cena brutto: 50
nazwa towaru: towar2, ilosc: 2, jednostka miary: szt., cena brutto: 100

otrzymuję:

  1. (
  2. [nt] => Array
  3. (
  4. [0] => towar1
  5. [1] => towar2
  6. )
  7.  
  8. [il] => Array
  9. (
  10. [0] => 1
  11. [1] => 2
  12. )
  13.  
  14. [jm] => Array
  15. (
  16. [0] => szt.
  17. [1] => szt.
  18. )
  19.  
  20. [cb] => Array
  21. (
  22. [0] => 50
  23. [1] => 100
  24. )
  25.  
  26. )

I teraz taki problem...jak wykonać dalsze obliczenia?? Np. obliczenia ceny netto z ceny brutto? Wcześniej miałem bardzo prosto bo pobierałem getem i robiłem: $cena_netto = $cena_brutto / 1.23;i wszystko było ok,
a teraz próbowałem coś na zasadzie:
  1. $tablica['cn'] = round($tablica['cb'] / 1.23,2);

i niestety nie działa sad.gif natomiast jak już wypisze z konkretnym elementem czyli:
  1. $tablica['cn'] = round($tablica['cb']['0'] / 1.23,2);

to wynik mi lajtowo wyświetla.

Czy da się to jakoś ugryźć? Żeby elegancko mi liczyło cały zbiór tablicy?? Próbowałem też countem pobrac ilość elementów i podstawić to do jakiejś pętli...ale tez mi coś zbytnio nie wyszło. Prosze o pomoc.
Kildyt
Do sumowania wartości z tablicy służy array_sum.
MateuszRyaN
No to może inaczej...potrzebowałbym uzyskać coś takiego:

  1. (
  2. [nt] => Array
  3. (
  4. [0] => towar1
  5. [1] => towar2
  6. )
  7.  
  8. [il] => Array
  9. (
  10. [0] => 1
  11. [1] => 2
  12. )
  13.  
  14. [jm] => Array
  15. (
  16. [0] => szt.
  17. [1] => szt.
  18. )
  19.  
  20. [cb] => Array
  21. (
  22. [0] => 50
  23. [1] => 100
  24. )
  25.  
  26. [cena_netto] => Array
  27. (
  28. [0] => 40,65 // czyli cena brutto/1.23
  29. [1] => 81,30
  30. )
  31.  
  32. [kwota_vat] => Array
  33. (
  34. [0] => 9,34 // cena netto*0.23
  35. [1] => 18,69
  36. )
  37.  
  38. [wartosc_netto] => Array
  39. (
  40. [0] => 40,65 // cena netto * ilosc
  41. [1] => 163,38
  42. )
  43. [wartosc_brutto] => Array
  44. (
  45. [0] => 50 // wartosc netto + kwota vat
  46. [1] => 182,07
  47. )
  48. [vat] => Array
  49. (
  50. [0] => '23%' // tutaj zwykły string
  51. [1] => '23%'
  52. )
  53. )


Prosze o pomoc bo nie wiem jak wykonać te obliczenia od ceny netto w dół sad.gif
Kildyt
Chmm, niezbyt wiem czy o takie coś ci chodzi bo strasznie rozdmuchałeś ten problem. Postaraj się opisać problem, a nie całą sytuację.

Czy nie możesz użyć pętli for i działać na tablicach?
  1. for ($i=0,$to=count($array['nt']);$i<$to;$i++) {
  2. // dla przykładu
  3. $array['wartosc_netto'][$i] = $array['cena_netto'][$i] * $array['il'][$i];
  4. }
MateuszRyaN
Znaczy no próbowałem takiego czegoś...ale czy to dobre rozwiązanie to nie mam pojęcia:

  1. $fak = array();
  2.  
  3. $fak['nt'] = $_POST['nazwa_towaru'];
  4. $fak['il'] = $_POST['ilosc'];
  5. $fak['jm'] = $_POST['j_m'];
  6. $fak['cb'] = $_POST['cena_brutto'];
  7.  
  8. $ile= count($fak['nt']);
  9.  
  10. for ($i=0; $i <$ile; $i++)
  11. {
  12. echo $fak['cb'][$i].'<br />';
  13.  
  14. }
  15.  
  16. echo '<br><br>';
  17.  
  18. for ($i=0; $i <$ile; $i++)
  19. {
  20. $fak['cn'][$i] = $fak['cb'][$i] / 1.23;
  21. echo $fak['cn'][$i].'<br>';
  22.  
  23. }
Kildyt
A dlaczego ma być złym rozwiązaniem?

Poczytaj trochę o MVC i nie zaśmiecaj swojego kodu, bo później możesz się w nim nie połapać.
Zamiast robić kilka pętli, zrób jedną która zapisze dane do jednej tablicy, a dopiero później dzięki foreach możesz je wyświetlić. Ale to już temat na inną dyskusję.
MateuszRyaN
Dziękuje smile.gif O to mi chodziło.
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.