Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Problem z pobieraniem w pętli
Forum PHP.pl > Forum > Przedszkole
The White River Kid
Oto kod, który wymodziłem:

  1. <?php
  2.  
  3. include ("./functions/sesja.php");
  4.  
  5. FUNCTION blog()
  6. {
  7. polacz_z_baza();
  8.  
  9. $szukaj = mysql_query("SELECT * FROM blog ORDER BY id DESC");
  10. mysql_close();
  11.  
  12. echo $szukaj.'<br />';
  13. echo mysql_error();
  14.  
  15. $blog = mysql_fetch_array($szukaj) OR die (mysql_error());
  16.  
  17. while ($blog) {
  18.  
  19. IF ($blog['widoczny']) {
  20. echo '<div class="temat">'.$blog['tytul'].'</div>';
  21. echo '<div class="notka">'.$blog['notka'].'</div>';
  22. IF (!empty($blog['podpis'])) {
  23. echo '<div class="podpis">'.$blog['podpis'].'</div>';
  24. }
  25. echo '<div class="data">'.$blog['dzien'].'-'.$blog['miesiac'].'-'.$blog['rok'].', '.$blog['godzina'].'</div>';
  26. IF ($blog['czy_komentarz']) {
  27. echo '<div class="komentarz">skomentuj (x)</div>';
  28. }
  29. echo '<hr>';
  30. }
  31.  
  32. }
  33.  
  34. }
  35.  
  36. ?>

Jeżeli wrzucę to co w while bez niego, wyświetla pierwszy wynik, natomiast po wrzuceniu w pętlę, to w nieszkończoność wyświetla pierwszy wynik.
Kiedy robiłem w osobnym pliku function notka(), gdzie była zawartość while'a, to z kolei podawał, że przekroczył czas 10 sekund.

Dodam jeszcze, że jest jeszcze pole id (auto_increment), którego nie wyświetlam.
Od wczoraj szukam po necie i forum, i wciąż mi coś umyka.
harek
  1. <?php
  2.  
  3. include ("./functions/sesja.php");
  4.  
  5. function blog()
  6. {
  7. polacz_z_baza();
  8.  
  9. $szukaj = mysql_query("SELECT * FROM blog ORDER BY id DESC");
  10.  
  11. echo $szukaj.'<br />';
  12.  
  13. $blog = mysql_fetch_array($szukaj) or die (mysql_error());
  14.  
  15.  
  16. for($i=0;$i<count($blog['widoczny']);$i++){
  17. if ($blog['widoczny']) {
  18.  
  19. echo '<div class="temat">'.$blog['tytul'][$i].'</div>';
  20. echo '<div class="notka">'.$blog['notka'][$i].'</div>';
  21. if (!empty($blog['podpis'])) {
  22. echo '<div class="podpis">'.$blog['podpis'][$i].'</div>';
  23. }
  24. echo '<div class="data">'.$blog['dzien'][$i].'-'.$blog['miesiac'][$i].'-'.$blog['rok'].', '.$blog['godzina'].'</div>';
  25. if ($blog['czy_komentarz']) {
  26. echo '<div class="komentarz">skomentuj (x)</div>';
  27. }
  28. echo '<hr>';
  29. }
  30. }
  31.  
  32.  
  33. }
  34.  
  35. ?>



Myślę że o to Ci chodzi ?
The White River Kid
Wyrzucił tylko pierwszy wynik, do tego z każdego rekordu (za wyjątkiem roku i godziny, przy czym rok jest na int postawiony) wziął po jednej literce.
Myślałem, że jak się w while wrzuci tablicę asocjacyjną, to przegląda po linijce aż do wyczerpania.


[EDIT]
Dobra, mam.

Zamieniłem:

  1. $blog = mysql_fetch_array($szukaj) OR die (mysql_error());
  2.  
  3. while ($blog) { //...
  4.  
  5. }


Na:

  1. while ($blog = mysql_fetch_assoc($szukaj)) { //...
  2.  
  3. }


Wydawało mi się, że powinno być to tożsame. No ale...
Kicok
Cytat
Myślałem, że jak się w while wrzuci tablicę asocjacyjną, to przegląda po linijce aż do wyczerpania.

Wydawało mi się, że powinno być to tożsame. No ale...


Przy każdej iteracji pętla while sprawdza, czy warunek (to co jest w nawiasie) zwraca true. Jeśli tak, to wykonywana jest kolejna iteracja i znowu sprawdzany jest warunek.
Tam nie ma żadnej magii z przeglądaniem po linijce, itp. Jest tam po prostu zwykłe rzutowanie typów, a dokładnie:

1. Pętla nieskończona
  1. <?php
  2.  
  3. $blog = mysql_fetch_assoc( $szukaj );
  4. // Zmienna $blog zawiera teraz tablicę asocjacyjną z pierwszym wierszem
  5. // wyniku zapytania. Funkcja mysql_fetch_assoc( $szukaj ) wykonana została raz.
  6.  
  7. while( $blog ) // Tablica taka podczas rzutowania na boolean zwraca: true
  8. {
  9. // Jakiś kod, zmienna $blog nie jest modyfikowana
  10. }
  11.  
  12. ?>



2. Poprawny kod
  1. <?php
  2.  
  3. while( $blog = mysql_fetch_assoc( $szukaj ) )
  4. // Przy każdej iteracji pętli sprawdzana jest zmienna $blog. 
  5. // Ale żeby ją sprawdzić najpierw musi ona przyjąć wartość zwróconą przez funkcję 
    mysql_fetch_assoc( $szukaj )
  6. // Funkcja ta wykonywana jest tyle razy, ile sprawdzany jest warunek pętli
  7. // Jeśli zwraca ona jakiś wiersz z wyniku zapytania, to po rzutowaniu na boolean m
    amy wartość: true
  8. // Jeśli wyniki zapytania się skończyły, to funkcja ta zwraca false i pętla jest p
    rzerywana
  9. {
  10.  
  11. // Jakiś kod
  12. // Zmienna $blog nie jest modyfikowana wewnątrz pętli (ale jest w warunku)
  13. }
  14.  
  15. ?>
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.