Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML] Problem z tabelą - po 5 obrazków w linii
Forum PHP.pl > Forum > Przedszkole
roobik
Witam! smile.gif
Mam mały problem z tabelą. Otóż chcę, by wyświetlało po 5 obrazków w linii. Wszystkich rekordów jest 254. Mam gdzieś błąd w kodzie, lecz nie wiem, gdzie... Obecnie wyświetla, co prawda, po pięć obrazków, lecz obrazki te się powtarzają kilkunastokrotnie, zanim pojawi się kolejny obrazek...
  1. <?php
  2. include('config.php');
  3.  
  4.  
  5. $zap = "SELECT * FROM tabela WHERE ...";
  6. $result = mysql_query($zap);
  7. $ile = mysql_num_rows($result);
  8. echo '<table><tr><td>WSZYSTKICH ZDJĘĆ: '.$ile.'</td></tr></table>';
  9. echo '<table width=770 style="border: 1px solid #cccccc;">';
  10.  
  11. while($r = mysql_fetch_array($result)) {
  12. $id = $r['id'];
  13.  
  14. $date = $r['date'];
  15.  
  16. $text = $r['text'];
  17. $co_zmieniamy = array( "555","463");
  18. $na_co_zmieniamy = array("120","100");
  19. $text = str_replace($co_zmieniamy,$na_co_zmieniamy,$text);
  20. $opened = $r['opened'];
  21.  
  22.  
  23. $ilosc = $ile/5;
  24. $reszta=$ilosc-$ilosc%$ile;
  25. if ($reszta<0.4) {
  26. $ilosc=$ilosc-$reszta;
  27. for ($x=0;$x<$ilosc;$x++)
  28.  
  29.  
  30. {
  31. echo '<tr>';
  32.  
  33.  
  34. for ($y=0;$y<5;$y++) // pętla która tworzy kolumny
  35. {
  36. echo '<td width=152 align=center>'.$text.'<br><font style="font-family: Tahoma, Verdana, Arial; font-size: 9px;">>ID: '.$id.' | Odslon:'.$opened.'</font></td>';
  37. }
  38.  
  39. echo '</tr>';
  40.  
  41. }
  42.  
  43. }
  44.  
  45. elseif (($reszta>=0.5) AND ($reszta<=0.9)) {
  46.  
  47. $ilosc+=1-$reszta;
  48.  
  49. for ($x=0;$x<$ilosc;$x++)
  50. {
  51. echo '<tr>';
  52.  
  53. for ($y=0;$y<5;$y++)
  54. {
  55. echo '<td width=152 align=center>'.$text.'<br><font style="font-family: Tahoma, Verdana, Arial; font-size: 9px;">ID: '.$id.' | Odslon:'.$opened.'</font></td>';
  56. }
  57.  
  58. echo '</tr>';
  59.  
  60. }
  61.  
  62. }
  63.  
  64.  
  65. }
  66.  
  67.  
  68.  
  69.  
  70.  
  71. echo '</tr></table>';
  72. ?>
  73.  

Bardzo proszę ... pomóżcie...
peter13135


  1. $ilosc = $ile/5;
  2.  
  3. $reszta=$ilosc-$ilosc%$ile;
  4.  
  5. if ($reszta<0.4) {
  6.  
  7. $ilosc=$ilosc-$reszta;
  8.  
  9. for ($x=0;$x<$ilosc;$x++)


Po co te akrobacje ? Co to za wartość jest to 0.4 ?


  1.  
  2. $i=0;
  3. echo '<table><tr>';
  4. while($i<100)
  5. {
  6.  
  7. if($i%5==0) echo '</tr><tr>';
  8. echo '<td>'.rand(0,100).'</td>';
  9. $i++;
  10.  
  11. }
  12. echo '</tr></table>';
  13.  
  14.  

roobik
rand jest wartością losową, z tego, co kojarzę...
Ja w zapytaniu mam ORDER BY id DESC, więc to nie to.
Nie wiem, jak umieścić kod, który podałeś... Wywala błąd jak chcę zamienić...
Cytat(peter13135)
Co to za wartość jest to 0.4 ?

Wziąłem to z innego tematu - http://forum.php.pl/lofiversion/index.php/t147071.html
Task, czy inaczej - problem pozostał... sad.gif
b4rt3kk
Taki mój mały skrypt do rysowania tabel:

  1. class drawTables{
  2.  
  3. function drawTable($tableFields, $headers){
  4.  
  5. $table = '';
  6.  
  7. for ( $i=0; $i<sizeof($tableFields); $i++ ) {
  8.  
  9. $currentRow = $i+1;
  10. if ($currentRow % 2 == 0) $parity = 'even'; else $parity = 'odd';
  11. $rowClass = 'tabRow row' . $currentRow . 'of' . sizeof($tableFields) . ' ' . $parity;
  12. if (in_array($currentRow, $headers)) $rowClass .= ' header';
  13. $table .= '<div class="'.$rowClass.'">';
  14.  
  15. for ( $j=0; $j<sizeof($tableFields[$i]); $j++ ) {
  16.  
  17. $currentCol = $j+1;
  18. $colClass = 'tabCol col' . $currentCol . 'of' . sizeof($tableFields[$i]);
  19. $table .= '<div class="'.$colClass.'">' . $tableFields[$i][$j] . '</div>';
  20.  
  21. }
  22.  
  23. $table .= '<div class="clear"></div></div>';
  24.  
  25. }
  26.  
  27. return $table;
  28.  
  29. }
  30.  
  31. }


do tego css:

  1. .tabCol {
  2. float: left;
  3. width: 200px;
  4. }
  5.  
  6. .clear {
  7. clear: both;
  8. }
  9.  
  10. .even {
  11. background: silver;
  12. }
  13.  
  14. .header {
  15. font-weight: bold;
  16. }


gdzie $tableFields to zwyczajna tabelka o postaci:
  1. $tabelka = array(
  2. array('pole1', 'pole2', 'pole3'),
  3. array('pole1', 'pole2', 'pole3'),
  4. );


a $headers to numery rzędów, które powinny być nagłówkami.
roobik
peter13135... b4rt3kk - chłopaki - nie jarzę... sad.gif
Który w końcu kod pasuje do mojego? Ja wiem, że obydwa są ok, ale co jeden daję, to babole wychodzą...
Pomóżcie pliiisss...
peter13135
Cytat(roobik @ 11.09.2012, 20:52:20 ) *
rand jest wartością losową, z tego, co kojarzę...
Ja w zapytaniu mam ORDER BY id DESC, więc to nie to.
Nie wiem, jak umieścić kod, który podałeś... Wywala błąd jak chcę zamienić...

Wziąłem to z innego tematu - http://forum.php.pl/lofiversion/index.php/t147071.html
Task, czy inaczej - problem pozostał... sad.gif


Ojej, ja pokazałem Ci tylko jak wygenerowac tabelke z 5 kolumnami. Zamiast rand, mogłem dać jakąkolwiek stałą, albo $i - to nie ma znaczenia.

Zamiast mojej pętli (while $i<100 ) dajesz swoją (while $row = mysql_fetch... ) i zamiat rand dajesz swoje dane które chcesz w tm polu wyświetlić.
roobik
peter13135, zmieniłem kod, na wzór, który podałeś. Obecnie wygląda on tak :
  1. <?php
  2. include('config.php');
  3.  
  4.  
  5. $zap = "SELECT * FROM tabela WHERE ...";
  6. $result = mysql_query($zap);
  7. $ile = mysql_num_rows($result);
  8. echo '<table><tr><td>WSZYSTKICH ZDJĘĆ: '.$ile.'</td></tr></table>';
  9. echo '<table width=770 style="border: 1px solid #cccccc;">';
  10.  
  11. while($r = mysql_fetch_array($result)) {
  12. $id = $r['id'];
  13. $date = $r['date'];
  14. $text = $r['text'];
  15. $co_zmieniamy = array( "555","463");
  16. $na_co_zmieniamy = array("120","100");
  17. $text = str_replace($co_zmieniamy,$na_co_zmieniamy,$text);
  18. $opened = $r['opened'];
  19.  
  20.  
  21. $i=0;
  22. //echo '<table><tr>';
  23. while($i<100)
  24. {
  25.  
  26. if($i%5==0) echo '</tr><tr>';
  27. echo '<td width=152 align=center>'.$text.'<br><font style="font-family: Tahoma, Verdana, Arial; font-size: 9px;">>ID: '.$id.' | Odslon:'.$opened.'</font></td>';
  28. $i++;
  29.  
  30. }
  31. //echo '</tr></table>';
  32.  
  33. }
  34. echo '</tr></table>';
  35. ?>

Niestety, ale problem pozostał. Niby wyświetla (jak poprzednio, bez poprawek) po 5 zdjęć w wierszu, ale znów jest tak, że jeden obrazek jest powtarzany jakieś 100 razy... Gdzieś mam błąd w pętli, ale nie wiem gdzie...

Bardzo proszę o pomoc...
BaN
@peter13135 podał Ci prawie dobre rozwiązanie. Trzeba tylko wprowadzić niewielkie poprawki, aby nie wyświetlać wiersza bez komórek oraz aby w ostatnim wierszu było 5 komórek
  1. $result = mysql_query("SELECT * FROM tabela WHERE ...");
  2. $ile = mysql_num_rows($result);
  3. echo '<table><tr><td>WSZYSTKICH ZDJĘĆ: '.$ile.'</td></tr></table>';
  4. if ($ile > 0) {
  5. echo '<table width=770 style="border: 1px solid #cccccc;">';
  6. $co_zmieniamy = array("555", "463");
  7. $na_co_zmieniamy = array("120", "100");
  8. $i = 0;
  9. while ($r = mysql_fetch_array($result)) {
  10. if ($i % 5 == 0) {
  11. if ($i > 0) {
  12. echo "</tr>\n";
  13. }
  14. echo '<tr>';
  15. }
  16. echo '<td width=152 align=center>'. str_replace($co_zmieniamy, $na_co_zmieniamy, $r['text']) . '<br>
  17. <font style="...">ID: '.$r['id'] . ' | Odslon: ' . $r['opened'] .'</font></td>';
  18. ++$i;
  19. }
  20. if ($i % 5 > 0) {
  21. echo str_repeat('<td></td>', 5 - ($i % 5));
  22. }
  23. echo '</tr></table>';
  24. }
roobik
Niestety, ale podany przez Ciebie również nie rozwiązał tego problemu - nadal gdzieś jest błąd w pętli: owszem, wyświetla po 5 obrazków w linii, ale przez dwadzieścia-parę linii powtarzany jest ten sam obrazek, dopiero potem następny, który jest wyświetlany też przez następnych dwadzieścia-parę linii... i tak w kółko. Każdy obrazek powtarzany jest ze 100 razy, zanim wyświetlony jest następny, który znowu jest powtarzany ze 100 razy... sad.gif
Już sam nie wiem... sad.gif
Damonsson
  1. while ($i <= mysql_fetch_array($result)) {


Nie czasem tak?

skąd to $r w ogóle? Nie rozumiem za bardzo tego kodu.
roobik
smile.gif Wrrrrrróć smile.gif
Zarówno peter1315, jak i BaN podali prawidłowe rozwiązanie smile.gif
Problem był jednak u mnie - okazało się, że jeszcze mam jedną pętlę, która była znacznie wcześniej...
Wystarczyło w kodzie zmienić zmienną $r...

Dziękuję Wam bardzo!

Pozdrawiam!
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.