Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]odczyt danych z pliku txt, z txt do mysql
Maciek1705
post
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ł(IMG:style_emoticons/default/biggrin.gif)
plik txt wygląda tak
  1. id nazwa faktura data1 data2 data3 kwota
  2. 1 mmm 234 11-11-2010 12-12-2010 01-01-2011 100
  3. 2 nnn 235 10-10-2010 11-11-2010 12-12-2010 200

dane w pliku są rozdzielone znakami tabulacji.

a tak wygląda kod programu
  1. <?php
  2. $dane = file("nazwa_pliku.txt");
  3. if ($dane === false) {
  4. echo "Error - nie można odnaleść pliku";
  5. }
  6. else {
  7. for($i=0; $i<count($dane); $i++) {
  8. $dane[$i] = explode(" ", $dane[$i]);
  9.  
  10. $query = "insert into tabelka values ($dane[$i][0], $dane[$i][1], $dane[$i][2], $dane[$i][3], $dane[$i][4], $dane[$i][5], $dane[$i][6])";
  11. mysql_query($query)
  12. or die ("Wystąpiły problemy przy zapisywaniu danych");
  13. }
  14. }
  15. ?>

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ść (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Maciek1705
post
Post #2





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:
  1. $dane[$i] = explode("\t", $dane[$i]);
  2.  
  3. $qry_insert = 'INSERT IGNORE INTO tabelka VALUES ('.$dane[$i][0].', '.$dane[$i][1].', '.$dane[$i][2].', '.$dane[$i][3].', '.$dane[$i][4].', '.$dane[$i][5].', '.$dane[$i][6].')';
  4. mysql_query($qry_insert)
  5. or die ('Wystąpiły problemy przy zapisywaniu danych');
  6. if (mysql_affected_rows() === 0) {
  7. $qry_update = 'UPDATE tabelka SET pole1='.$dane[$i][1].', pole2='.$dane[$i][2].', pole3='.$dane[$i][3].', pole4='.$dane[$i][4].', pole5='.$dane[$i][5].', pole6='.$dane[$i][6].' WHERE id='.$dane[$i][0];
  8. mysql_query($qry_update)
  9. or die ("Wystąpiły problemy przy aktualizacji danych");
  10. }


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





Grupa: Zarejestrowani
Postów: 142
Pomógł: 49
Dołączył: 29.07.2010

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


Cytat(Maciek1705 @ 29.07.2010, 23:31:13 ) *
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:
  1. /* ... */

Tak
Cytat(Maciek1705 @ 29.07.2010, 23:31:13 ) *
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 :))
  1. function array_first($tab)
  2. {
  3. return isset($tab[0]) ? $tab[0] : false;
  4. }
  5.  
  6. /* ... */
  7.  
  8. /*
  9.   Zamiast: if (mysql_query($qry_check) == 1) {
  10. */
  11. if (array_first(mysql_fetch_row(mysql_query($qry_check))) == 1) {

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

Posty w temacie


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: 4.10.2025 - 00:43