Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [php] i [mysql] wrzucenienie danych z txt do mysql, prosba o pomoc/wskazówkę
gladiror
post
Post #1





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


Witam!
Mam plik, który zawiera nastepujace dane:

"SZT" "AKUM. PANASONIC P-6P/4B PR R6/2100 NIMH" "0101-99017" "22" 6,74 9,50 12,000 "BAT" "SKL"
"SZT" "AKUMULATOR CAMELION R6 NC-AA800-B4" "0710-01002" "22" 2,59 3,60 16,000 "BAT" "SKL"

Każda nazwa jest od siebie oddzielona tabulatorem. Jest 9 nazw w 1 wierszu, w drugim tez 9 itd. Jak takie coś wrzucić do bazy danych zeby SZT byla w kolumnie ze SZT, nazwa wyrobu tez w jednej kolumnie itd.(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Chodzi mi o to, ze wklejam do textarea cala zawartosc pliku, klikam wyslij i dane zostana wrzucone do bazy danych...

Prosze o jakąś pomoc...

Ten post edytował gladiror 12.07.2006, 10:33:06
Go to the top of the page
+Quote Post
nasty
post
Post #2





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


A czy te dane beda wklejane w odpowiednum porzadku czy skrypt ma sie domyslac co gdzie i jak ... ?
Go to the top of the page
+Quote Post
gladiror
post
Post #3





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


Maja byc wklejane w odpowiednim porzadku, to znaczy:

"SZT"
"AKUM. PANASONIC P-6P/4B PR R6/2100 NIMH"
"0101-99017"
"22"
6,74
9,50
12,000
"BAT"
"SKL"

"SZT"
"AKUMULATOR CAMELION R6 NC-AA800-B4"
"0710-01002"
"22"
2,59
3,60
16,000
"BAT"
"SKL"


Po kolei kazdy wiersz ma ten sam porzadnek.
Go to the top of the page
+Quote Post
krzyszbi
post
Post #4





Grupa: Zarejestrowani
Postów: 251
Pomógł: 13
Dołączył: 15.09.2005

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


uzyj explode po tabulatorze \t dostaniesz dane w tablicy a z tymchyba sobie poradzisz
Go to the top of the page
+Quote Post
Ludvik
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Więc robisz to w następujący sposób. Najpierw pobierasz dane z pliku funkcją file" title="Zobacz w manualu php" target="_manual. Każdy element tablicy odpowiada jednemu wierszowi. Następnie musisz rozdzielić dane we wszystkich wierszach. Do tego służy funkcja explode" title="Zobacz w manualu php" target="_manual. Wygląda to mniej więcej tak do tej pory:
  1. <?php
  2. $elements = file('nazwa_pliku');
  3.  
  4. for ($i = 0, $rows = count($elements); $i < $rows; $i++) {
  5. $elements = explode("t", $elements);
  6. }
  7. ?>

W tej chwili każdy element tablicy $elements ma pola od 0 do 8, gdzie każde pole odpowiada kolejnym kolumnom. Wypadało by jeszcze usunąć cudzysłowy przed wstawieniem danych. Żeby nie męczyć się z każdym polem osobno, zrobimy sobie tablicę z numerami pól, w których dane są zamknięte w cudzysłowy. Nasza pętla będzie wyglądać tak:
  1. <?php
  2. $quoted = array(0, 1, 2, 3, 7, 8);
  3.  
  4. for ($i = 0, $rows = count($elements); $i < $rows; $i++) {
  5. $elements[$i] = explode("t", $elements[$i]);
  6. foreach ($quoted as $quoted_column) {
  7. $str &= $elements[$i][$quoted_column];
  8.  $str = substr($str, 1, strlen($str) - 2);
  9. }
  10. }
  11. ?>

Teraz na końcu pętli for możesz dodać zapytanie, które wstawi sobie te dane. Podglądnij sobie sytuację funkcją var_dump" title="Zobacz w manualu php" target="_manual.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Więc robisz to w następujący sposób. Najpierw pobierasz dane z pliku funkcją file
To nie jest plik tylko textarea (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jesli to mialby byc plik to jest bardzo szybka metoda:
http://forum.php.pl/index.php?showtopic=49...=0&#entry273398
Go to the top of the page
+Quote Post
Ludvik
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Też racja, ale czy MySQL usunie cudzysłowy? Za bardzo nie zajmowałem się importem w MySQL, natomiast pgsql chyba nie ujmował łańcuchów znakowych w cudzysłowy.

Nie doczytałem, że to textarea... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Wtedy zamieniasz pierwszą instrukcję na
  1. <?php
  2. $elements = explode("n", $pole_z_danymi);
  3. ?>


Ten post edytował Ludvik 12.07.2006, 11:30:53
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Też racja, ale czy MySQL usunie cudzysłowy?
Teoretycznie ta opcja powinna pomoc:
ENCLOSED BY

ale nie testowalem ino wyczytalem w manualu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
gladiror
post
Post #9





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


Nospor - zmieniłem ten kod dla własnych potrzeb, ale coś nie chce wrzucić mi danych do bazy... Nie wyskakuje żaden błąd.

Dane są zapisywane w pliku jak powyżej. Może cudzysłowy robią problem??
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no jakis blad musi wyskakiwac. ty to robisz z poziomu php? a dales mysql_error() ?
Go to the top of the page
+Quote Post
gladiror
post
Post #11





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


Zrobilem cos takiego:

  1. <form action="index.php">
  2. <input type="File" name="plik">
  3. <input type="submit" name="submit">
  4. </form>


  1. <?
  2. if(isset($submit))
  3. {
  4. $dbh=mysql_connect ("localhost", "bigd_t", "") or die ('I cannot connect to the database because: ' . mysql_error());
  5. mysql_select_db ("bigd_t"); 
  6.  
  7. $zapytanie = "LOAD DATA INFILE '$plik' INTO TABLE artykuly (symbol_jm,nazwa_art,symbol_art,nazwa_vat,cena1,cena2,zapas,keteg_aso,grupa_
    zam)FIELDS TERMINATED BY ' '  LINES TERMINATED BY 'n'"
    ;
  8. $wykonaj = mysql_query($zapytanie);
  9.  
  10. }
  11. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no mowilem zebys dal mysql_error()...
  1. <?php
  2. $wykonaj = mysql_query($zapytanie) or die(mysql_error());
  3. ?>


pozatym zarzuc zapytanie tworzate tabele. poteszcze u siebie
edit: pozatym do pliku co uploudujesz to sie dobera inaczej. poczytaj se cos o uplodzie (najlepiej w manualu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )
Go to the top of the page
+Quote Post
gladiror
post
Post #13





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


Taki błąd wyskoczył:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS TERMINATED BY ' ' LINES TERMINATED BY ' '' at line 1
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




z tego co wyczytalem w manualu, to lista kolumn musi byc na koncu. pozaty miales pare bugow w zapytaniu
  1. LOAD DATA INFILE 'ala' INTO TABLE artykuly
  2. FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n'
  3. (symbol_jm,nazwa_art,symbol_art,nazwa_vat,cena1,cena2,zapas,keteg_aso,grupa_zam);

no i pozatym jak ci pisalem zle pobierasz plik
Go to the top of the page
+Quote Post
gladiror
post
Post #15





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


Do pobierania pliku mam użyć funkcji is_uploaded_file (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Co oznacza 'ala' w LOAD DATA INFILE 'ala' (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Czyżby nazwe pliku??

Ten post edytował gladiror 12.07.2006, 12:26:11
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
no to zes mnie zagial... 'ala' to nazwa pliku. wstawilem sobie do testow. przeciez ja nie mam twojej zmiennej $plik, nieprawdaz?

Co do uploadu i dobieranie sie do plikow:
http://pl.php.net/manual/pl/features.file-upload.php
Go to the top of the page
+Quote Post
Ludvik
post
Post #17





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Nie wiem czy php obsługuje to, ale jest słowo kluczowe LOCAL, które przesyła plik do serwera z maszyny klienta. Jeżeli serwer stoi na maszynie klienta to podajesz ścieżkę bezwzględną do pliku, żeby nie było problemu. Rozdzielanie tabulatorami i znakami nowej linii jest domyślnie ustawione. Dodałem obsługę tych cudzysłowów.
  1. LOAD DATA LOCAL INFILE 'sciezka_do_pliku' INTO TABLE artykuly OPTIONALLY ENCLOSED BY '"'
  2. (symbol_jm,nazwa_art,symbol_art,nazwa_vat,cena1,cena2,zapas,keteg_aso,grupa_zam);

Sprawdź to...

Ten post edytował Ludvik 12.07.2006, 12:33:50
Go to the top of the page
+Quote Post
gladiror
post
Post #18





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


Ludvik - i to bedzie działało na serwerze w necie??
Go to the top of the page
+Quote Post
Ludvik
post
Post #19





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Szczerze mówiąc to wątpię, żeby rozszerzenie mysql w php obsługiwało słowo kluczowe LOCAL. Póki co, to nie mam gdzie sprawdzić czy to działa. Tak czy inaczej nawet z pominięciem LOCAL możesz umieścić plik na serwerze, gdzie stoi baza danych (zwykle na tej samej maszynie stoi serwer http) i podać po prostu bezwzględną ścieżkę do niego.

Musisz po prostu popróbować i poczytać manual MySQL.
Go to the top of the page
+Quote Post
gladiror
post
Post #20





Grupa: Zarejestrowani
Postów: 398
Pomógł: 0
Dołączył: 13.07.2005
Skąd: Lublin

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


Mi nie działa to...

Nospor - jeżeli chodzi o ten upload to nie mozna dac normalnie ściezki do pliku pod zmienna? Kiedys tak robilem i bez problemu kopiowalo mi zdjęcia na serwer...
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 23.08.2025 - 18:30