Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z pętlami WHILE
Forum PHP.pl > Forum > Przedszkole
camelx
No i znów mam problem. Zrobiłem coś takiego:
  1. <?php
  2.  
  3. while( warunek ) 
  4. {
  5.  
  6. while( warunek ) 
  7. { 
  8.  
  9. } 
  10. } 
  11. ?>

Pętla WHILE, która jest w środku działa ok, ale ta pierwsza wyświetla mi tylko jeden (pierwszy) rekord z bay danych (a powinna kilka).
Dzlaczego tak się dzieje ?
ARJ
podaj kod php, podałeś działanie funkcji while. jak podasz kod to będzie wiadomo co jest źle.
camelx
Proszę bardzo, oto kod:
  1. <?php
  2. $smarty = new Smarty;
  3.  
  4. $query = &#092;"SELECT *
  5.  FROM kategoria 
  6.  order by cat_id &#092;";
  7.  
  8. $qresult = mysql_query($query, $mresult);
  9. mysql_num_rows($qresult);
  10.  
  11. while ($cat=mysql_fetch_array($qresult)){
  12. echo $cat['cat_name']; //to niepotrzebne
  13. $cat_id = $cat['cat_id'];
  14.  
  15. $query = &#092;"SELECT *
  16.  FROM link 
  17.  WHERE cat_id = $cat_id
  18.  order by link_id &#092;";
  19.  
  20. $qresult = mysql_query($query, $mresult);
  21. mysql_num_rows($qresult);
  22.  
  23. ob_start(); //buffor start
  24. while ($row=mysql_fetch_array($qresult)){
  25.  
  26. if($row['site_name'] != '' & $row['site_url'] != '')
  27. {echo '• <b><a href=http://'.$row['site_url'].' target=_blank>'.$row['site_name'].'</a></b> ('.$row['site_url'].')<br />';}
  28.  
  29. elseif(!$row['site_name'] & $row['site_url'] != '')
  30. {echo '• <a href=http://'.$row['site_url'].' target=_blank>'.$row['site_url'].'</a><br />';}
  31.  
  32. } //
  33. } // tutaj się kończą WHILE
  34. $b = ob_get_contents();
  35. ob_end_clean(); //buffor stop
  36.  
  37. $smarty->assign(array(
  38. 'URL_FULL' => $b,
  39. ));
  40.  
  41. $smarty->display('index_body.html');
  42. ?>

Dodam, że to nie jest wina bufora, bo próbowałem też bez niego.
wallace
przy drugim zapytaniu "nadpisujesz" identyfikator wyniku z pierwszego zapytania ( $qresult )
sobstel
najlepiej doczytaj DOKLADNIE co robi funkcja mysql_fetch_array.

twoj kod dziala tak :
I-wszy while pobiera pierwszy rząd z resourca $qresult, potem jest II-gi while, ktory pobiera rzedy az $qresult sie "wyczerpie", czyli odczytuje cala reszte. gdy nastepuje powrot do sprawdzenia warunkow pierwszego while w $qresult juz nic nie ma wiec jest FALSE i program leci dalej.
ARJ
z tego co mi się wydaje to @wallace ma rację
  1. <?php
  2. $smarty = new Smarty;
  3.  
  4. $query = &#092;"SELECT *
  5.  FROM kategoria 
  6.  order by cat_id &#092;";
  7.  
  8. $qresult = mysql_query($query, $mresult); // tworzysz zmienna qresult
  9. mysql_num_rows($qresult);
  10.  
  11. while ($cat=mysql_fetch_array($qresult)){  //uzywasz qresult
  12. echo $cat['cat_name']; //to niepotrzebne
  13. $cat_id = $cat['cat_id'];
  14.  
  15. $query = &#092;"SELECT *
  16.  FROM link 
  17.  WHERE cat_id = $cat_id
  18.  order by link_id &#092;";
  19.  
  20. $qresult = mysql_query($query, $mresult); //tuta zamiast tworzyc qresult zamieniasz to utworzone wczesniej
  21. //rozwiazanie daj $qresult2
  22. mysql_num_rows($qresult);
  23.  
  24. while ($row=mysql_fetch_array($qresult)){
  25. //reszta kodu
  26. }
  27. ?>
sobstel
racja. nie zauwazylem drugiego qresult=
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.