Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyświetlanie kilku tabel z jednego pola bazy albo pliku
Forum PHP.pl > Forum > Bazy danych
jolam
Nie jestem pewna, czy to dobry dział, ale chyba tak:) Mam w bazie danych w jednym polu kilka tabel. To znaczy, kolejne wiersze tabeli są oddzielone znakiem końca linii, a pusta linia (zawiera tyko znak końca linii) oddziela dwie tabele. I mam bardzo duży kłopot z ich poprawnym wyświetleniem. Chciałabym, żeby pierwszy wiersz każdej tabeli był wierszem nagłówkowym. A do tego, żeby wszystkie wiersze miały na przemian zdefiniowane klasy (parzyste będą zielone, a nieparzyste różowe). Jeśli mam jedną tabele, to potrafię wszystko zrobić., ale jeśli jest ich kilka, to już nie sad.gif
Próbowałam najpierw odczytać takie dane z pliku, żeby wyeliminować problemy z bazą, ale też nie umiem. Jedyne co wymyśliłam, to dwukrotne analizowanie tekstu:1 - rozdzielam tabele, 2 - wstawiam wiersz nagłówkowy i koloruję wiersze. Ale to bardzo zagmatwane jest. Błagam pomóżcie mi to rozwiązać.
skinner
Podaj więcej informacji. Jaka baza MySQL? Pokaż strukturę i przykładowe dane.
jolam
Struktura jest taka:
---------początek pliku/pola w bazie ------
a11;;
a21;a22;a23
a31;a32;a33
a41;a42;a43

b11;;
b21;b22;b23
b31;b32;b33
------koniec pliku/pola w bazie---------------
i teraz coś takiego chcę wyświetlić. Jak widzisz jest ot kilka tabel i chciałabym aby każda tabela miała w pierwszym wierszu komórki nagłówkowe <th> i w dodatku aby wszystkie wiersze miały na przemian dodane klasy do do <tr>. Największa trudność to rozpoznanie osobnych tabel w całym polu, bez 2 przebiegów po pliku. A baza do Sqlite.
Fifi209
Chodziło mu bardziej o coś takiego:

`nazwatabeli`

Pola:
`id` int not null auto_increment
`naglowek` varchar(255)

etc.

Bo to co Ty napisałaś jako strukturę....jest...dziwne haha.gif

W dodatku opis problemu jest zagmatwany, napisz dokładnie po kolei co chcesz otrzymać a potem mniej więcej jak próbowałaś to zrobić.
jolam
w bazie mam jedną tabelę, a w niej:
numerID | tekst | tabele
i to co napisałam wcześniej to jest w polu tabele.
I tam w tym polu jest jedna albo dwie albo trzy tabele, każda oddzielona pustym wierszem, a zapis kolumn i wierszy w tych najmniejszych tabela jest tak jak w CSV. Bo ja przekleiłam z excela do bazy te tabele. Ale nie potrafię ich wyświetlić jako kilku tabel z na przemian kolorowanymi wierszami i wierszem nagłówkowym. Dałabym rade to zrobić ale musiałabym całe pole analizowac dwukrotnie, raz szukać tabel, a raz po to by nadac im atrybuty class. Prosze pomóżcie.
Weirdo
Temat do przeniesienia.

1. W PHPie robisz to tak:
  1. <?php
  2. $dane = wczytaj(); // czy z bazy czy z pliku, nie ważne
  3. // 1. Rozbij całą treść na "tabele", czyli wg trzech znaków nowej lini (jeśli dobrze zrozumiałem)
  4. $tabele = explode("\n\n\n",$dane);
  5. // Drukowanie każdej tabeli - w pierwszej pętli
  6. foreach($tabele AS $tabela) {
  7. $tabela = explode("\n",$tabela);
  8.  $iloscWierszy = count($tabela);
  9.  
  10.  // wypisanie nagłówków
  11.  echo '<table....';
  12.  $tabela[0] = explode(";",$tabela[0]);
  13.  foreach($tabela[0] AS $th) {
  14.    echo '<th>',$th,'</th>';
  15.  }
  16.  echo '</tr>';
  17.  // wypisanie wierszy
  18.  for($i=1;$i<$iloscWierszy;$i++) {
  19.    $tabela[$i] = explode(";",$tabela[$i]);
  20.    echo '<tr>';
  21.    foreach($tabela[$i] AS $td) {
  22.      echo '<td>',$td,'</td>';
  23.    }
  24.    echo '</tr>';
  25.  }
  26.  echo '</table>';
  27. }
  28. ?>


Ok, pisane z palca, może nie działać, ale logika oddana.
Kolorowanie wierszy bez problemu - sprawdzasz czy $i jest parzyste, jeśli tak dajesz klasę z jednym kolorem, jeżeli nie z drugim.
jolam
Dzięki, chyba już zrozumiałam smile.gif

Wyjaśnij mi tylko ten fragment:
$tabele = explode("\n\n\n",$dane);
czy nie powinnam wpisać "\r\n\r\n" zamiast "\n\n\n"? Jedna para \r\n na zakończenie poprzedniej tabelki i jedna na wiersz przerwy, który jest pusty. Popraw mnie jeśli jednak źle myślałam?

I jeszcze jedna ważna sprawa! W polach tabeli CSv czasami są średniki, wtedy są też " czyli zwykłe explode( ';' nie jest dobre. Jak to poprawić?
erix
Poszukaj gotowej klasy do przetwarzania CSV, będzie z głowy problem ze średnikami.

Cytat
czy nie powinnam wpisać "\r\n\r\n" zamiast "\n\n\n"? Jedna para \r\n na zakończenie poprzedniej tabelki i jedna na wiersz przerwy, który jest pusty. Popraw mnie jeśli jednak źle myślałam?

http://forum.php.pl/index.php?showtopic=84239
jolam
Już sobie poradziłam smile.gif A ze średnikami nie będzie problemu bo niedługo na tą wersje 5,3 się planuję przerzucić. A czy powiedziałbym mi ktoś, bo ja nie bardzo się w tym potrafiłam zorientować czy ona jest już stabilna? Wydaje mi się, że nie ale może się pomyliłam.
erix
Spokojnie, zanim wszędzie będzie PHP 5.3, to jeszcze sporo wody w Wiśle upłynie. tongue.gif

Osobiście bojkotuję 5.3 czekając na 5.3.1 aaevil.gif
Weirdo
Cytat(jolam @ 21.07.2009, 09:47:54 ) *
Dzięki, chyba już zrozumiałam smile.gif

Wyjaśnij mi tylko ten fragment:
$tabele = explode("\n\n\n",$dane);
czy nie powinnam wpisać "\r\n\r\n" zamiast "\n\n\n"? Jedna para \r\n na zakończenie poprzedniej tabelki i jedna na wiersz przerwy, który jest pusty. Popraw mnie jeśli jednak źle myślałam?

I jeszcze jedna ważna sprawa! W polach tabeli CSv czasami są średniki, wtedy są też " czyli zwykłe explode( ';' nie jest dobre. Jak to poprawić?


Najłatwiej będzie, jeżeli sprawdzisz czy działa na Twoich plikach smile.gif Nie wiem, jak są zapisywane (czy ręcznie pod Windowsem, czy pod Linuxem, czy z jakiegoś programu generowane...).
Nie podałem Ci idealnego rozwiązania - pokazałem przykładowe podejście do tematu.

Oczywiście - najłatwiej dla czegoś ustandaryzowanego (jeśli jest to w pełni format CSV, chyba rzeczywiście najłatwiej przejrzeć dostępne klasy). Jeżeli jednak Twój format nie jest standaryzowany lub możliwe są różne wariacje - musisz sprawdzać więcej warunków. Możesz np. korzystać z strpos() i wyszukiwać jaki jest format danych i w zależności od niego wykonywać dalsze operacje.

Najnowszą stabilną wersję znajdziesz zawsze pod adresem: http://www.php.net/downloads.php winksmiley.jpg
Chyba najłatwiejsza forma weryfikacji ;-)
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.