Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]pętla w tabeli
Forum PHP.pl > Forum > Przedszkole
kmpl
Mam tabelę gdzie chciałbym aby na stałe było 21 wierszy (taki wzór), ale nie zawsze wszystkie będą wypełnione danymi - w zależności od wpisu w bazie.
Układ wygląda tak:

  1. <table id=spis>
  2. <?
  3. echo "<tr>";
  4. echo "<td class ='lp'rowspan=2><center>Lp</center></td>";
  5. echo "<td class ='nazwa'rowspan=2><center>Nazwa</center></td>";
  6. echo "<td rowspan=2><center>Oznaczenie</center></td>";
  7. echo "<td rowspan=2><center>Jedn. miary</center></td>";
  8. echo "<td colspan=8><center>Stan w dniu</center></td>";
  9. echo "</tr>";
  10.  
  11.  
  12. echo "<tr>";
  13.  
  14. echo "<td height=120></td>";
  15.  
  16. echo "<td></td>";
  17. echo "<td></td>";
  18. echo "<td></td>";
  19. echo "<td></td>";
  20. echo "<td></td>";
  21. echo "<td></td>";
  22. echo "<td></td>";
  23. echo "</tr>";
  24.  
  25.  
  26. foreach ($list as $item) {
  27.  
  28. echo "<tr>";
  29. echo "<td>1.</td>";
  30. echo "<td>".$item->nazwa."</td>";
  31. echo "<td>".$item->JIM."</td>";
  32. echo "<td>szt.</td>";
  33. echo "<td></td>";
  34. echo "<td></td>";
  35. echo "<td></td>";
  36. echo "<td></td>";
  37. echo "<td></td>";
  38. echo "<td></td>";
  39. echo "<td></td>";
  40. echo "<td></td>";
  41. echo "</tr>";
  42.  
  43.  
  44. }
  45.  


Chodzi o to żeby liczba porządkowa była od 1 do 21 na stałe, tylko jak to wykonać w kodzie php?
phpion
Przed pętlą $i = 1, a w pętli $i++. Kombinuj. Może być nawet bez dodatkowej zmiennej o ile klucze tablicy są u Ciebie po kolei. Wówczas kombinuj z foreach($list as $i => $item).
kmpl
Spróbuję tak zrobić.

Witam, nie bardzo sobie radzę z pętlą.
Dodałem przed foreach:


  1.  
  2. $lp=1;
  3. foreach ($list as $item) {
  4.  


Za foreach:
  1. $lp++;
  2.  
  3. echo "<tr>";
  4. echo "<td>1.</td>";
  5. echo "<td>".$item->nazwa."</td>";
  6. echo "<td>".$item->JIM."</td>";
  7. echo "<td>szt.</td>";
  8. echo "<td></td>";
  9. echo "<td></td>";
  10. echo "<td></td>";
  11. echo "<td></td>";
  12. echo "<td></td>";
  13. echo "<td></td>";
  14. echo "<td></td>";
  15. echo "<td></td>";
  16. echo "</tr>";
  17.  


I nie wiem co dalej. Musi być zawsze wyświetlonych 21 wierszy i w L.p kolejno 1,2,3....21.

nospor
echo "<td>1.</td>";
......
No ale użyj te $lp.... po coś chyba kazano ci je wstawić....

echo "<td>$lp.</td>";
kmpl
OK. Tak zrobiłem. Zmieniłem $lp = 0. Mam już L.p od 1 i po kolei, ale numeruje mi do ilości rekordów w bazie. A powinno do 21 bez względu ile jest rekorów (a w bazie i tak nie będzie więcej niż 21).
nospor
No to skoro po pętli, masz liczbę mniejszą od 21 to przy pomocy FOR dogeneruj pozostałe liczby/wiersze
kmpl
Teraz to się sam zapętliłem. Dodaje mi po 21 wierszy wszystkich elementów z bazy:

  1. $lp = 0;
  2.  
  3. foreach ($list as $item)
  4.  
  5. for ($i=0; $i<21; $i++)
  6.  
  7. {
  8.  
  9. $lp = $i+1;
  10.  
  11.  
  12. echo "<tr>";
  13. echo "<td>$lp.</td>";
  14. echo "<td>".$item->nazwa."</td>";
  15. echo "<td>".$item->JIM."</td>";
  16. echo "<td>szt.</td>";
  17. echo "<td></td>";
  18. echo "<td></td>";
  19. echo "<td></td>";
  20. echo "<td></td>";
  21. echo "<td></td>";
  22. echo "<td></td>";
  23. echo "<td></td>";
  24. echo "<td></td>";
  25. echo "</tr>";
  26.  
  27.  
  28. }
  29.  
  30.  
  31.  
  32. echo "</table>";
nospor
FOR ma być po FOREACH (a nie w FOREACH) i to dopiero wtedy, gdy FOREACH wygenerował mniej niż 21.
kmpl
Wyrzuciłem za foreach a i tak się sypie wszystko...
nospor
To może pokaż nam kod po zmianach? To może napisz na czym polega "sypanie się"? Czy osobie, która jest na forum od jakiegoś czasu, trzeba takie rzeczy jeszcze pisać?
kmpl
Sorki:

  1.  
  2. $lp = 0;
  3.  
  4. foreach ($list as $item)
  5.  
  6.  
  7.  
  8.  
  9. {
  10.  
  11. $lp = $i+1;
  12.  
  13. //$list as $lp->$item;
  14. echo "<tr>";
  15. echo "<td>$lp.</td>";
  16. echo "<td>".$item->nazwa."</td>";
  17. echo "<td>".$item->JIM."</td>";
  18. echo "<td>szt.</td>";
  19. echo "<td></td>";
  20. echo "<td></td>";
  21. echo "<td></td>";
  22. echo "<td></td>";
  23. echo "<td></td>";
  24. echo "<td></td>";
  25. echo "<td></td>";
  26. echo "<td></td>";
  27. echo "</tr>";
  28.  
  29.  
  30. }
  31. for ($i=0; $i<21; $i++)
  32. {
  33. $lp = $i+1;
  34. $item = array_key_exists ($i, $list) $list[i];
  35. }
  36.  
  37.  
  38.  
  39. echo "</table>";
  40.  
  41.  


syntac error
nospor
Cytat
syntac error

facepalmxd.gif
Jak dostajesz błąd, to należy go podać dokładnie, włącznie z linijką, której dotyczy.... Ogarnij się chłopie troche...


$item = array_key_exists ($i, $list) $list[i];
Co niby ta linijka ma robić?
kmpl
Zacząłem cos kombinować, ale bez efektu.

Syntax error, unexpected T_VARIABLE - on line 138
goukan
Dobrze widze? W kodzie który podałeś jest 40 linijek kodu, a nie 138
kmpl
  1. <?php
  2. /**
  3.  * @package Katalog
  4.  * @subpackage C:
  5.  * @author {@link }
  6.  * @author Created on 30-May-2012
  7.  * @license GNU/GPL
  8.  */
  9.  
  10. //-- No direct access
  11. defined('_JEXEC') || die('=;)');
  12.  
  13.  
  14.  
  15. JHTML::stylesheet('general.css', 'templates/beez_20/css/');
  16. ?>
  17.  
  18.  
  19. <?php
  20. $db = JFactory::getDBO();
  21. $warunek = $_GET['id'];
  22.  
  23. $query = $db->getQuery(true);
  24. $query
  25. ->select(array('a.*', 'b.nazwa', 'b.JIM'))
  26. ->from('#__lok_sprzetu AS a')
  27. ->join('INNER', '#__sprzet AS b ON (a.id_sprzet = b.id_sprzetu)')
  28. ->where(' a.id_pom = "'.$warunek.'" ');
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35. /*
  36. $query->select('*');
  37. $query->from('#__lok_sprzetu');
  38. //$query->leftJoin('#__sprzet AS sprzet ON a.id_sprzet = sprzet.id_sprzetu');
  39.  
  40. //$query->where('id_pom = '.$warunek);
  41. */
  42. $db->setQuery($query);
  43.  
  44. $list = $db->loadObjectList();
  45. $item_title = $item->title;
  46. $db->setQuery($query);
  47. $row = $db->loadObjectList();
  48.  
  49. $tabela = $this->get('getCategory');
  50.  
  51. ?>
  52.  
  53.  
  54. <!doctype html>
  55. <html lang="pl">
  56. <head>
  57. <meta charset="utf-8" />
  58. <title class="spis">Spis sprzętu w pomieszczeniu</title>
  59. <link rel="stylesheet" href="style.css" type="text/css" />
  60. <link rel="stylesheet" href="style_print.css" media="print" type="text/css" />
  61. <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
  62. </head>
  63. <body class="spis">
  64. <div id="container">
  65. <div class="title">
  66.  
  67. <span class="name">.........................................................
  68. <br>(Nazwa)</br></span>
  69. <span class="date">.........................................................
  70. <br>(Numer budynku/kompleksu)</br></span>
  71.  
  72. </div>
  73.  
  74. <br><br / >
  75. <br><br / >
  76.  
  77.  
  78. <h1 class='spis'><center>SPIS SPRZĘTU W POMIESZCZENIU NR...</center></h1>
  79. <br><br / >
  80.  
  81. <table id=spis>
  82. <?
  83. echo "<tr>";
  84. echo "<td class ='lp'rowspan=2><center>Lp</center></td>";
  85. echo "<td class ='nazwa'rowspan=2><center>Nazwa przedmiotu (wg katalogu)</center></td>";
  86. echo "<td rowspan=2><center>Oznaczenie katalogowe</center></td>";
  87. echo "<td rowspan=2><center>Jedn. miary</center></td>";
  88. echo "<td colspan=8><center>Stan w dniu</center></td>";
  89. echo "</tr>";
  90.  
  91.  
  92. echo "<tr>";
  93.  
  94. echo "<td height=120></td>";
  95.  
  96. echo "<td></td>";
  97. echo "<td></td>";
  98. echo "<td></td>";
  99. echo "<td></td>";
  100. echo "<td></td>";
  101. echo "<td></td>";
  102. echo "<td></td>";
  103. echo "</tr>";
  104.  
  105. $lp = 0;
  106.  
  107. for($i=0; $i<21; $i++)
  108. {
  109. $lp = $i + 1;
  110.  
  111.  
  112.  
  113.  
  114. echo "<tr>";
  115. echo "<td>$lp.</td>";
  116. echo "<td>".$item->nazwa."</td>";
  117. echo "<td>".$item->JIM."</td>";
  118. echo "<td>szt.</td>";
  119. echo "<td></td>";
  120. echo "<td></td>";
  121. echo "<td></td>";
  122. echo "<td></td>";
  123. echo "<td></td>";
  124. echo "<td></td>";
  125. echo "<td></td>";
  126. echo "<td></td>";
  127. echo "</tr>";
  128.  
  129.  
  130. }
  131.  
  132.  
  133.  
  134. echo "</table>";
  135. echo "<br><br / >";
  136.  
  137. echo "<br /><p align=right> ...............................<br /></p>";
  138. echo "<address> <p align=right>imię i nazwisko</address><br /></p>";
  139. echo "<address><p align=right>podpis użytkownika sprzętu</address><br /></p>";
  140. echo "</div></body>";
  141. print_r($query);
  142. echo "</html>";
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150. <table>';
  151.  
  152. <form method="post" action="index.php?view=Wydruk&format=pdf">
  153.  
  154. <input name="klawisz" class="searchbutton" value="Wydruk wykazu" type="submit" />&nbsp;
  155.  
  156.  
  157. </p>
  158. </form>';
  159.  
  160.  
  161. echo "</table>";
  162.  
  163.  


Teraz po zmianach mam 21 wierszy, ale pusta tabelę:

  1. $lp = 0;
  2.  
  3. for($i=0; $i<21; $i++)
  4. {
  5. $lp = $i + 1;
  6. $item = $list;
  7. echo "<tr>";
  8. echo "<td>$lp.</td>";
  9. echo "<td>".$item->nazwa."</td>";
  10. echo "<td>".$item->JIM."</td>";
  11. echo "<td>szt.</td>";
  12. echo "<td></td>";
  13. echo "<td></td>";
  14. echo "<td></td>";
  15. echo "<td></td>";
  16. echo "<td></td>";
  17. echo "<td></td>";
  18. echo "<td></td>";
  19. echo "<td></td>";
  20. echo "</tr>";
  21.  
  22.  
  23. }
  24.  
  25.  
  26.  
Dominis
ehh, straszny burdel masz w tym kodzie i sam sie gubisz..

  1. $lp = 0;
  2.  
  3. for($i=0; $i<21; $i++)
  4. {
  5. $lp = $i + 1;
  6. $item = $list; // questionmark.gif co to jest?
  7. echo "<tr>";
  8. echo "<td>$lp.</td>";
  9. echo "<td>".$item->nazwa."</td>";// skad? jak gdzie? i dziwne ze puste...
  10. echo "<td>".$item->JIM."</td>"; // ?
  11. echo "<td>szt.</td>";
  12. echo "<td></td>";
  13. echo "<td></td>";
  14. echo "<td></td>";
  15. echo "<td></td>";
  16. echo "<td></td>";
  17. echo "<td></td>";
  18. echo "<td></td>";
  19. echo "<td></td>";
  20. echo "</tr>";
  21.  
  22.  
  23. }
  24.  


  1. $lp = 0;
  2. foreach($list as $item){
  3.  
  4. echo "<tr>";
  5. echo "<td>".++$lp."</td>";
  6. echo "<td>".$item->nazwa."</td>";
  7. echo "<td>".$item->JIM."</td>";
  8. echo "<td>szt.</td>";
  9. echo "<td></td>";
  10. echo "<td></td>";
  11. echo "<td></td>";
  12. echo "<td></td>";
  13. echo "<td></td>";
  14. echo "<td></td>";
  15. echo "<td></td>";
  16. echo "<td></td>";
  17. echo "</tr>";
  18. if($lp > 21){
  19. break;
  20. }
  21. }


Zrobiłem na foreach, z sentymentu..
kmpl
Cytat
echo "<td>".$item->nazwa."</td>";// skad? jak gdzie? i dziwne ze puste...
echo "<td>".$item->JIM."</td>"; // ?


nazwa i JIM to pola w tabeli z której pobierane są dane.

Dokonałem zmian jak w poście poniżej, ale mam teraz tyle wierszy ile jest w bazie, a nie 21.

Foreach raczej tu nie zadziała. Jak to zrobić za pomocą pętli for?
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.