Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wyświetlenie w pętli.
Forum PHP.pl > Forum > Przedszkole
castagir
Witam


Potrzebuję pomocy w rozwiązaniu takiego problemu.
Pod artykułem chciałbym zamieścić w kolejności komentarze, których treść są pobierane z bazy danych.
Chciałbym osiągnąć taki efekt:
Zadaję pytanie, pobieram dane i zawieram je w zmiennej przy pomocy fetch. Następnie tą zmienną wykonuję w dwóch pętlach. Jedna jest po to aby umieścić dane w przygotowanym szablonie HTML - ta pętla jest zapisana w pliku z treścią logiczną.
Druga natomiast jest pętlą while, która byłaby wpisana w między treścią HTML w pliku z treścią wykonania.

Mam niestety taki problem:
Pobieram niestety tylko dwa wersy z bazy danych i chyba popełniam błąd przy fetch, bo ostateczny efekt wizualny jest taki jaki zamierzałem osiągnąć, lecz zawsze wyświetla mi tylko jeden komentarz - czyli jedną wykonaną dobrze pętle, a dwa komentarze po wywołaniu var_dump, choć w bazie mam więcej.

Tutaj jest treść skryptu:
  1. $pytanie = $polaczenie->prepare("SELECT * FROM `endo_artykuly_komentarze` WHERE id_artykulu=:param1
  2. ORDER BY id_komentarza");
  3. $pytanie->bindValue(':param1', 1);
  4. $pytanie->execute();
  5.  
  6. $wynik = $pytanie->fetch(PDO::FETCH_ASSOC);
  7. echo $liczba_komentarzy = count($pytanie);
  8. for ($i=0; $i<$liczba_komentarzy; $i++) { // tutaj właśnie wykonuje tylko jeden raz prawidłowo pętle
  9. $komentarz[$i] = '
  10. <div class="kom_tab">
  11. <div class="kom_pojemnik">
  12. <table class="kom_autor">
  13. <tr><td>'.$wynik['data'].'</td><td>'.$wynik['autor_komentarza'].'</td><td>napisał:</td></tr>
  14. </table>
  15. <p class="kom_tresc">'.$wynik['tresc'].'</p>
  16. </div>
  17. </div>'; }
  18.  
  19.  
  20. <pre>';
  21. var_dump($pytanie->fetchAll(PDO::FETCH_ASSOC));
  22. </pre>';
  23.  
  24. print_r($komentarz);
  25.  
  26.  
  27. $liczba_komentarzy = count($komentarz);
  28. $i = 0;
  29. while ($i<$liczba_komentarzy) {
  30. echo $komentarz[$i];
  31. $i++; }


A to mi pokazuje var_dump:
  1. array(2) {
  2. [0]=>
  3. array(5) {
  4. ["id_komentarza"]=>
  5. string(1) "2"
  6. ["id_artykulu"]=>
  7. string(1) "1"
  8. ["autor_komentarza"]=>
  9. string(6) "Erigor"
  10. ["data"]=>
  11. string(16) "29.12.2014 18:22"
  12. ["tresc"]=>
  13. string(14) "Dobry artykuł"
  14. }
  15. [1]=>
  16. array(5) {
  17. ["id_komentarza"]=>
  18. string(1) "3"
  19. ["id_artykulu"]=>
  20. string(1) "1"
  21. ["autor_komentarza"]=>
  22. string(8) "Grzesiek"
  23. ["data"]=>
  24. string(16) "29.12.2014 18:36"
  25. ["tresc"]=>
  26. string(11) "Komentarz 2"
  27. }
  28. }

A to print_r:
  1. Array ( [0] =>
  2. 29.12.2014 18:21 Grzesiek napisał:
  3.  
  4. Komentarz


Nie jestem pewien, ale chyba problem tkwi w źle skomponowanej pierwszej pętli albo źle dobieram funkcję fetch.
nospor
raz robisz fetch, raz fetchAll... naprawde nie widzisz roznicy miedzy nimi?
zajrzyj do manuala, zobacz jak sie uzywa fetch, bo teraz uzywasz go bez sensu... sprawdzaj po kolei kazda daną ktora tworzysz.
castagir
Wcześniej używałem różnych kombinacji fetch i fetchAll, lecz z żadną nie udało mi się osiągnąć tego co zamierzałem.

Teraz ten fragment wygląda tak:
  1. $wynik = $pytanie->fetchAll(PDO::FETCH_ASSOC);
  2. echo $liczba_komentarzy = count($pytanie);
  3. for ($i=0; $i<$liczba_komentarzy; $i++) {
  4. $komentarz[$i] = '
  5. <div class="kom_tab">
  6. <div class="kom_pojemnik">
  7. <table class="kom_autor">
  8. <tr><td>'.$wynik[$i]['data'].'</td><td>'.$wynik[$i]['autor_komentarza'].'</td><td>napisał:</td></tr>
  9. </table>
  10. <p class="kom_tresc">'.$wynik[$i]['tresc'].'</p>
  11. </div>
  12. </div>'; }


O tyle jest teraz dobrze, że przynajmniej var_dump wyświetla wszystkie wiersze jakie są w bazie danych.
Nadal wciąż nie potrafię tego rozwiązać.
Turson
  1. echo $liczba_komentarzy = count($pytanie);

tutaj masz policzyć ilośc wyników czyli $wynik, a nie obiekt $pytanie.

A jak już bardzo chcesz liczyć na podstawie obiektu zapytania to
$liczba_komentarzy = $pytanie->rowCount();
castagir
I tego potrzebowałem biggrin.gif

Turson jak zwykle w formie thumbsupsmileyanim.gif
Dzięki chłopaki za pomoc i miłego dnia życzę.
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.