Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] WHILE inkrementacja co 2
Forum PHP.pl > Forum > PHP
ublizzard
Witam,
mam taki problem, mój kod wygląda aktualnie tak:
  1. $zapytanie = "SELECT * FROM `kategorie`";
  2. $idzapytania = mysql_query($zapytanie);
  3. echo '<table>';
  4. while ($wiersz = mysql_fetch_row($idzapytania)) {
  5. echo '<tr><td>'. $wiersz[1] .'</td></tr>';
  6. }
  7. echo '</table>';


Chciałbym, żeby dane były wyświetlane w dwóch kolumnach:
  1. $zapytanie = "SELECT * FROM `kategorie`";
  2. $idzapytania = mysql_query($zapytanie);
  3. echo '<table>';
  4. while ($wiersz = mysql_fetch_row($idzapytania)) {
  5. echo '<tr><td>'. $wiersz[1] .'</td><td>'.$wiersz+1[1].'</td></tr>';
  6. }
  7. echo '</table>';

Oczywiście powyższy kod jest zmyślony, ale nie wiem w jaki sposób to, czy ktoś pomoże mi zastąpić $wiersz+1 czymś sensownym?
Wiem, że można by to zrobić komendą FOR, ale zastanawia mnie, czy coś takiego da się zrobić za pomocą WHILE?
PiotrekM
  1. $zapytanie = "SELECT * FROM `kategorie`";
  2. $idzapytania = mysql_query($zapytanie);
  3. echo '<table>';
  4. $i = 0;
  5. while ($wiersz = mysql_fetch_row($idzapytania)) {
  6. echo '<tr><td>'. $wiersz[1] .'</td></tr>';
  7.  
  8. if($i++ == 2)
  9. {
  10. echo '<tr><td>'. $wiersz[1] .'</td></tr>';
  11. $i == 0;
  12. }
  13. }
  14. echo '</table>';
lukaskolista
Cytat(PiotrekM @ 21.12.2011, 21:48:53 ) *
  1. $zapytanie = "SELECT * FROM `kategorie`";
  2. $idzapytania = mysql_query($zapytanie);
  3. echo '<table>';
  4. $i = 0;
  5. while ($wiersz = mysql_fetch_row($idzapytania)) {
  6. echo '<tr><td>'. $wiersz[1] .'</td></tr>';
  7.  
  8. if($i++ == 2)
  9. {
  10. echo '<tr><td>'. $wiersz[1] .'</td></tr>';
  11. $i == 0;
  12. }
  13. }
  14. echo '</table>';

jak juz to
  1. if(++$i === 2)
kaem
Trochę nie bardzo te wasze kody, bo przecież mają być dwie kolumny w jednym wierszu. A ponadto najważniejsze: wartość w drugiej kolumnie ma być elementem o indeksie 1 z następnego wiersza.
Ja wynik zapytania zamienił bym na tablicę i zrobił to w pętli for, bo po co kombinować.
thek
Kaem dobrze popowiada i co ważniejsze, oddziela to logikę kodu od jej prezentacji, co obecnie powinno już być standardem z racji na późniejszą łatwość konserwacji i debugu. Jeśli jednak jesteś uparty i chcesz się tak bawić to możesz cały czas jechać na while i if w środku.
  1. echo '<table>';
  2. while ($wiersz = mysql_fetch_row($idzapytania))
  3. {
  4. echo '<tr><td>';
  5. //róbta co chceta z pierwszą kolumną;
  6. echo '</td>';
  7. $wiersz = mysql_fetch_row($idzapytania);
  8. if ($wiersz)
  9. {
  10. echo '<td>';
  11. //róbta co chceta z drugą kolumną
  12. echo '</td>';
  13. }
  14. else
  15. {
  16. echo '<td></td></tr>';
  17. break;
  18. }
  19. echo '</tr>';
  20. }
  21. echo '</table>';

While sobie spokojnie leci i bierze rekord. Uzupełnia kolumnę. Potem bierze następny i jeśli jest tam coś to wali drugą kolumnę, a jeśli nie, uzupełnia pustą komórką, żeby nie burzył się walidator o nieprawidłową liczbę kolumn w wierszu i wyskakuje z pętli. Bez problemu dzierga, bo mysql_fetch_row inkrementuje prawidłowo wskaźnik wyniku. Jeśli więc nawet pobrany w IF zostanie ostatni wynik parzysty, to WHILE przy próbie pobrania nowego zwróci FALSE i nie nastąpi wejście do pętli nawet.
ublizzard
kaem i thek, macie rację, kod napisany z pętlą while jest niezbyt przejrzysty i lepiej wygląda z for. Ale dzięki za odpowiedzi smile.gif
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.