Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Dane z pliku txt do bazy danych
brzanek
post 13.09.2019, 16:14:00
Post #1





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


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ć?
Go to the top of the page
+Quote Post
Neutral
post 13.09.2019, 16:25:06
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


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

Ten post edytował Neutral 13.09.2019, 16:26:04
Go to the top of the page
+Quote Post
nospor
post 13.09.2019, 17:01:00
Post #3





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




@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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 14.09.2019, 08:02:11
Post #4





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


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?
Go to the top of the page
+Quote Post
Neutral
post 14.09.2019, 09:30:47
Post #5





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


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.

Ten post edytował Neutral 14.09.2019, 09:31:27
Go to the top of the page
+Quote Post
brzanek
post 14.09.2019, 10:30:04
Post #6





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


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.
Go to the top of the page
+Quote Post
viking
post 14.09.2019, 10:48:34
Post #7





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


W jakim kodowaniu był wyeksportowany?


--------------------
Go to the top of the page
+Quote Post
Neutral
post 14.09.2019, 10:55:11
Post #8





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


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.
Go to the top of the page
+Quote Post
brzanek
post 14.09.2019, 17:08:29
Post #9





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Wszystko się zgadza ale mi chodzi o to, że w pobieranym pliku csv nie ma polskich znaków a nie w pliku txt.
Go to the top of the page
+Quote Post
Neutral
post 17.09.2019, 17:27:21
Post #10





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


Tak zgadza się, niepoprawnie napisałem. Powienem napisać brzanek.csv i u mnie sa polskie znaki.
Go to the top of the page
+Quote Post
emillo91
post 17.09.2019, 21:46:10
Post #11





Grupa: Zarejestrowani
Postów: 129
Pomógł: 13
Dołączył: 29.03.2012

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


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)
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: 28.03.2024 - 21:59