Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Invalid argument supplied for foreach()
Forum PHP.pl > Forum > PHP
krysk
Witam,

nie mogę zlokalizować błędu mojego skryptu, wyskakuje błąd:

Kod
Warning: Invalid argument supplied for foreach() in /home/dzikswi/public_html/konto/faktura.php on line 160


Problem w tym, że linia 160 jest poprawna w 100% wg. mojej wiedzy:
  1. <?php
  2. foreach( $vat as $klucz => $wartosc )
  3. ?>

kolejnym szukanym błędem była zła nazwa tablicy - niestety - tablica $vat istnieje. Gdzie leży błąd?
nospor
niestety komunikat glosi jasno, ze $vat nie jest tablicą.

daj tak:
  1. <?php
  2. print_r($vat);
  3. ?>
by sie dowiedziec co zawiera $vat
krysk
Faktycznie zmienna jest pusta, ale dlaczego?

Kod wygląda następująco:

  1. <?php
  2. $result = sql("SELECT * FROM ". $conf['tbl_skladki'] .", ". $conf['tbl_list'] ." WHERE ". $conf['tbl_skladki'] .".s_id_l=". $conf['tbl_list'] .".l_id AND ". $conf['tbl_list'] .".l_id='". $glowne['f_id_l'] ."' ORDER BY ". $conf['tbl_skladki'] .".s_time ASC");
  3. while($row = mysql_fetch_array($result)){
  4. if($row['s_typ']=='pzl') {$typ = "Składka do PZŁ";}elseif($row['s_typ']=='kolo') {$typ = "Składka do koła";}
  5. $vat['0']['netto'] = $vat['0']['netto'] + $row['s_kwota'];
  6. $vat['0']['bruto'] = $vat['0']['netto'];
  7. $body .= $body_f;
  8. $body = str_replace("<<lp>>", $lp, $body); 
  9. $body = str_replace("<<nazwa>>", $typ . ' ('. $row['s_okres'] . ')', $body);
  10. $body = str_replace("<<ilosc>>", '1', $body);
  11. $body = str_replace("<<jm>>", 'szt.', $body);
  12. $body = str_replace("<<netto>>", number_format(str_replace(",",".",$row['s_kwota']), 2, '.', ' '), $body);
  13. $body = str_replace("<<vatp>>", '0 ', $body);
  14. $body = str_replace("<<vat>>", '0.00', $body);
  15. $body = str_replace("<<brutto>>", number_format(str_replace(",",".",$row['s_kwota']), 2, '.', ' '), $body);
  16. $lp++;
  17. }
  18.  
  19. foreach( $vat as $klucz => $wartosc ) {
  20.  $vat_b .= str_replace("<<stawka>>", $wartosc, $vat_sum_body);
  21. foreach ($vat[$klucz] as $klucz2 => $wartosc2) {
  22.  $vat_b = str_replace("<<". $klucz2 .">>", $wartosc2, $vat_sum_body);
  23. }
  24. }
  25. ?>
NetJaro
Hmm..
Może daj
  1.  <?php
  2. $vat = array();
  3. ?>

Na początku smile.gif
krysk
Wszystko pięknie - błędu brak, ale tablica jest pusta i nie wykonują się zadania które są w pętli.
NetJaro
Hmm.. masz stworzoną funkcję "sql"? Jeżeli nie, to zamiast tego powinno być "mysql_query"...
krysk
Tak, oczywiście - jest stworzona.
dr_bonzo
Skoro petla while nie dziala to pewnie zapytanie nie zwraca ci zadnych rekordow. Wypisz sobie to zapytanie:
  1. <?php
  2. $query = "SELECT * FROM ". $conf['tbl_skladki'] .", ". $conf['tbl_list'] ." WHERE ". $conf['tbl_skladki'] .".s_id_l=". $conf['tbl_list'] .".l_id AND ". $conf['tbl_list'] .".l_id='". $glowne['f_id_l'] ."' ORDER BY ". $conf['tbl_skladki'] .".s_time ASC";
  3. echo $query;
  4. ?>

i zapusc je na bazie (np. phpMyAdminem) i sprawdz czy ci cos zwroci.
krysk
Zwraca.
nospor
skoro to zapytanie zwraca ci rekordy w PMA, nie ma bata musi i tu.
daj tak i spradźmy czy oby ci do petli w chodzi:
  1. <?php
  2.  
  3. while($row = mysql_fetch_array($result)){
  4. print_r($row);
  5. ///...
  6. }
  7. ?>

jesli ci nie wyswietli nic, to jednak masz cos nie tak. jesli ci wyswietli, to tę tablice źle budujesz. A ze źle budujesz to widać od razu smile.gif
  1. <?php
  2.  
  3. $vat['0']['netto'] = $vat['0']['netto'] + $row['s_kwota'];
  4. $vat['0']['bruto'] = $vat['0']['netto'];
  5.  
  6. ?>
czy jestes pewien ze tak to ma wyglądać? zawsze przypisujesz do indexu '0'. Niezależnie od iteracji. powinienes zmieniac index. na dole zwiekszasz $lp++; .to powinno byc indexem. oczywiscie przed petlą opwinno byc $lp=0;
nastepna rzecz. do $vat['0']['netto'] przypisujesz $vat['0']['netto'] powiekszone o cos tam. a przeciez za pierwszym razem $vat['0']['netto'] nic nie zawiera winksmiley.jpg
moze napisz co chciales osiągnąć, bo to co tu masz to ... sam nie wiem co tu masz winksmiley.jpg
krysk
Zatem tak - $vat['0']['netto'] - to jest wartość netto produktów o stawce VATowskiej 0%, jak by było $vat['3']['netto'] to wartość netto dla produktów ze stawką 3% itd...


Generalnie ja już głupieję - w końcu chyba się skończy na tym, że przepiszę to od nowa smile.gif
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.