Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pętlę (lub co innego), ucinają jeden wynik
Forum PHP.pl > Forum > Przedszkole
thomson89
Witam!

Kombinuję już od 3h nad tym i już nie mogę. Proszę o pomoc!

Niżej podam kod, który zwraca wartości pobrane z bazy i przetwarza je. Tworzę z danych z bazy, kwadraciki z danymi produktów. Kwadratów jest 12 na stronę - 4 linijki po 3 takie "elementy". Problem polega na tym, że ostatni "element" z ostatniej linijki nie jest wyświetlany. Próbowałem już z poprawianiem pętli, zmianami numerków i liczb. Ale to na nic. Wyświetlając także zmienną $zew_licznik, wychodziło na to, że kod dla 12 elementu się wykonuje.

  1. $polaczenie = new baza;
  2. $query = 'SELECT * FROM `produkty` LIMIT '.$start.', '.$this -> ile_na_stronie;
  3. $wynik1 = mysql_query($query);
  4. $query = 'SELECT * FROM `produkty`';
  5. $wynik2 = mysql_query($query);
  6.  
  7. $out = array();
  8. while($row = mysql_fetch_assoc($wynik1)) {
  9. $out[] = $row;
  10. }
  11.  
  12. $textResult .= '</p><p class="zdjecia">
  13. <table class="produkty">';
  14.  
  15. $ile = mysql_num_rows($wynik1);
  16. $ile = ceil($ile/3);
  17. $zew_licznik = 1;
  18. $i = 1;
  19. while($i <= $ile)
  20. {
  21. $textResult .= '<tr>';
  22. $c = 1;
  23. while($c <= 3)
  24. {
  25. if($out[$zew_licznik] != '')
  26. {
  27. $plik = file_get_contents($this -> szablon_produkt);
  28. $plik = str_replace('<cena>', $out[$zew_licznik]['cena'], $plik);
  29. $plik = str_replace('<symbol>', $out[$zew_licznik]['nazwa'], $plik);
  30. $plik = str_replace('<opis>', $out[$zew_licznik]['opis'], $plik);
  31.  
  32. //obrazki
  33. $nazwa = $out[$zew_licznik]['nazwa'];
  34. $nazwa = preg_replace('/[^a-z ]+/i', '', $nazwa);
  35. $nazwa = str_replace(' ', '', $nazwa);
  36. $nazwa = strtolower($nazwa);
  37. $plik = str_replace('<obrazek>', 'http://www.gl-art.pl/sklep/produkty/'.$nazwa.'.jpg', $plik);
  38.  
  39. $textResult .= $plik;
  40.  
  41.  
  42. }
  43. $c++;
  44. $zew_licznik++;
  45.  
  46. }
  47. $textResult .= '</tr>';
  48. $i++;
  49. }
  50.  
  51. $textResult .= '</table>';

  1. <td><img height="150" src="<obrazek>"><strong>Cena:</strong> <cena><br><strong>Nazwa:</strong> <symbol><br><strong>Opis:</strong> <opis><br><br><span class="linki"><a href="<link>">Więcej ?</a></span></td>
vokiel
Po pierwsze, to te drugie zapytanie jest tu chyba niepotrzebne.

Po drugie po co zliczasz ilość zwróconych rekordów, skoro masz tablicę $out, w której masz te produkty. Podlicz liczbę wierszy w tej tablicy. W końcu to z tych danych później korzystasz.

Pokaż jaką wartość ma zmienna $ile z linii 15 i linii 16.

W ogóle to co to za dziwne konstrukcje. Po co Ci tutaj aż dwie pętle while? Masz tablicę elementów, chcesz co trzy elementy przechodzić do nowej linii, to weź zrób to coś jak tak (warunek z if może trzeba będzie na końcu umieścić, nie sprawdzałem, a późno już):
  1. $i = 0;
  2. foreach ($out as $item){
  3. if ($i%3==0){
  4. // trzeci element czyli np
  5. echo '</tr><tr>';
  6. }
  7. // tutaj Twoje wyświetlanie, z tym, że zamiast $out[$zew_licznik]['cena'] używasz $item['cena']
  8. $i++;
  9. }


edit: Można zacząć licznik od 1, albo dodać w warunku:
  1. if ($i%3==0 && $i!=0){}
glh
Tylko powierzchownie przyglądnąłem się temu, nie testowałem nic i będę strzelałsmile.gif

Zmienna out jest tablicą, a tablice liczone są od zera.
Tymczasem u Ciebie pętla zaczyna od elementu o indeksie 1. Może tu tkwi problem - w zmiennej zew_licznik.
thek
I po co tak męczyć się? Nie prościej zrobić zabawę z modulo? Na starcie sprawdzanie czy licznik osiągnął określona wartość. Jeśli tak to zamknij dotychczasowy <tr> i otwórz nowy. Kod skrócisz o minimum kilkanaście linii.

EDIT: Vokiel mnie ubiegł... I IF ma być na samym początku. Musi jednak wyeliminować pierwsze przejście pętli bo mu wstawi całkowicie pusty <tr> bez jakichkolwiek <td> wewnątrz.
thomson89
glh, rozwiązał problem. Oczywiście dziękuje za propozycje zmian.
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.