Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/html]Problem z tabelką w pętli while
Forum PHP.pl > Forum > Przedszkole
guilty82
Witam,

Moj problem dotyczy w sumie html, ale nie do konca poniewaz ten html zawiera sie w petli while.

Oto co mam:


Natomiast chcialbym tak:


Ponizej fragment kodu, ktory to pokazuje:
  1. <?php 
  2. $lista = @mysql_query("SELECT nazwa, p_uzytkowa, render_przod FROM domki
  3. WHERE technologia='murowany' AND kategoria='parter'
  4. ORDER BY p_uzytkowa");
  5.  
  6. ...
  7.  
  8. <td width="650" bgcolor="#FFFFFF"><p align="center"><?php if (!$lista) {
  9. echo '<p>Problem podczas pobierania listy domków: ' . mysql_error() . '</p>';
  10. }
  11.  echo '<table width="90%" border="0" bgcolor="#C9BEA0" align="center">';
  12.  echo '<tr><td colspan="2"><div align="center">';
  13.  echo '<strong><font size="4" face="Verdana, Arial, Helvetica, sans-serif">Domki murowane -> parterowe</div></td></tr>';
  14.  while ($row = mysql_fetch_array($lista)) {
  15.  echo '<tr><td bgcolor="#FFFFFF"><div align="center">';
  16.  echo '<img src="upload/' .$row['render_przod']. '" width="220" height="165" alt="" />';
  17.  echo '</div></td></tr>';
  18.  echo '<tr><td><div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">';
  19.  echo $row['nazwa']. ' <font size="1">(' .$row['p_uzytkowa']. ' m2)</div></td></tr></font>';
  20.  }
  21.  echo '</tr></table>';
  22. ?>


Z gory dzieki za pomoc!
Ps. Wesolych swiat smile.gif
Cienki1980
Zastosuj coś takiego: pisane schematycznie
  1. <?php
  2. $i=0;
  3. echo "<table><tr>";
  4. while($i<10)
  5. {
  6.  if($i%3==0)
  7. echo "</tr><tr>";
  8.  
  9. echo "<td>".$i."</td>";
  10. $i++;
  11. }
  12. echo "</tr></table>";
  13. ?>

Zamiast 3 wstaw sobie taka liczbę ile chcesz mieć kolumn.
guilty82
Witam,

Pozwolę sobie odświerzyć ten temat.
Napisałem skrypt, który wyświetla mi tabelke tak jak chciałem, ale tylko 2 pierwsze rzędy sad.gif
Później zaczyna wyświetlać domki w poziomie. A ja chciałbym aby każdy rząd miał 2 kolumny.
Tak to wygląda:


A oto skrypt, który wykonuje to zadanie:
  1. <?php
  2. echo '<table width="95%" border="0" bgcolor="#EBEBEB" align="center">';
  3.  echo '<tr><td bgcolor="#D6D6D6" colspan="2"><div align="center">';
  4.  echo '<strong><font size="3" color="#003366" face="Verdana">Wyniki szukania</div></td></tr>';
  5.  $kolumny = 2;
  6.  $counter = 1;
  7.  while ($row = mysql_fetch_array($lista)) {
  8.  $id = $row['id'];
  9.  echo '<td bgcolor="#D6D6D6"><div align="center"><br />';
  10.  echo "<a href='wyszukaj.php?id=$id'>";
  11.  echo '<img src="upload/' .$row['render_przod']. '" width="220" height="165" border="0" alt="" /></a>';
  12.  echo '<br /><div align="center"><font size="2" face="Verdana">';
  13.  echo "<a href='wyszukaj.php?id=$id'>";
  14.  echo $row['nazwa']. '</a> <font size="1">(' .$row['p_uzytkowa']. ' m2)</div></td></font>';
  15. if (($kolumny >= $counter) && (($counter % $kolumny) == 0)) {
  16.  echo '</tr><tr>'; }
  17.  $counter++;
  18.  }
  19.  
  20.  echo '</tr></table>';
  21. ?>

Już nie wiem co robie źle.
Proszę o pomoc!
kresh
Wartość zmiennej $counter jest mniejsza bądź równa wartości zmiennej $kolumny tylko w 2 pierwszych przejściach pętli. I tylko dla dówch pierwszych iteracji warunek jest spełniony.
Musisz mu później znów nadać wartość pierwotną, czyli 1.

  1. <?php
  2. if ( ( $kolumny >= $counter ) && ( ( $counter % $kolumny) == 0 ) ) {
  3. $counter = 1;  
  4. echo '</tr><tr>'; 
  5. }
  6. ?>
guilty82
Cytat(kresh @ 28.04.2007, 11:00:34 ) *
Wartość zmiennej $counter jest mniejsza bądź równa wartości zmiennej $kolumny tylko w 2 pierwszych przejściach pętli. I tylko dla dówch pierwszych iteracji warunek jest spełniony.
Musisz mu później znów nadać wartość pierwotną, czyli 1.

  1. <?php
  2. if ( ( $kolumny >= $counter ) && ( ( $counter % $kolumny) == 0 ) ) {
  3. $counter = 1;  
  4. echo '</tr><tr>'; 
  5. }
  6. ?>


Po tej zmianie wyświetla tak smile.gif:
kresh
Faktycznie walnąłem się winksmiley.jpg
  1. <?php
  2. if ( ( $counter % $kolumny) == 0 ) {
  3. $counter = 1;  
  4. echo '</tr><tr>'; 
  5. }
  6. ?>
guilty82
No niestety nadal to samo sad.gif

Natomiast zmieniłem trochę kod
  1. <?php
  2. $kolumny = 2;
  3. $counter = 0;
  4.  
  5. ...
  6.  
  7. if (($kolumny >= $counter) && (($counter % $kolumny) == 0)) {
  8.  $counter = 0;
  9.  echo '</tr><tr>'; }
  10.  $counter++;
  11. ?>


I teraz porobiło się jeszcze dziwniej blink.gif


--edit--

Wygląda na to że działa!
Zamiast $counter = 0; dałem $counter = 1;
Dziwny jest ten... PHP smile.gif
kresh
  1. <?php
  2. /*
  3. Aby zrozumieć działanie, wystarczy przeanalizować kod:
  4. Mamy taki fragment:
  5. */
  6. $kolumny = 2;
  7. $counter = 1;
  8.  
  9. ...
  10.  
  11. if ( ( $counter % $kolumny ) == 0 ) ){
  12.  $counter = 0;
  13.  echo '</tr><tr>'; 
  14. }
  15. $counter++;
  16.  
  17. /*
  18. Sprawdźmy zatem jak on działa:
  19. */
  20.  
  21. //1 iteracja wartość $counter wynosi 1
  22. if( ( 1 % 2 ) == 0 ){
  23. //warunek nieprawdziwy - nie wykona operacji tutaj zawartych
  24. }
  25.  
  26. $counter++; //następuje inkrementacja wartości $counter = 2
  27.  
  28. /*
  29. 2 iteracja 
  30. teraz wartość $counter teraz wynosi 2
  31. */
  32. if( ( 2 % 2 ) == 0 ){
  33. //warunek prawdziwy - wykona operacje tutaj zawarte
  34. $counter = 0; //przypisujemy zmiennej $counter wartość 0
  35. } 
  36.  
  37. /*
  38. Nie działało, ponieważ zapomnieliśmy o tym istotnym fragmencie.
  39. */
  40. $counter++; // ale tutaj inkrementujemy wartość $counter - teraz wynosi ona 1 
  41.  
  42. /*
  43. 3 iteracja
  44. teraz wartość $counter teraz wynosi 1
  45. */
  46. if( ( 1 % 2 ) == 0 ){
  47. //warunek nieprawdziwy - nie wykona operacji tutaj zawartych
  48. }
  49.  
  50. $counter++; //następuje inkrementacja wartości $counter = 2
  51.  
  52. //4 iteracja następuje inkrementacja - $counter teraz wynosi 2
  53. if( ( 2 % 2 ) == 0 ){
  54. //warunek prawdziwy - wykona operacje tutaj zawarte
  55. $counter = 0; //przypisujemy zmiennej $counter wartość 0
  56. } 
  57.  
  58. $counter++; // ale tutaj inkrementujemy wartość $counter - teraz wynosi ona 1 
  59.  
  60. // itd.
  61. ?>
Cienki1980
Ludzie kochani czemu wy tak kombinujecie jak koniki pod górę questionmark.gif

  1. <?php
  2. for($i=0;$i<15;$i++)
  3. {
  4.  $arr[$i]=$i;
  5. }
  6. $i=0;
  7.  
  8. $cols=3;
  9. echo "<table><tr>";
  10. while(is_numeric($arr[$i]))
  11. {
  12.  echo "<td>".$arr[$i]."</td>";
  13.  $i++;
  14.  if($i%$cols==0)
  15. echo "</tr><tr>";
  16. }
  17. echo "</tr></table>";
  18. ?>


Chyba przerobić ten "skrypt" ( za duże słowo biggrin.gif ) to już nie będzie problem.
kresh
Cytat(Cienki1980 @ 28.04.2007, 11:02:30 ) *
Ludzie kochani czemu wy tak kombinujecie jak koniki pod górę questionmark.gif


  1. <?php
  2. $kolumny = 2;
  3. $counter = 1;
  4. echo "<table><tr>";
  5. $i = 0;
  6. while( $row = mysql_fetch_array( $result ) ){
  7. echo '<td>' . $row['cos'] . '</td>';
  8.  
  9. if ( ( $counter % $kolumny ) == 0 ) {
  10. $counter = 0;
  11. echo '</tr><tr>';
  12. }
  13. $counter++;
  14. $i++;
  15. }
  16. echo "</tr></table>";
  17. ?>

Kto tutaj kombinuje? ( użyłem jednej pętli )
Proste jak budowa cepa biggrin.gif
Cienki1980
Cytat(kresh @ 28.04.2007, 13:08:07 ) *
Kto tutaj kombinuje? ( użyłem jednej pętli )
Proste jak budowa cepa biggrin.gif

Moja pętla for była tylko po to, żeby stworzyć sobie tablicę którą potem "obracałem" w while.
Po co masz u siebie zmienną $counter i zmienną $i questionmark.gif Obie incrementujesz nie wiadomo w jakim celu a przecież wystarczy jedna ( tak jak u mnie ). No ale cóż racja jest jak du...sza, każdy ma swoją.
kresh
Przyznaje rację, zmienna $i jest zbędna. Sprawdzałem na swoim serwerze ale zamiast pobierać coś z bazy to sobie po prostu wykonałem pętle x razy.

Wklejając kod dałem tak jak w oryginale
  1. <?php
  2. while( $row = mysql_fetch_array( $result ) )
  3. ?>


Ale już zapomniałem usunąć inicjalizację i inkrementację $i, która naturalnie w tym przykładzie jest zbędna.

Tak czy siak skrypt szybciej się wykonuje, przy jednej pętli niż przy dwóch.

1. Przechodzisz przez wszystkie pobrane rekordy i zapisujesz je do tablicy.
2. Kolejny raz przechodzisz przez wszystkie rekordy ( zapisane w tablicy $arr )

Oczywiście jest to znikomy zysk i zarówno Twoja jak i moja wersja będzie działać poprawnie, chciałem jedynie trzymać się nawyków poprawnego, optymalnego kodowania.

Pozdrawiam winksmiley.jpg
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.