Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML] 3 Kolumny w tabeli przy niewiadomej ilości rekordów
BORG
post
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 18.12.2006

Ostrzeżenie: (0%)
-----


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?

Ten post edytował BORG 17.02.2009, 13:27:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
sticker
post
Post #2





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował sticker 17.02.2009, 13:43:58
Go to the top of the page
+Quote Post
drzalek
post
Post #3





Grupa: Zarejestrowani
Postów: 170
Pomógł: 18
Dołączył: 6.03.2007

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
BORG
post
Post #4





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 18.12.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ddiceman
post
Post #5





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował ddiceman 17.02.2009, 13:57:49
Go to the top of the page
+Quote Post
drzalek
post
Post #6





Grupa: Zarejestrowani
Postów: 170
Pomógł: 18
Dołączył: 6.03.2007

Ostrzeżenie: (0%)
-----


  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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Zapomniałem jeszcze dodać w pętli na samym końcu $i++, bez tego raczej skrypt nie zadziała jak powinien (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
BORG
post
Post #7





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 18.12.2006

Ostrzeżenie: (0%)
-----


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; (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował BORG 17.02.2009, 15:17:56
Go to the top of the page
+Quote Post
drzalek
post
Post #8





Grupa: Zarejestrowani
Postów: 170
Pomógł: 18
Dołączył: 6.03.2007

Ostrzeżenie: (0%)
-----


Fakt mój błąd, grunt, że sobie poradziłeś (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 07:38