Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][sql], update bazy z pliku
kozioł
post 20.11.2007, 09:47:56
Post #1





Grupa: Zarejestrowani
Postów: 209
Pomógł: 0
Dołączył: 9.12.2006

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


Witam ,

czy mozna zrobić tak , aby zasilic bazę SQL wskazując na plik np . txt ?

chodzi mi o to że chcę cyklicznie zasilać bazę sql , ale danę pierwotne mam w ACCESS-e , i zawsze bedzie tak że najpierw ACESS , a potem z tego muszę dane umieścić w tabeli w SQL-u.


dziękuję za pomoc



pozdrawiam
Go to the top of the page
+Quote Post
kossa
post 20.11.2007, 10:12:38
Post #2





Grupa: Zarejestrowani
Postów: 1 165
Pomógł: 9
Dołączył: 9.04.2002
Skąd: Toruń

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


Można.

Najlepiej stwórz plik CSV, dane rozdziel średnikami i "wciągnij" taki plik do skryptu php, parsuj po średnikach (każdy rekord to nowa linia) i na podstawie danych z pliku utwórz zapytanie sql, wykonaj je i przejdź do kolejnej linii aż do uzyskania końca pliku. Poczytaj w manualu o funkcjach php dot. csv.

Łukasz

Ten post edytował kossa 20.11.2007, 10:35:12


--------------------
Go to the top of the page
+Quote Post
kozioł
post 20.11.2007, 17:06:17
Post #3





Grupa: Zarejestrowani
Postów: 209
Pomógł: 0
Dołączył: 9.12.2006

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


ok ,

pokombinuję ,

a wcześniej zajrzę do manuala



dzięki za wskazówki

więc tak ,

mam taki skrypt:

  1. <?php
  2. $fieldseparator = ";";
  3. $lineseparator = "\n";
  4.  
  5. $csvfile = "csv.csv"; //jak zrobie tak to jest ok//
  6. $csvfile = $_POST['plik']; //ale to juz mi nie działa , info. nie znaleziono pliku//
  7.  
  8. $save = 1;
  9.  
  10.  
  11. if(!file_exists($csvfile)) {
  12. echo "nie znaleziono pliku.\n";
  13. }
  14.  
  15. $file = fopen($csvfile,"r");
  16.  
  17. if(!$file) {
  18. echo "nie mogę otworzyc pliku.\n";
  19. }
  20.  
  21. $size = filesize($csvfile);
  22.  
  23. if(!$size) {
  24. echo "pusty plik.\n";
  25. }
  26.  
  27. $csvcontent = fread($file,$size);
  28.  
  29. fclose($file);
  30.  
  31. $conn = mysql_connect("localhost", "root", "vertrigo") or die(mysql_error());
  32. mysql_select_db("bazy",$conn) or die ("nie mogę połączyć z bazą");
  33.  
  34. $lines = 0;
  35. $queries = "";
  36. $linearray = array();
  37.  
  38. foreach(split($lineseparator,$csvcontent) as $line) {
  39.  
  40. $lines++;
  41.  
  42. $line = trim($line,\t");
  43.  
  44. $line = str_replace("r","",$line);
  45.  
  46.  
  47. $line = str_replace("'","'",$line);
  48.  
  49.  
  50. $linearray = explode($fieldseparator,$line);
  51.  
  52. $linemysql = implode("','",$linearray);
  53.  
  54.  
  55. $query = "insert into baza values('$linemysql');";
  56.  
  57.  
  58. $queries .= $query . "\n";
  59.  
  60. mysql_query($query);
  61. }
  62.  
  63.  
  64.  
  65. echo "dopisano $lines pozycje.\n";
  66.  
  67.  
  68. ?>



i nie wiem jak zrobic tak żeby działało , żeby wbrać w formularzy plik z dowolnej lokalizacji na dysku i przesłać go POST-em do tego skryptu ,


nazwa pliku przechodzi (sprawdzałem) , inne dane z formularza też. Ale mam informację że pliku nie odnaleziono. Gdy wpiszę na stałe nazwę pliku to działa , i dane zapisują się do bazy sql.



dziękuję z apomoc



pozdrawiam

Ten post edytował kozioł 20.11.2007, 17:06:53
Go to the top of the page
+Quote Post
nevt
post 20.11.2007, 23:29:29
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


przyjacielu drogi.... wrzuć w google 'MySQL LOAD DATA INFILE" a odpowiedź na swe pytanie wnet znajdziesz...

powodzenia


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
kozioł
post 21.11.2007, 09:05:59
Post #5





Grupa: Zarejestrowani
Postów: 209
Pomógł: 0
Dołączył: 9.12.2006

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


dieki za podpowiedź odnośnie tego polecenia sql ,



znalzłem ,kilka przykładów , i chyba żeczywiście tak jest najszybciej wprowadzic dane z pliku do bazy ,

ale wszędzie tam (w przykładach) , dostep do pliku jest podawany w skrypcie na stałe , a ja chcę go wskazywać przez formularz , gdzie wybieram sobie dwolny plik csv na swoim dysku w dowolnym miejscu.

mniej więcej tak:

  1. <?php
  2. <input name="plik" type="file" /><br />
  3. <input type="submit" value="Wyślij plik">
  4. ?>



jak zwykle dziękuję za pomoc
Go to the top of the page
+Quote Post
dadexix
post 21.11.2007, 09:10:36
Post #6





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


do tego użyj tablicy $_FILES a nie $_POST


--------------------
"Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...]
Grins: mów normalnie do mnie a nie po polsku
Ja: normalnie to znaczy jak?
Grins: No w PHP... inaczej mój parser ledwo kuma:)
Go to the top of the page
+Quote Post
kozioł
post 21.11.2007, 13:41:13
Post #7





Grupa: Zarejestrowani
Postów: 209
Pomógł: 0
Dołączył: 9.12.2006

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


zmodyfikowałem ten skrypt co na początku , skorzystrałem z Waszej rady i odebrałem nazwę pliku i ścięzke przez FILE_

no i dane z pliku ładnie wczytują się do bazy. Jednak jak dałem sobie sprawdzenie w skrypcie to mam taki komunikat:

  1. Wykonanie zapytania nie powiodło się: COLUMN count doesn't match value count at row 1


nie mam pojęcia co to oznacza , ale dane się zapisują.

Mam jeszcze jedna prosbę , bo razem z tym plikiem dodatkowo dopisuję inne wartości do tej bazy (są to dane ukryte) , one też się wpisują ,

ale za żadne skarby nie mogę dodać daty

robię cos takiego:
  1. <?php
  2. $query = "insert into baza(id,numer,rodzaj,wydajacy,datawyd,jednostka,hdw,uwagi) values('$linemysql','$rodzaj','$nazwisko','$data','$jednostka','$hdw','$uwagi');";
  3. ?>


a wcześniej zmienną data definiuję tak:

  1. <?php
  2. $D = date('d');
  3. $M = date('m');
  4. $R = date('Y');
  5.  
  6. $data = mktime ($M,$D,$R);
  7. ?>


w bazie pole mam ustawione na DATE , i nic sie nie wpisuje data w bazie zawsze to 0000-00-00



dzięki za pomoc

Ten post edytował kozioł 21.11.2007, 13:42:05
Go to the top of the page
+Quote Post
dadexix
post 21.11.2007, 13:55:31
Post #8





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


Wykonanie zapytania nie powiodło się: Column count doesn't match value count at row 1

jak dobrze pamiętam oznacza to że próbujesz wypełnić pole o nazwie "count" którego nie ma lub nie ypełniasz go a jest to wymagane...

co do drugiego... jak byś poprostu dał pole liczbowe i w nim przechwowywał date w formacie unixowym?

lecz chyba problem polega na tym że źle podajesz datę w funkcji mktime" title="Zobacz w manualu PHP" target="_manual zobacz do manuala

Kod
$data = mktime (0,0,0,$M,$D,$R);


tak powinno śmigać... chyba:P


--------------------
"Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...]
Grins: mów normalnie do mnie a nie po polsku
Ja: normalnie to znaczy jak?
Grins: No w PHP... inaczej mój parser ledwo kuma:)
Go to the top of the page
+Quote Post
kozioł
post 21.11.2007, 14:53:46
Post #9





Grupa: Zarejestrowani
Postów: 209
Pomógł: 0
Dołączył: 9.12.2006

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


ok ,

z datą już sobie poradziłem , guitar.gif

ale z tym błędem nie daję rady sciana.gif
Go to the top of the page
+Quote Post
dadexix
post 21.11.2007, 14:58:14
Post #10





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


a jakie dajesz zapytanie i jaka jest struktura bazy?


--------------------
"Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...]
Grins: mów normalnie do mnie a nie po polsku
Ja: normalnie to znaczy jak?
Grins: No w PHP... inaczej mój parser ledwo kuma:)
Go to the top of the page
+Quote Post
nevt
post 21.11.2007, 20:26:01
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


przecież kolega kozioł podał zapytanie:
  1. INSERT INTO baza(id,numer,rodzaj,wydajacy,datawyd,jednostka,hdw,uwagi) VALUES('$linemysql','$rodzaj','$nazwisko','$data','$jednostka','$hdw','$uwagi');

I jakiś durny komunikat z COUNT w treści dostaje... - a jak policzyć - to robi INSERT na 8 POLACH podając 7 VALUES... Więc MUSI się nie zgadzać.

Podejrzewam, że pole `id` jest AUTOINCREMENT, więc wystarczy zmienić na:
  1. INSERT INTO baza (numer, rodzaj, wydajacy, datawyd, jednostka, hdw, uwagi)
  2. VALUES ('$linemysql', '$rodzaj', '$nazwisko', '$data', '$jednostka', '$hdw', '$uwagi');

Powinno pomóc, powodzenia.

Ten post edytował nevt 21.11.2007, 20:27:00


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
kozioł
post 22.11.2007, 12:18:04
Post #12





Grupa: Zarejestrowani
Postów: 209
Pomógł: 0
Dołączył: 9.12.2006

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


niestety nie to nie pomogło

może dlatego że w tej zmiennej '$linemysql' mam dwie kolumny , bo to są dane z pliku csv , i zawsze będzie tak że zmiennych deklarowanych bedzie mniej niż pól deklarowanychw bazie , choć nie wiem czy to jest problem ,

chyba wywale te sprawdzanie ,
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.06.2025 - 10:56