Następny wiersz w pętli po spełnieniu warunku

Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
bielu000
Stały Bywalec
Stały Bywalec
Posty: 84
Dołączył(a): piątek, 8 maja 2009, 14:54

Następny wiersz w pętli po spełnieniu warunku

Post przez bielu000 »

Witam mam taki malutki problem, być może rozwiązanie może okazać się banalne, ale siedzę dziś już cały dzień przy komputerze i być może zmęczenie nie pozwala mi wymyślić sensownego rozwiązania ;)

A więc tak mam sobie bazę danych w, której jest np. 10 rekordów.

Napisałem sobie pentelkę, która pobiera dane z tej bazy danych i wyświetla je.

Tutaj jest fragment kodu - najistotniejszy

Code: Zaznacz cały

for ($i = 0; $i < mysql_num_rows($gallery); $i++)
              {
               $row = mysql_fetch_array($gallery);
               echo "<td><a href='../photos/".$row['link']."'> <img src='../photos/".$row['link']."' width='200px' height='200px' border='1'/></a><br /><a href='index_pa.php?go=gallery&gallery_name=".$gallery_name."&delete=".$row['id']."'>Usun</a></td>\n";

               if ($i>1 && $i % 3 == 0)
                {
                 echo "</tr>\n<tr>\n";
                }
              }
Wszystko niby pięknie, ładnie działa, ale problem pojawia się przy tej ostatniej instrukcji if.
Mianowicie chciałbym aby po wczytaniu 3 rekordów nastąpiło przejście do następnego wiersza. I tak w kółko - wyświetla 3 rekordy, następna linia, kolejne 3 rekordy, następna linia, itd
Dałem taki warunek, że po każdym wczytaniu przez pętlę rekordu do $i dodawane jest 1 ($i++), jeśli zmienna osiąga wartość większą niż 3 i w dodatku przy dzieleniu przez 3 reszta wynosi 0 następuje przejście do następnego wiersza. Dla mnie wydaje się to logiczne.
Bo zauważmy:

Gdy w tabeli znajdują się 3 rekordy zmienna $i przyjmuje wartość 3 ----> 3/3 =1 r=0 przejście do następnego wiersza bo warunek spełniony
Gdy w tabeli znajduje się 6 rekordów zmienna $i przyjmuje wartość 6 ---> 6/3 = 2 r=0 przejście do następnego wiersza bo warunek spełniony
Gdy w tabeli znajduje się 9 rekordów zmienna $i przyjmuje wartość 9 ---> 9/3 = 3 r=0 przejście do następnego wiersza bo warunek spełniony
Gdy w tabeli znajduje się 10 rekordów zmienna przyjmuje wartość 10 ---> 10/3 = 3,(33) r!=0 warunek niespełniony

Teoretycznie niby to działa, tylko jest jedno małe ale, dopiero po wyświetleniu 4(nie 3 rekordów!) następuje przejście do następnego wiersza. Gdzie tu jest problem?
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Następny wiersz w pętli po spełnieniu warunku

Post przez Morfidon »

Skrypt działa Ci dobrze, problem polega na tym, że nie bierzesz pod uwagę faktu, że najpierw wyświetlasz jeden rekord... Wyświetlanie daj po warunku a nie przed warunkiem ;)
bielu000
Stały Bywalec
Stały Bywalec
Posty: 84
Dołączył(a): piątek, 8 maja 2009, 14:54

Re: Następny wiersz w pętli po spełnieniu warunku

Post przez bielu000 »

Zmieniłem troszkę warunek z tej instrukcji if na

Code: Zaznacz cały

if ($i % 3 == 2)
{.........}
I śmiga dobrze ;)
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Następny wiersz w pętli po spełnieniu warunku

Post przez Morfidon »

Jak coś śmiga dobrze, a nie wiesz czemu to w programowaniu nie oznacza nic dobrego ;)

Zrób tak jak powiedziałem, bo tamta linia wykonała się za wcześnie za pierwszym razem.
Post Reply