Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> CSV import do MySQL
hettmix
post 10.03.2012, 20:58:19
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Witam.

Tak szukam, szukam i nie mogę znaleźć odpowiedniego rozwiązania. Może ktoś mnie naprowadzi na właściwe tory. Dodam, że nie zajmuję się programowaniem zawodowo - raczej z doskoku.
Więc tak, mam kod, który pobiera wiersze z pliku csv:
  1. $target_path = "tmp/";
  2. $target_path = $target_path . basename( $_FILES['dane_file']['name']);
  3.  
  4. if ($_FILES['dane_file']['error']=='0') {
  5. if (move_uploaded_file($_FILES['dane_file']['tmp_name'], $target_path)) {
  6. print "Załadowano plik:&nbsp;<b>".$_FILES['dane_file']['name']."</b></br></br>";
  7.  
  8. echo "<table style=\"text-align: left; font-size: 10px; border: 3px double #aaaaaa; border-collapse: collapse;\">";
  9. $row = 0;
  10.  
  11. if (($handle = fopen("$target_path", "r")) !== FALSE) {
  12. while (($data = fgetcsv($handle, 2000, ';', '"', '\\')) !== FALSE) {
  13. if ($row == 0) {
  14. $num = count($data);
  15. echo "<thead><tr>";
  16. $row++;
  17. echo "<th style=\"padding: 7px; background: grey; border: 3px double #aaaaaa;\">".Lp."</th>";
  18. for ($c=0; $c < $num; $c++) {
  19. echo "<th style=\"padding: 7px; background: grey; border: 3px double #aaaaaa;\">" . $data[$c] . "</th>";
  20. }
  21. echo "</tr></thead>";
  22. } else {
  23. $num = count($data);
  24. echo "<tr>";
  25. $row++;
  26. $i++;
  27. echo "<td style=\"padding: 7px; border: 3px double #aaaaaa;\">" .$i. "</td>";
  28. for ($c=0; $c < $num; $c++) {
  29. $data[$c] = str_replace('""', '', $data[$c]);
  30. echo "<td style=\"padding: 7px; border: 3px double #aaaaaa;\">" . $data[$c] . "</td>";
  31. }
  32. echo "</tr>";
  33. }
  34. }
  35.  
  36. fclose($handle);
  37. echo "</table>";


Wszystko ładnie działa, poszczególne wiersze wskakują do sformatowanej tabelki i teraz chciałbym załadować te dane do tabeli w bazie MySQL. Kombinuję od jakiegoś czasu z LOAD DATA INFILE ale nie mogę tego poprawnie rozwiązać. Może jakieś sugestie ?.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post 12.03.2012, 01:21:16
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Najlepiej się nie rozdrabniać i użyć LOAD DATA INFILE http://dev.mysql.com/doc/refman/5.1/en/load-data.html - od razu wrzuca do bazy cały plik lub jak kto woli, robi tabelę z pliku.
Jeśli jest taka potrzeba (a zazwyczaj jest), to plik najpierw należy sparsować i dokonać w nim odpowiednich zmian (by np. liczba kolumn była zawsze identyczna). Dopiero przygotowany i zwalidowany plik wrzucać do bazy - tak jest prościej i szybciej. Inaczej nie unikniesz problemów z plikami csv gdyż niektóre programy (typu excel choćby) robią w nich niezły burdel. No i możesz obejrzeć przygotowany plik, czy odpowiada strukturze tabeli w bazie.

Ten post edytował Pilsener 12.03.2012, 01:24:13
Go to the top of the page
+Quote Post

Posty w temacie


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: 26.06.2025 - 04:01