![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 157 Pomógł: 3 Dołączył: 15.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam serdecznie bardzo bym Was drodzy forumowicze prosił o pomoc gdyż nie wiem czy dobrze coś robię. Mianowicie chcę zrobić prosty program co po wybraniu pliku txt odczyta jego zawartość a później zawartość tą wstawi do bazy. Jeśli np wiersz o takim identyfikatorze by już istniał to żeby go nadpisał z update ował
![]() plik txt wygląda tak
dane w pliku są rozdzielone znakami tabulacji. a tak wygląda kod programu
nie wiem czy dobrze to zrobiłem jak na stan obecny, nie wiem też także jak rozwiązać kwestie sprawdzania czy wiersz o podanym id istnieje i czy ma zostać nadpisany. Proszę o pomoc i wyrozumiałość ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 664 Pomógł: 169 Dołączył: 8.01.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Osobiście to bym zamienił ten separator na jakiś znak np. ';' (średnik),a jak już tab to zapisany w ten sposób '\t', po prostu nie mam do niego zaufania:) i nie jestem pewien, czy taka forma będzie poprawna na każdym systemie.
Co do sprawdzania czy istnieje, to:
jeżeli zapytanie zwróci 1 to update, w innym wypadku dodaj. I jeszcze te zmienne ($dane[$i][0]) wrzuciłbym w klamerki: {$dane[$i][0]}, bo w innym wypadku ci ich nie odczyta. Ten post edytował bastard13 29.07.2010, 16:00:47 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 157 Pomógł: 3 Dołączył: 15.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Aha dzięki wielkie, a mam pytanko jeszcze bo nie mam na razie jak sprawdzić czy to działa ale chodzi mi o to czy nie potrzeba jakiegoś wyrażenia regularnego żeby dzielić poszczególny wiersz na poszczególne części no bo nie mam możliwości zmienienia pliku txt żeby był rozdzielony średnikami niestety jest jak jest i rozdzielony jest tabulatorami chodzi mi jedynie o to czy to co mam zaprezentowane niżej będzie odczytywać plik txt i wszystkie dane do ostatniego wiersza będzie dodawał do tabeli no chyba że już jaki wiersz jest to go zaktualizuje. Mówiąc krócej weźmie wiersz rozdzieli na składowe bez tabulacji i te składowe wstawiał do bazy i tak do ostatniego wiersza. Ale namotałem heh:D a oto wynik końcowy programu:
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 142 Pomógł: 49 Dołączył: 29.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ten fragment nie zadziała:
brakuje mysql_fetch_row() (lub assoc()). Ten zresztą też: Musisz zamienić cudzysłowy wokół "\t" na podwójne. Samo eksplodowanie jest prawidłowe (nie musisz używać wyrażeń regularnych, o ile jesteś na 100% pewien, że zawsze między kolejnymi kolumnami będzie dokładnie jedna tabulacja). Moim ulubionym, starym sposobem na zrobienie UPDATE jeśli wiersz już istnieje było (pseudokod): INSERT IGNORE INTO `...` VALUES (...) if (mysql_affected_rows() === 0) { UPDATE `...` SET ... WHERE ... } IGNORE jest konieczne, inaczej MySQL zwróci ostrzeżenie. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 157 Pomógł: 3 Dołączył: 15.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
ok dziękuję za wskazówki cudzysłów poprawiony, czyli według Twojej sprawdzonej metody rozumiem że zawartość pętli for wyglądała by tak:
a według mojego sposobu to w sumie nie wiem jak użyć tej funkcji mysql_fetch_row() bo sprawdzałem w manualu i jest napisane że pobiera jeden wiersz z tabeli a w sumie mi chodzi o te że ma sprawdzić czy wiersz o danym od już istnieje jeśli tak to id zostaje bez zmian aktualizuje się jedynie zawartość. MySQL dopiero poznaje stąd brak wiedzy na temat zastosowania praktycznego. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 142 Pomógł: 49 Dołączył: 29.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
ok dziękuję za wskazówki cudzysłów poprawiony, czyli według Twojej sprawdzonej metody rozumiem że zawartość pętli for wyglądała by tak:
Tak a według mojego sposobu to w sumie nie wiem jak użyć tej funkcji mysql_fetch_row() bo sprawdzałem w manualu i jest napisane że pobiera jeden wiersz z tabeli a w sumie mi chodzi o te że ma sprawdzić czy wiersz o danym od już istnieje jeśli tak to id zostaje bez zmian aktualizuje się jedynie zawartość. MySQL dopiero poznaje stąd brak wiedzy na temat zastosowania praktycznego. Np. tak (funkcja narzędziowa dodana dla wygody :))
array_first() zwraca pierwszy element wektora (lub false), mysql_fetch_row() zwraca wektor, w którym kolejne wartości to kolejne kolumny wyciągnięte z ostatniego zapytania (mysql_query()) - czyli, w tym wypadku, pierwszą kolumną będzie count(*) - to, o co nam chodzi. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Np. tak (funkcja narzędziowa dodana dla wygody ![]()
array_first() zwraca pierwszy element wektora (lub false), mysql_fetch_row() zwraca wektor, w którym kolejne wartości to kolejne kolumny wyciągnięte z ostatniego zapytania (mysql_query()) - czyli, w tym wypadku, pierwszą kolumną będzie count(*) - to, o co nam chodzi. Od tego jest mysql_result. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 142 Pomógł: 49 Dołączył: 29.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 157 Pomógł: 3 Dołączył: 15.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
dziękuje za pomoc wszystko poprawione według wskazówek. Wszyscy dostaną po "Pomógł"
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.07.2025 - 21:04 |