Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tabelka w pętli
Forum PHP.pl > Forum > Przedszkole
xSlash
Witam. Mam cos takiego:
Kod
Baza: 1-1-1,2-2-4,5-2-1


  1. $zmienna1 = explode(',', $baza);
  2. for($i=0;$zmienna1[$i];$i++)
  3. {
  4. $zmienna2 = explode('-', $zmienna1[$i]);
  5.  
  6. //<table>
  7. //<tr><td></td></tr>
  8. //</table>
  9. }


Tabelka jest rozbudowana, wiec nie przepisywałem całosci. W tabelce jest powstawianych sporo zmiennych z pętli, wiec tabelka musi tez być w pętli? Bo jeżeli umieszcze ją przed "}" to wyswietlą ją $zmienna1[$i] razy... A chcialbym zeby wyswietlało raz.
Ilware
deklaracja samej tabelki nie musi być w pętli,

  1.  
  2. $zmienna1 = explode(',', $baza);
  3. echo "<table>";
  4. for($i=0;$zmienna1[$i];$i++)
  5. {
  6. $zmienna2 = explode('-', $zmienna1[$i]);
  7. echo "<tr><td>".$zmienna2."</td></tr>";
  8. }
  9. echo "</table>";
xSlash
Teoretycznie, ale tabelka jest 3x4.
Musiałbym zrobic.

<table>
<tr>for{<td></td>}for{<td></td>}for{<td></td>}</tr>
<tr>for{<td></td>}for{<td></td>}for{<td></td>}</tr>
<tr>for{<td></td>}for{<td></td>}for{<td></td>}</tr>
<tr>for{<td></td>}for{<td></td>}for{<td></td>}</tr>
</table>

A przy takim wydluzonym skrypcie jaki to bd taki chaos... Dlatego szukam łatwiejszego sposobu na wyswietlanie zapętlonych danych w niezapętlonej tabeli.
mortus
Nie wiem w czym problem, wystarczy przecież najprostsza podwójna pętla.
  1. $wiersze = explode(',', $baza);
  2. foreach($wiersze as $wiersz) {
  3. $kolumny = explode('-', $wiersz);
  4. echo '<tr>';
  5. foreach($kolumny as $kolumna) {
  6. echo '<td>'.$kolumna.'</td>';
  7. }
  8. echo '</tr>';
  9. }
Ilware
Uważam że robisz problem w miejscu, którym go nie ma
użyj while zamiast for, bo nie wiem jak wygląda całość.

  1. dbQuery = mysql_query("SELECT 'to co chcesz' FROM tableName WHERE `cos` = 'cos'");
  2. $str = "<table>";
  3. while($dane = getRow){ // nie wiem na czym pracujesz, jakas funkcja ktora pobeira wiersze
  4. $str .= "<tr><td>".$dane[0]."</td><td>".$dane[1]."</td></tr>"; //itd
  5. }
  6. $str .="</table>";
  7. echo $str;
xSlash
Nie znam sie za bardzo. Probowałem z foreach i while i cos nie wychodzi.
Jest to ekwipunek postaci: 1-1-1
Oznacza 1okno z 1strony i przedmiot z id = 1
2-5-1
Oznacza 2okno z 5strony i przedmiot z id = 1

Chce zrobic, zeby była tabela 3x4...
Jezeli w ciągu istnieje 1-1-x to 1 okno na 1 stronie jest z background = X jezeli w ciągu nie ma 1-1-X to background = puste.jpg

Cos takiego... I na serio nie mam pojecia jak to zrobic ;/

Moja pierwsza forma wyswietlała, ale w taki sposob, ze kazdy przedmiot (ciag miedzy jednym , a drugim ,) był wyswietlany w nowej tabeli (3x4), a nie na tej samej, bo petla powtarzała całą tabele
mortus
Przecież rozwiązanie podałem jak na dłoni. Pominąłem jedynie znaczniki <table> i </table>, ale co to za problem, wstawić je we właściwym miejscu.
  1. $wiersze = explode(',', $baza);
  2. echo '<table>';
  3. foreach($wiersze as $wiersz) {
  4. $kolumny = explode('-', $wiersz);
  5. echo '<tr>';
  6. foreach($kolumny as $kolumna) {
  7. echo '<td>'.$kolumna.'</td>';
  8. }
  9. echo '</tr>';
  10. }
  11. echo '</table>';

A tak w ogóle, to proszę przemyśleć definicję problemu, bo ciężko cokolwiek wywnioskować ze zlepku zdań:
Cytat
Jest to ekwipunek postaci: 1-1-1
Oznacza 1okno z 1strony i przedmiot z id = 1
2-5-1
Oznacza 2okno z 5strony i przedmiot z id = 1

Skąd my mamy wiedzieć, co to jest 2 okno czy 1 strona?
xSlash

$_GET['str'] = wybrana strona
$_GET['okno'] = wybrane okno (zgodnie z tym co wyzej)

Co do Twojej petli. Wyswietla tylko 3x3, bo w bazie są XXX,XXX,XXX. Nie bierze pod uwage, ze mimo, ze nie ma jakegos ciagu (czyli NP czwartego XXX) nalezy wyswietlic tr/td tyle, ze z innym tlem (pustym).

W skrócie. Tabela 3x4. Jezeli w ciagu sa dane okno (numer okna i strona) to tlo = bla.jpg, jezeli taki ciag nie istnieje to okno tez jest pokazywale ale z tlem = puste.jpg
mortus
Chyba chcesz zrobić tabele 4x3, a nie 3x4, bo to zdecydowana różnica.

Tabela 4x3:
  1. $mlw = 4; // maksymalna liczba wierszy
  2. $olw = 0; // obecna liczba wierszy
  3. $wiersze = explode(',', $baza);
  4. echo '<table>';
  5. foreach($wiersze as $wiersz) {
  6. $kolumny = explode('-', $wiersz);
  7. echo '<tr>';
  8. foreach($kolumny as $kolumna) {
  9. echo '<td>'.$kolumna.'</td>';
  10. }
  11. echo '</tr>';
  12. $olw++;
  13. }
  14. if($olw < $mlw) {
  15. for($i = 0; $i < $mlw-$olw; $i++) {
  16. echo '<tr><td></td><td></td><td></td></tr>';
  17. }
  18. }
  19. echo '</table>';


Tabela 3x4:
  1. $mlk = 4; // maksymalna liczba kolumn
  2. $wiersze = explode(',', $baza);
  3. echo '<table>';
  4. foreach($wiersze as $wiersz) {
  5. $olk = 0; // obecna liczba kolumn
  6. $kolumny = explode('-', $wiersz);
  7. echo '<tr>';
  8. foreach($kolumny as $kolumna) {
  9. echo '<td>'.$kolumna.'</td>';
  10. $olk++;
  11. }
  12. if($olk < $mlk) {
  13. for($i = 0; $i < $mlk-$olk; $i++) {
  14. echo '<td></td>';
  15. }
  16. }
  17. echo '</tr>';
  18. }
  19. echo '</table>';
xSlash
Powiedzmy, ze dziala, ale w momencie
  1. foreach($kolumny as $kolumna) {
  2. echo '<td>'.$kolumna.'</td>';
  3. }

W kolumnie wyswietla jakies dziwne cyfry (znaczy... od 1 do 4), ktore nie sa mi potrzebne. Jak zrobic, zeby wyswietlalo trzecia cyfre z bazy.
Czyli jezeli jest 1-1-1 to wyswietla na 1 stronie, w 1 oknie cyfre 1. Jezeli 2-5-4 to wyswietla na 5 stronie, w 2 oknie cyfre 4.

Na moja (nienajlepsza) logike w <td> powinno byc umieszczone $kolumny[2] (bo liczy sie od zera), ale tak nie dziala bo wyswietla:
1 1 1
2 2 2
3 3 3
1 1 1
(nie wiem wgle skad te cyfry bierze).

Jezeli nie ma w ciagu X-X-X to zeby w tabelce pokazywalo "", czyli nic.

P.S. Prosze o jeszcze troche cierpliwosci dla mojej glupoty wink.gif


EDIT:
W ogole nie rozpoznaje kolejno komorek. Tylko wierszami jedzie.
Jezeli pierwsza kolumna jest
1 X X
3 X X
6 X X
2 X X
To nie widzi tego jako osobne komorki czyli jedzie wierszami:
1 1 1
3 3 3
6 6 6
2 2 2
Wiec nie do konca o to chodzilo
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.