Pętla w tabeli

0

Witam,

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:


<table id=spis>
<?
    echo "<tr>";
              echo "<td class ='lp'rowspan=2><center>Lp</center></td>";
              echo "<td class ='nazwa'rowspan=2><center>Nazwa przedmiotu (wg katalogu)</center></td>";
              echo "<td rowspan=2><center>Oznaczenie katalogowe</center></td>";
              echo "<td rowspan=2><center>Jedn. miary</center></td>";
              echo "<td colspan=8><center>Stan w dniu</center></td>";
          echo "</tr>";
			
				
        echo "<tr>";
        
        echo "<td height=120></td>";
				
        echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
     echo "</tr>";
       
			 
foreach ($list as $item) {
			 
        echo "<tr>";
				echo "<td>1.</td>";
				echo "<td>".$item->nazwa."</td>";
				echo "<td>".$item->JIM."</td>";
				echo "<td>szt.</td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
       echo "</tr>";
			 

			 }
			 
			 

Chodzi o to żeby liczba porządkowa była od 1 do 21 na stałe, tylko jak zrobić pętle?

0

Najprościej to chyba po prostu dodać $lp = 1; przed pętlą, a na jej końcu (jeszcze wewnątrz) ją inkrementować...

0

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

$lp=1;
foreach ($list as $item) {
 

Za foreach:

 
$lp++;
 
echo "<tr>";
echo "<td>1.</td>";
echo "<td>".$item->nazwa."</td>";
echo "<td>".$item->JIM."</td>";
echo "<td>szt.</td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "</tr>";

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

0
$lp = 0;
echo "<td>$lp.</td>";

Tylko, że wtedy masz elementów tyle ile znajduje się w liście
Najprostsze (niekoniecznie najlepsze) rozwiązanie to zmienić foreach na for:

for($i=0; $i<21; $i++)
{
    $lp = $i + 1;
    $item = array_key_exists($i, $list) ? $list[i] : new item(); //czy jak ta klasa się nazywa
/* dalej już tak samo */

Aha zakładam że $list to tablica z indeksami od 0

0

Teraz to już sam się zapętliłem. Dodaje mi po 21 razy każdy element z bazy:

 
$lp = 0;			 

foreach ($list as $item) 

for ($i=0; $i<21; $i++)

{

	$lp = $i+1;
	
	
        echo "<tr>";
				echo "<td>$lp.</td>";
				echo "<td>".$item->nazwa."</td>";
				echo "<td>".$item->JIM."</td>";
				echo "<td>szt.</td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
       echo "</tr>";
			 

			 }
			 
			 
echo "</table>";

0

bo wykonujesz petle for w petli foreach. musisz sie zdecydowac, korzystac z foreach jak Patryk27 napisal ALBO ( nie mylic z LUB :P) z petli for jak Sarrus.

0

Teraz mam syntax error on line 138

 
$lp = 0;			 

foreach ($list as $item) 




{

	$lp = $i+1;
	
	//$list as $lp->$item;
        echo "<tr>";
				echo "<td>$lp.</td>";
				echo "<td>".$item->nazwa."</td>";
				echo "<td>".$item->JIM."</td>";
				echo "<td>szt.</td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td></td>";
       echo "</tr>";
			 

			 }
			for ($i=0; $i<21; $i++) 
			{
			$lp = $i+1; 
			$item = array_key_exists ($i, $list) $list[i]; 
		}
			
			 			 
			
echo "</table>";
0

Nie pisz stron w notatniku bo robisz do d... wcięcia, nie mówiąc o tym, że IDE CI na czerwono pokaże Twój syntax error. Na jakimś forum, nie pamiętam jakim - pytania o poprawę składni od razu lądowały w koszu

0

Kod jest pisany w Ked.
Może ktoś podpowie jak powinna wyglądać ta nieszczęsna pętla for?

0

Ostatnia stabilna wersja to 2.1.4.0 z roku 2006. Program nie jest rozwijany
Zamień to na coś porządnego, proszę.
I CZYTAJ POSTY, dostałeś poradę, żeby ZAMIENIĆ foreach na for. Najpierw dopisałeś for pod foreach, potem wkleiłeś (z błędami) ten kod od @Sarrus byle gdzie, gdzieś w środek.
Problem jest BANALNY, temat powinien być w Newbie.
Zwykły, najprostszy for. Trzeba mieć w głowie dwie rzeczy - działanie pętli for oraz co to są tablice. Tyle. Druga podstrona dowolnego kursu o PHP.

0

Tak, zgadzam się. Post powinien być w Newbie.

0

Po przeróbce mam dane z tabeli, ale brakuje pustych wierszy - tak, żeby było w sumie 21.

    $lp = 0;	
    foreach($list as $item){
     
    echo "<tr>";
    echo "<td>".++$lp."</td>";
    echo "<td>".$item->nazwa."</td>";
    echo "<td>".$item->JIM."</td>";
    echo "<td>szt.</td>";
    echo "<td></td>";
    echo "<td></td>";
    echo "<td></td>";
    echo "<td></td>";
    echo "<td></td>";
    echo "<td></td>";
    echo "<td></td>";
    echo "<td></td>";
    echo "</tr>";
    if($lp > 21){
    break;
    }
    } 
0

Podałem Ci rozwiązanie, którego nie czytałeś dokładnie. Cytując sam siebie:

Sarrus napisał(a)

Najprostsze (niekoniecznie najlepsze) rozwiązanie to zmienić foreach na for:

zmienic = zamienić oraz zmienic != dokleić poza tym pominąłeś istotną linijkę z mojego kodu.

0

Dorzucę jeszcze coś od siebie - absolutnie nie używaj foreach w tym przypadku - powinno Ci to rozjaśnić co to znaczy "zamień foreach na for". Ale z brakiem umiejętności czytania i rozumienia podstawowego zdania powtarzanego tyle razy - kariery w zawodzie Ci nie wróżę.

0

Nie rozumiem tej linii w pętli for:

 
$item = array_key_exists($i, $list) ? $list[i] : new item();

szczególnie ten fragment

 ? $list[i] : new item();
1

Kurde jak wy się uczycie tego programowania. To jest podstawowa konstrukcja w językach C-podobnych.
<warunek> ? <wartość_prawda> : <wartość_fałsz>
W tym przypadku wartość wyrażenia będzie przypisana do $item. To robi tyle:
Jeżeli istnieje klucz o wartość $i w tablicy to pobierz obiekt spod tego indeksu. W przeciwnym razie utwórz nowy obiekt (żeby błędami/ostrzeżeniami nie sypał) i przypisz do $item

Aha i widzę błąd tam powinno być

$list[$i]
0

Aaa, już kumam. Dzięki.

0

Dzięki koledzy za pomoc. Działa jak trzeba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1