Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dwie petle - dziwny problem
Forum PHP.pl > Forum > PHP
InosU31
Witam

Nie wiedzialem jak zatutulowac ten temat bo mam problem ktorego nie rozumię....

posiadam taki kod:

  1. $result = $dbase->get_query("
  2. SELECT * FROM panel WHERE user='au'
  3. ");
  4.  
  5. if ($result)
  6. {
  7. $table_name = strtolower($result[0]['naglowek']);
  8.  
  9. $news_login->tassign['tytul'] = "<strong>Panel</strong>";
  10. ");
  11. $i = 0;
  12.  
  13. while ($result[$i]['id_ramki'])
  14. {
  15.  
  16. $result_linki = $dbase->get_query("
  17. SELECT * FROM linki Where id_ramki = '".$result[$i]['id_ramki']."' and user ='au'
  18. ");
  19. echo $result[$i]['id_ramki']."<br>";
  20.  
  21. if ($result_linki)
  22. {
  23. $news_login->tassign['menu_roz'] .= "<li><a href=\"?panel=1\">".$result[$i]['naglowek']."</a>";
  24. foreach ($result_linki as $record_linki)
  25. {
  26.  
  27. echo $record_linki['name_link']."<br>";
  28.  
  29. $pod_menu_roz->tassign['pod_menu_roz'] .= "<li><a href=\"?panel=#\">".$record_linki['name_link']."</a></li>";
  30.  
  31. }
  32. $news_login->tassign['menu_roz'] .= $pod_menu_roz->parse("panel/common/pod_menu_rozwijane.html");
  33.  
  34. }
  35. else
  36. {
  37. $news_login->tassign['menu_roz'] .= "<li><a href=\"?panel=1\">".$result[$i]['naglowek']."</a></li>";
  38.  
  39. }
  40.  
  41.  
  42. $i++;
  43.  
  44. }
  45.  
  46. }
  47.  
  48. }
  49.  
  50. $main->tassign['news_login'] = $news_login->parse("panel/common/menu_rozwijane.html");
  51. $page->tassign['main'] = $main->parse("panel/common/content.html");


jak wyswietlam echo ktore widac w tym kodzie to wynik jest prawidlowy czyli:

1
Wy?wietl
2
3
Obecnie
Ostatnie 30dni
Zakres dni
4
Zobacz
7

liczby to linki z menu a napisy to linki z rozwiniecia tego menu. Jak widac echo wyswietla prawidlowo wynik tych petli,menu tez sie dobrze wyswietla ale to rozwiniecie juz nie... pokaze to na przykladzie:

1
Wy?wietl
2
3
Wyswietl ---- tego nie powinno tu byc
Obecnie
Ostatnie 30dni
Zakres dni
4
Wyswietl ---tu tego tez nie
Obecnie ---tu tego tez nie
Ostatnie 30dni ---tu tego tez nie
Zakres dni ---tu tego tez nie
Zobacz
7

Jak widac z petli foreach powtarzaja sie wyniki co jest dla mnie niezrozumiale zwlaszcza ze za kazdym razem kiedy petla wraca na gore pobiera od nowa dane z bazy linki ale bez tych wczesneijszych wynikow. Dlaczego sie tak dzieje? gdzie robie blad?

z gory dzieki za pomoc

Pozdrawiam
tolomei
Witaj.

Proszę popraw formatowanie kodu.
Ale zrób to w nowym poście bo HUMOR się nie uda biggrin.gif

Pozdrawiam.
InosU31
nie wiem czy o to chodzilo ale poprawilem. Jaki humor? ja sie powaznie pytam i nie widze w tym nic smiesznego....

uff poradzilem sobie:-)

zamiast parsowac plik html - przez petle wyniki mi sie powtarzaly choc nadal tego nie rozumiem - wystarczylo zrobic tak:
  1. $news_login->tassign['menu_roz'] .= "<li><a href=\"?panel=1\">".$result[$i]['naglowek']."</a>";
  2. $news_login->tassign['menu_roz'] .= "<ul>";
  3. foreach ($result_linki as $record_linki)
  4. {
  5. $news_login->tassign['menu_roz'] .= "<li><a href=\"?panel=#\">".$record_linki['name_link']."</a></li>";
  6. }
  7. $news_login->tassign['menu_roz'] .= "</ul></li>";
  8. //$news_login->tassign['menu_roz'] = $pod_menu_roz->parse("panel/common/pod_menu_rozwijane.html");
!*!
Koledze wyżej chodziło o to że masz niezły burdel w kodzie wink.gif
Przeczytaj ten temat Temat: Najczestsze bledy w PHP i antywzorce

Później sprawdź przez var_dump()co zawiera ta zmienna w pętli
  1. while ($result[$i]['id_ramki'])

Bo jak na moje oko, to jest źle.
A najlepiej to jakbyś przeczytał jakie pętle są w php, oraz jak ich używać. http://pl.wikibooks.org/wiki/PHP/Struktury_kontrolne
I jeśli dobrze Cie zrozumiałem, to powinieneś napisać to rekurencyjnie (poszukaj pod tą frazą w wyszukiwarce, było duż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.