Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dane z pliku txt do bazy danych
Forum PHP.pl > Forum > Przedszkole
brzanek
Witam jak dane z pliku txt
"249180120","SKOCZÓW","1950","11","29",.4,"","",0,"8",0,"8","","8","","8"
zapisać do bazy danych?
Mam coś takiego
  1. <?php
  2. $mysql_host = 'localhost';
  3. $mysql_login = 'login';
  4. $mysql_haslo = 'pass';
  5. $mysql_baza = 'nazwa_bazy';
  6.  
  7. // połączenie z bazą danych
  8. $mysqli = new mysqli($mysql_host,$mysql_login,$mysql_haslo,$mysql_baza);
  9. //$mysqli->set_charset("utf8");
  10. if ( mysqli_connect_errno() ) {
  11. echo 'Błąd bazy danych';
  12. }
  13. //
  14. $plik = file('plik.txt');
  15.  
  16. $mysqli->set_charset("utf8"); {
  17. foreach($plik as $linia) {
  18. $i++;
  19. list($nazwastacji, $miasto, $rok, $miesiac, $dzien, $suma_dobowa_opadu, $j, $rodzaj_opadu, $wysokosc_pokrywy_snieznej_cm, $m, $wysokosc_swiezospalego_sniegu, $o, $gatunek_sniegu, $r, $rodzaj_pokrywy_snieznej, $s) = explode(',', trim($linia));
  20. $result = $mysqli->query("
  21. INSERT INTO opad_dobowy
  22. SET nazwastacji='$nazwastacji', miasto='$miasto', rok='$rok', miesiac='$miesiac', dzien='$dzien', suma_dobowa_opadu='$suma_dobowa_opadu', j='$j', rodzaj_opadu='$rodzaj_opadu', wysokosc_pokrywy_snieznej_cm='$wysokosc_pokrywy_snieznej_cm', m='$m', wysokosc_swiezospalego_sniegu='$wysokosc_swiezospalego_sniegu', o='$o', gatunek_sniegu='$gatunek_sniegu', r='$r', rodzaj_pokrywy_snieznej='$rodzaj_pokrywy_snieznej', s='$s'
  23. ");
  24. }
  25. }
  26. ?>

Dane zapisują się do bazy ale razem z cudzysłowami "

Jak mogę się tego pozbyć?
Neutral
A czy logując się do bazy przez np. konsolę Windowsa masz tak samo? Może to interfejs graficzny dodaje te znaki cudzysłowia, żeby było wiadomo, że to "string", a nie "int".
nospor
@Neutral nie, on tak wklada do bazy, widac ladnie w kodzie ze wklada explode po przecinku
explode(',', trim($linia));
wiec ze wszystkim.

@brzanek, skoro to CSV to uzyj dedykowanych funkcji do odczytu csv a problem zniknie. Oczywiscie mozesz recznie usuwac te cudzyslowia ale nie na tym to polega...

https://www.php.net/manual/en/function.fgetcsv.php

ps: swoja droga jak jakies pole jest ewidentnie liczba to bys mogl w bazie danych robic je jako typ liczbowy a nie tekstowy.

tak samo data to powinno byc jedno pole DATE a nie 3 pola tekstowe

No i skoro uzywasz mysqli to zainteresuj sie bindowaniem bo serce sie kraja patrzac jak ty dane do bazy wkladasz a programujesz juz pare lat
brzanek
Może i racja najpierw próbuję odczytać ten plik cvs ale brakuje mi polskich znaków.
  1. <?php
  2. $handle = fopen("o_d_1950.csv", "r");
  3. while (($data = fgetcsv($handle)) !== FALSE) {
  4. echo $data[0];
  5. echo $data[1];
  6. echo $data[2];
  7. echo $data[3];
  8. echo $data[4];
  9. echo $data[5];
  10. echo $data[6];
  11. echo $data[8];
  12. echo $data[9];
  13. echo $data[11];
  14. echo $data[13];
  15. echo $data[15];
  16. echo '<br>';
  17. }
  18. ?>

Dodawałem na początku header z utf-8 ale nic to nie dawało. Jest jakieś wyjście na to?
Neutral
Zapisz plik w kodowaniu UTF-8 bez BOM. Spróbuj zapisać w kodowaniu dwu-bajtowym i jedno-bajtowym. Oczywiście, to wszystko w swoim edytorze tekstowym np. Notepad++, Emacs.
brzanek
Cytat(Neutral @ 14.09.2019, 10:30:47 ) *
Zapisz plik w kodowaniu UTF-8 bez BOM. Spróbuj zapisać w kodowaniu dwu-bajtowym i jedno-bajtowym. Oczywiście, to wszystko w swoim edytorze tekstowym np. Notepad++, Emacs.

Też tak robiłem ale nic to nie zmieniało.
viking
W jakim kodowaniu był wyeksportowany?
Neutral
Te dwie strony mają być w kodowaniu UTF-8: brzanek.php i brzanek.txt. Zaznacz na UTF-8 bez BOM, następnie zapisz plik. Spójrz jeszcze na setlocale, nie ustawiaj nic, ponieważ możliwe, że to przez to.
brzanek
Wszystko się zgadza ale mi chodzi o to, że w pobieranym pliku csv nie ma polskich znaków a nie w pliku txt.
Neutral
Tak zgadza się, niepoprawnie napisałem. Powienem napisać brzanek.csv i u mnie sa polskie znaki.
emillo91
Spróbuj użyć Regexa. Wyciągnie Tobie wszystko z podwójnych cudzysłowów.
  1. $matches = null;
  2. $regex = preg_match_all('/[^",]+()/', '"aas","wewewe", sss', $matches);
  3. var_dump($matches)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.