Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML] 3 Kolumny w tabeli przy niewiadomej ilości rekordów
Forum PHP.pl > Forum > Przedszkole
BORG
Witam. Mam problem. Robię galerie zdjęć, i chciałbym aby miniaturki były wyświetlane na stronie w 3 kolumnach, tj:
ZDJĘCIE ZDJĘCIE ZDJĘCIE
ZDJĘCIE ZDJĘCIE ZDJĘCIE
itd...
z tym, że ilość rekordów jest nieograniczona i nie potrafię sobie poradzić używając tabeli. Oto kod odpowiadający za wyświetlanie miniaturek:
  1. <?php
  2. $q = mysql_query("SELECT * FROM `zdjecia` WHERE `kategoria`='${_GET[i]}'");
  3. WHILE ($a = mysql_fetch_array($q))
  4.     {
  5.     if ($a[wysokosc] <= $a[szerokosc] )
  6.          {
  7.             $p = 100 / $a[szerokosc];
  8.             $l = $a[wysokosc] * $p;
  9.             $l = round($l, 0);
  10.             echo '<table style=" display: inline; border-style: dotted;"><tr>
  11. <td width=100 height=100 bgcolor="#eeeeee">
  12. <img width = 100 height = '.$l.' src="upload/'.$a[plik].'"></td></tr></table>
  13. ';
  14.          }    
  15.          else
  16.          {
  17.             $p = 100 / $a[wysokosc];
  18.             $l = $a[szerokosc] * $p;
  19.             $l = round($l, 0);
  20.             echo '<table style=" display: inline; border-style: dotted;"><tr>
  21. <td width=100 height=100 bgcolor="#eeeeee"><img width = '.$l.' height = 100 src="upload/'.$a[plik].'"></td></tr></table>';
  22.          }
  23.     }
  24. ?>


Jak widać udało mi się zrobić aby tabele były w rzędzie, ale jak zrobić, że po 3 tabelach zaczyna się następny wiersz i kolejne 3 zdjęcia?
sticker
jak będziesz robił tabele za każdym wierszem to wyjdzie Ci bardzo nieładny kod html Zamiast tego moze zrob tak: (przyklad w pseudokodzie)
  1. <?php
  2. echo "pobierz dane z bazy danych i zapisz je do jakiejs zmiennej np wynik";
  3.  
  4. echo "poczatek tabelki";
  5. for( $i=0;$i < count($wynik);$i++){
  6. if($i%3==0){
  7.  echo "<tr>";
  8. }
  9. echo "<td>".$wynik['cos']."</td>";
  10.  
  11. if($i%3==2){
  12.  echo "</tr>";
  13. }
  14.  
  15. }
  16.  
  17.  
  18. echo "koniec tabelki";
  19. ?>
drzalek
Wystarczy wywalić tagi <table> poza pętle i operować na samych komórkach, co trzecią komórkę wstawiasz <tr>, aby przejść do nowego rekordu tabeli i wszystko. <tr> wstawiasz po uprzednim sprawdzeniu warunku
  1. <?php
  2. if($i%3==0) echo '</tr><tr>';
  3. ?>
BORG
Cytat(sticker @ 17.02.2009, 13:43:34 ) *
jak będziesz robił tabele za każdym wierszem to wyjdzie Ci bardzo nieładny kod html Zamiast tego moze zrob tak: (przyklad w pseudokodzie)
  1. <?php
  2. echo &#092;"pobierz dane z bazy danych i zapisz je do jakiejs zmiennej np wynik\";
  3.  
  4. echo &#092;"poczatek tabelki\";
  5. for( $i=0;$i < count($wynik);$i++){
  6. if($i%3==0){
  7.  echo &#092;"\";
  8. }
  9. echo &#092;"\".$wynik['cos'].\"\";
  10.  
  11. if($i%3==2){
  12.  echo &#092;"\";
  13. }
  14.  
  15. }
  16.  
  17.  
  18. echo &#092;"koniec tabelki\";
  19. ?>


A nie da się jakoś sprawdzić czy $i podzielone przez 3 jest liczbą całkowitą? Byłoby wtedy uniwersalne dla dowolnej ilości rekordów.
ddiceman
I jest jeszcze opcja wyciagania po 3 wyniki, ale to podaje tylko jako inspiracje a nie gotowy produkt:
  1. <table>
  2. <?php
  3. $q = mysql_query("SELECT * FROM `zdjecia` WHERE `kategoria`='${_GET[i]}'");
  4. WHILE ($a = mysql_fetch_array($q) || $b = mysql_fetch_array($q) || $c = mysql_fetch_array($q))
  5.    {
  6. ?>
  7.    <tr>
  8.       <td><?php echo $a!= false ? '<img src="upload/'.$a['plik'].'" alt="" />' : '&nbsp;'; ?></td>
  9.       <td><?php echo $b!= false ? '<img src="upload/'.$b['plik'].'" alt="" />' : '&nbsp;'; ?></td>
  10.       <td><?php echo $c!= false ? '<img src="upload/'.$c['plik'].'" alt="" />' : '&nbsp;'; ?></td>
  11.    </tr>
  12. <?
  13.    }
  14.  
  15. ?>
  16. </table>


Cytat(BORG @ 17.02.2009, 13:53:58 ) *
A nie da się jakoś sprawdzić czy $i podzielone przez 3 jest liczbą całkowitą? Byłoby wtedy uniwersalne dla dowolnej ilości rekordów.


  1. <?php
  2. if($liczba %3 == 0) echo 'podzielna przez 3 bez reszty';
  3. else echo 'niepodzielna przez 3 bez reszty';
  4. ?>
drzalek
  1. <table style=" display: inline; border-style: dotted;"><tr>
  2.  
  3. <?php
  4. $i==1;
  5. $q = mysql_query("SELECT * FROM `zdjecia` WHERE `kategoria`='${_GET[i]}'");
  6. WHILE ($a = mysql_fetch_array($q))
  7.    {
  8.    if ($a[wysokosc] <= $a[szerokosc] )
  9.         {
  10.            $p = 100 / $a[szerokosc];
  11.            $l = $a[wysokosc] * $p;
  12.            $l = round($l, 0);
  13.            echo '<td width=100 height=100 bgcolor="#eeeeee">
  14.                <img width = 100 height = '.$l.' src="upload/'.$a[plik].'"></td>';
  15.            if($i%3==0) echo '</tr><tr>';
  16.         }    
  17.         else
  18.         {
  19.            $p = 100 / $a[wysokosc];
  20.            $l = $a[szerokosc] * $p;
  21.            $l = round($l, 0);
  22.            echo '<td width=100 height=100 bgcolor="#eeeeee"><img width = '.$l.' height = 100 src="upload/'.$a[plik].'">';
  23.            if($i%3==0) echo '</tr><tr>';
  24.         }
  25.    }
  26. ?>
  27.  
  28. </tr></table>


Wystarczy tylko taka modyfikacja Twojego kodu, po co zmieniać wszystko, jeśli skrypt Ci działał. A i nie ma potrzeby sprawdzania zmiennej $i po żadnym innym względem niż podany.

  1. <table style=" display: inline; border-style: dotted;"><tr>
  2.  
  3. <?php
  4. $i==1;
  5. $q = mysql_query("SELECT * FROM `zdjecia` WHERE `kategoria`='${_GET[i]}'");
  6. WHILE ($a = mysql_fetch_array($q))
  7.    {
  8.    if ($a[wysokosc] <= $a[szerokosc] )
  9.         {
  10.            $p = 100 / $a[szerokosc];
  11.            $l = $a[wysokosc] * $p;
  12.            $l = round($l, 0);
  13.            echo '<td width=100 height=100 bgcolor="#eeeeee">
  14.                <img width = 100 height = '.$l.' src="upload/'.$a[plik].'"></td>';
  15.            
  16.         }    
  17.         else
  18.         {
  19.            $p = 100 / $a[wysokosc];
  20.            $l = $a[szerokosc] * $p;
  21.            $l = round($l, 0);
  22.            echo '<td width=100 height=100 bgcolor="#eeeeee"><img width = '.$l.' height = 100 src="upload/'.$a[plik].'">';
  23.            
  24.         }
  25.    if($i%3==0) echo '</tr><tr>';
  26.    }
  27. ?>
  28.  
  29. </tr></table>


Trochę bez sensu dałem w poprzednim kodzie dwa razy tego samego if'a, choć też by działał, ale po co dwa razy jak można raz smile.gif

Zapomniałem jeszcze dodać w pętli na samym końcu $i++, bez tego raczej skrypt nie zadziała jak powinien smile.gif
BORG
No już jakoś działa, z tym, że to: $i%3==0 coś nie działa. W pierwszym wierszu jest tylko jedno zdjęcie, od następnej leci już normalnie.
Rozwiązałem problem: nie $i==1; tylko $i=1; biggrin.gif
drzalek
Fakt mój błąd, grunt, że sobie poradziłeś biggrin.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.