Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/html]Problem z tabelką w pętli while
guilty82
post 6.04.2007, 17:43:23
Post #1





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

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


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
Go to the top of the page
+Quote Post
Cienki1980
post 6.04.2007, 20:29:18
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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.


--------------------
404
Go to the top of the page
+Quote Post
guilty82
post 28.04.2007, 09:59:10
Post #3





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

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


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!

Ten post edytował guilty82 28.04.2007, 09:59:37
Go to the top of the page
+Quote Post
kresh
post 28.04.2007, 10:00:34
Post #4





Grupa: Zarejestrowani
Postów: 99
Pomógł: 2
Dołączył: 8.11.2005
Skąd: Kraków

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


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


Ten post edytował kresh 28.04.2007, 10:06:16


--------------------
Programuj pod kątem interfejsu, nie implementacji
Gang of Four

michalbarys.pl
Go to the top of the page
+Quote Post
guilty82
post 28.04.2007, 10:08:24
Post #5





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

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


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:
Go to the top of the page
+Quote Post
kresh
post 28.04.2007, 10:10:29
Post #6





Grupa: Zarejestrowani
Postów: 99
Pomógł: 2
Dołączył: 8.11.2005
Skąd: Kraków

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


Faktycznie walnąłem się winksmiley.jpg
  1. <?php
  2. if ( ( $counter % $kolumny) == 0 ) {
  3. $counter = 1;  
  4. echo '</tr><tr>'; 
  5. }
  6. ?>


Ten post edytował kresh 28.04.2007, 10:10:57


--------------------
Programuj pod kątem interfejsu, nie implementacji
Gang of Four

michalbarys.pl
Go to the top of the page
+Quote Post
guilty82
post 28.04.2007, 10:22:00
Post #7





Grupa: Zarejestrowani
Postów: 176
Pomógł: 31
Dołączył: 26.03.2007

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


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

Ten post edytował guilty82 28.04.2007, 10:30:16
Go to the top of the page
+Quote Post
kresh
post 28.04.2007, 11:54:43
Post #8





Grupa: Zarejestrowani
Postów: 99
Pomógł: 2
Dołączył: 8.11.2005
Skąd: Kraków

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


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


Ten post edytował kresh 28.04.2007, 11:58:20


--------------------
Programuj pod kątem interfejsu, nie implementacji
Gang of Four

michalbarys.pl
Go to the top of the page
+Quote Post
Cienki1980
post 28.04.2007, 12:02:30
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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.


--------------------
404
Go to the top of the page
+Quote Post
kresh
post 28.04.2007, 12:08:07
Post #10





Grupa: Zarejestrowani
Postów: 99
Pomógł: 2
Dołączył: 8.11.2005
Skąd: Kraków

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


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

Ten post edytował kresh 28.04.2007, 12:09:55


--------------------
Programuj pod kątem interfejsu, nie implementacji
Gang of Four

michalbarys.pl
Go to the top of the page
+Quote Post
Cienki1980
post 28.04.2007, 19:39:40
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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


--------------------
404
Go to the top of the page
+Quote Post
kresh
post 30.04.2007, 06:33:15
Post #12





Grupa: Zarejestrowani
Postów: 99
Pomógł: 2
Dołączył: 8.11.2005
Skąd: Kraków

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


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

Ten post edytował kresh 30.04.2007, 06:35:02


--------------------
Programuj pod kątem interfejsu, nie implementacji
Gang of Four

michalbarys.pl
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 16.06.2025 - 23:27