Ogólnie potrzebuje wrzucić do bazy dane z pliku tekstowego, który jest wrzucany przez użytkownika.
Problem pojawia się w tym, że do bazy mają trafić dane z tym, że:
a) nie wszystkie jakie są w pliku

Poprawny "format" pliku jaki powinien być wczytywany do bazy w środku wygląda tak i ma rozszerzenie .txt (zdjęcie 1):
Formatowanie pliku powinno wyglądać tak, że: Przed żadną z linijek nie ma spacji, po każdym i przed każdym słowem jest tylko jedna spacja. Miedzy linijkami w pliku nie ma pustych wierszy. po słowie Attrubutes nazwy nie mogą zawierać polskich znaków i spacji.
http://ifotos.pl/zobacz/wygladpli_qnpraqh.jpg
Plik jaki może się trafić może wyglądać tak(zdjęcie 2):
http://ifotos.pl/zobacz/wygad-pli_qnpraas.jpg
W ramkach zaznaczyłam dane, które powinny trafić do tabel bazy (różne kolory oznaczają różne tabele).
Zrobiłam upload gdzie plik jest odbierany tak jak być powinien.
Moim pierwszym pomysłem było zrobienie wyłuskania danych znajdujących się po "słowach kluczowych" (TABLE, ATTRIBUTES,OBJECTS itd) w ten sposób, że:
Po pliku poruszam się za pomocą wskaźnika.
I dalej (wiem, że mało profesjonalnie) trochę metodą na cwaniaka wyłuskuje to co mi potrzebne.
mysql_query ("INSERT INTO tabela(nazwa_tabeli,users_id_usera) VALUES ('$nazwa_tabeli','$id_usera')"); for ($i = 1; $i <= $liczba_atrybutow; $i++) { mysql_query ("INSERT INTO atrybut(tabela_id_tabeli, nazwa_atrybutu, typ, nr_kolumny ) VALUES('$tabela_id_tabeli', '$nazwa_atrybutu[0]' , '$nazwa_atrybutu[1]','$i')"); if($i == $liczba_atrybutow) } //pętla wstawiająca do bazy liczby od 1 do liczby obiektów, bo obiekt musi mieć swoją nazwę for ($no = 1; $no <= $nazwa_obiektu; $no++) { mysql_query ( "INSERT INTO obiekt (tabela_id_tabeli, nazwa_obiektu) VALUES('$tabela_id_tabeli', '$no')"); } for($i = 0; $i< $liczba_atrybutow; $i ++) { SELECT atrybut.id_atrybutu, obiekt.id_obiektu, $nazwa_wartosci[$i] FROM atrybut, obiekt WHERE atrybut.tabela_id_tabeli = $tabela_id_tabeli AND obiekt.tabela_id_tabeli = $tabela_id_tabeli limit 1"); } } }
Ogólnie na tą chwile wyciąganie danych jakie są mi potrzebne działa a dane są zapisywane do bazy tak jak być powinny,
ale tylko i wyłącznie wtedy kiedy plik wygląda jak na zdjęciu nr 1.
W momencie pojawienia się więcej niż jednej spacji czy entera dodawanie do bazy zaczyna się rozjeżdżać i dodają się poucinane fragmenty z pliku.
Niestety jak wiadomo jeśli użytkownik dodaje plik może okazać się, że w pliku po słowach kluczowych czy wartościach od 1 do 24 są puste linie lub więcej spacji i teraz moje pytanie brzmi jak rozwiązać taką sytuacje?
Jak wczytać dane z pliku w sposób profesjonalny ? W sposób, który uchroni mnie przed wczytaniem do bazy głupot? Jak zabezpieczyć się przed wczytaniem pliku który ma format jak na zdjęciu drugim?
Wszystkie porady i linki do pomocnych tematów mile widziane. Jeśli coś napisałam niejasno chętnie doprecyzuje to co jest niezrozumiałe.