Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Invalid argument supplied for foreach()
krysk
post
Post #1





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


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?


--------------------
Krzysztof Wójcik
Zend Certified Engineer
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




niestety komunikat glosi jasno, ze $vat nie jest tablicą.

daj tak:
  1. <?php
  2. print_r($vat);
  3. ?>
by sie dowiedziec co zawiera $vat


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
krysk
post
Post #3





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


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. ?>


--------------------
Krzysztof Wójcik
Zend Certified Engineer
Go to the top of the page
+Quote Post
NetJaro
post
Post #4





Grupa: Zarejestrowani
Postów: 475
Pomógł: 0
Dołączył: 1.04.2005
Skąd: Warszawa

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


Hmm..
Może daj
  1.  <?php
  2. $vat = array();
  3. ?>

Na początku smile.gif
Go to the top of the page
+Quote Post
krysk
post
Post #5





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


Wszystko pięknie - błędu brak, ale tablica jest pusta i nie wykonują się zadania które są w pętli.


--------------------
Krzysztof Wójcik
Zend Certified Engineer
Go to the top of the page
+Quote Post
NetJaro
post
Post #6





Grupa: Zarejestrowani
Postów: 475
Pomógł: 0
Dołączył: 1.04.2005
Skąd: Warszawa

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


Hmm.. masz stworzoną funkcję "sql"? Jeżeli nie, to zamiast tego powinno być "mysql_query"...
Go to the top of the page
+Quote Post
krysk
post
Post #7





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


Tak, oczywiście - jest stworzona.


--------------------
Krzysztof Wójcik
Zend Certified Engineer
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
krysk
post
Post #9





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


Zwraca.


--------------------
Krzysztof Wójcik
Zend Certified Engineer
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
krysk
post
Post #11





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


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


--------------------
Krzysztof Wójcik
Zend Certified Engineer
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 Aktualny czas: 21.08.2025 - 06:42