Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyświetlanie kilku tabel z jednego pola bazy albo pliku
jolam
post
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


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 (IMG:http://forum.php.pl/style_emoticons/default/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ć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
skinner
post
Post #2





Grupa: Zarejestrowani
Postów: 16
Pomógł: 4
Dołączył: 18.02.2007

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


Podaj więcej informacji. Jaka baza MySQL? Pokaż strukturę i przykładowe dane.
Go to the top of the page
+Quote Post
jolam
post
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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ć.
Go to the top of the page
+Quote Post
jolam
post
Post #5





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
Weirdo
post
Post #6





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 30.05.2009

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


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.
Go to the top of the page
+Quote Post
jolam
post
Post #7





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


Dzięki, chyba już zrozumiałam (IMG:http://forum.php.pl/style_emoticons/default/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ć?
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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
Go to the top of the page
+Quote Post
jolam
post
Post #9





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


Już sobie poradziłam (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Spokojnie, zanim wszędzie będzie PHP 5.3, to jeszcze sporo wody w Wiśle upłynie. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Osobiście bojkotuję 5.3 czekając na 5.3.1 (IMG:http://forum.php.pl/style_emoticons/default/aaevil.gif)
Go to the top of the page
+Quote Post
Weirdo
post
Post #11





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 30.05.2009

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


Cytat(jolam @ 21.07.2009, 09:47:54 ) *
Dzięki, chyba już zrozumiałam (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Chyba najłatwiejsza forma weryfikacji ;-)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 3.10.2025 - 23:25