Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] Problem z pobieraniem w pętli
The White River ...
post 5.08.2007, 11:51:35
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 5.08.2007

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


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.


--------------------
*&%$&%@^#$
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
harek
post 5.08.2007, 12:02:38
Post #2





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 5.08.2003

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


  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 ?
Go to the top of the page
+Quote Post
The White River ...
post 5.08.2007, 16:10:37
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 5.08.2007

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


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

Ten post edytował The White River Kid 5.08.2007, 16:11:20


--------------------
*&%$&%@^#$
Go to the top of the page
+Quote Post
Kicok
post 5.08.2007, 18:22:06
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


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


--------------------
"Sumienie mam czyste, bo nieużywane."
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:28