Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [MySQL][PHP]Dane z pliku txt do bazy danych

Napisany przez: brzanek 13.09.2019, 16:14:00

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. http://www.php.net/echo 'Błąd bazy danych';
  12. }
  13. //
  14. $plik = http://www.php.net/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) = http://www.php.net/explode(',', http://www.php.net/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ć?

Napisany przez: Neutral 13.09.2019, 16:25:06

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

Napisany przez: nospor 13.09.2019, 17:01:00

@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

Napisany przez: brzanek 14.09.2019, 08:02:11

Może i racja najpierw próbuję odczytać ten plik cvs ale brakuje mi polskich znaków.

  1. <?php
  2. $handle = http://www.php.net/fopen("o_d_1950.csv", "r");
  3. while (($data = http://www.php.net/fgetcsv($handle)) !== FALSE) {
  4. http://www.php.net/echo $data[0];
  5. http://www.php.net/echo $data[1];
  6. http://www.php.net/echo $data[2];
  7. http://www.php.net/echo $data[3];
  8. http://www.php.net/echo $data[4];
  9. http://www.php.net/echo $data[5];
  10. http://www.php.net/echo $data[6];
  11. http://www.php.net/echo $data[8];
  12. http://www.php.net/echo $data[9];
  13. http://www.php.net/echo $data[11];
  14. http://www.php.net/echo $data[13];
  15. http://www.php.net/echo $data[15];
  16. http://www.php.net/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?

Napisany przez: Neutral 14.09.2019, 09: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.

Napisany przez: brzanek 14.09.2019, 10:30:04

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.

Napisany przez: viking 14.09.2019, 10:48:34

W jakim kodowaniu był wyeksportowany?

Napisany przez: Neutral 14.09.2019, 10:55:11

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.

Napisany przez: brzanek 14.09.2019, 17:08:29

Wszystko się zgadza ale mi chodzi o to, że w pobieranym pliku csv nie ma polskich znaków a nie w pliku txt.

Napisany przez: Neutral 17.09.2019, 17:27:21

Tak zgadza się, niepoprawnie napisałem. Powienem napisać brzanek.csv i u mnie sa polskie znaki.

Napisany przez: emillo91 17.09.2019, 21:46:10

Spróbuj użyć Regexa. Wyciągnie Tobie wszystko z podwójnych cudzysłowów.

  1. $matches = null;
  2. $regex = http://www.php.net/preg_match_all('/[^",]+()/', '"aas","wewewe", sss', $matches);
  3. http://www.php.net/var_dump($matches)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)