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 559
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 559
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 559
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 559
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 559
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 559
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
nospor
post
Post #21





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




Cytat
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...

No po stronie klienta tak wlasnie robisz. podajesz plik ktory chcesz uplodowac. ale po stronie serwera musisz sie do niego specjalnie dobrac tak jak w manualu jest napisane.
No ale jesli nie wierzysz to rob jak miales i powiedz czy ci sie upload zrobil i czy na serwerze widzisz pod zmienna $plik swoj plik. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
gladiror
post
Post #22





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

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


Ale mi chodzi o to, ze plik mam u siebie na komputerze, daje ścieżke na serwrze do pliku, np: c"\asda\plik.txt". Bo chodzi o to, ze z pliku klienta ma pobierać dane (to nie musi byc zabezpieczone w zaden sposob). W tym wypadku też muszę korzystać z tego co jest napisane w manualu?

BO w tej chwili wyskakuja mi blad:

Access denied for user: 'bigd_t@localhost' (Using password: YES)
Go to the top of the page
+Quote Post
nospor
post
Post #23





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




Cytat
Ale mi chodzi o to, ze plik mam u siebie na komputerze
A to ttrzeba bylo tak od razu. no ale zmylilo mnie to ze ty ten plik uplodowales.
No nie wazne. sek w tym ze chyba mysql nie pozwoli ci pobraz pliku z zewnetrznej sciezki. plik musi znajdowac sie w katalogu mysql/bazy danych. Przynajmniej mi sie inaczej nie udalo. Tak wiec to chyba konczy sprawe (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Albo ja dzis na tyle zamotany jestem ze cos przeoczylem

edit: co do errora to wyraznie ci napisalo ze user ktorego uzywasz nie ma praw
Go to the top of the page
+Quote Post
gladiror
post
Post #24





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

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


Nadałem uzytkownikowi prawa:

bigd_usert (Privileges: ALL PRIVILEGES)

Connection Strings
Perl $dbh = DBI->connect("DBI:mysql:bigd_t:localhost","bigd_usert","<PASSWORD HERE>");
php $dbh=mysql_connect ("localhost", "bigd_usert", "<PASSWORD HERE>") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("bigd_t");

i dalej wyskakuje blad:

Access denied for user: 'bigd_usert@localhost' (Using password: YES)

Cos jest nie tak..

Ten post edytował gladiror 13.07.2006, 10:49:20
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: 27.09.2025 - 18:37