Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: parsowanie pliku txt
Forum PHP.pl > Forum > Przedszkole
Gość_banan
Witam!
Mam dane w pliku tekstowym w formie
id
adres
data
opis
id2
adres2
data2
opis2
itd.
Potrzebuje te dane dodac do bazy mysql, czyli w efekcie chciałbym
otrzymać coś takiego:
INSERT INTO `tabela` VALUES (id, adres,data, opis);
INSERT INTO `tabela` VALUES (id2,adres2,data2,opis2);
itd.

Jak mogę osiągnąć coś takiego?
Odczytać umiem np za pomocą file(), ale nijak nie umiem zrobić tak żeby mi wyświetlało po 4 w lini, poza tym jak się później dobrać do teog żeby otrzymać w wyniku dane gotowe do wstawienia do bazy?
NuLL
Otwierasz plik dzieki fopen. Czytasz po 4 linie dodajesz dzieki fgets i zapisujesz do bazy. Calosc czytania odbywa sie w petli while - co za problem ? smile.gif
Sabistik
  1. <?php
  2.  
  3. $plik = file("plik.txt");
  4.  
  5. $a = 0;
  6. for($i=0;$i<count($plik)/4; $i++)
  7. {
  8. mysql_query("INSERT INTO `tabela` VALUES ($plik['$a'], $plik['$a+1'], $plik['$a+2'], $plik['$a+3'])");
  9. $a += 4;
  10. }
  11.  
  12. ?>



hmm moze tak? z palca i troche glupio to napisane ale chyba nie mam bledow. winksmiley.jpg
Guest
a jak przeczytac po cztery linie? w file() nie ma takiego parametru
NuLL
Moze byc laskawie sprawdzil co robi przedstawiony wyzej kod a nie zadal przyglupawe pytania ?
Guest
nie odswiezylem strony zanim zadałem "głupie" pytanie , a ten kod powoduje błąd
Kod
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in c:\program files\easyphp1-7\www\plik1.php on line 16

Linia 16 to ta z mysql_query
Sabistik
  1. <?php
  2.  
  3. mysql_query("INSERT INTO `tabela` VALUES (".$plik['$a'].", ".$plik['$a+1'].", ".$plik['$a+2'].", ".$plik['$a+3'].")");
  4.  
  5. ?>
Guest
Dzięki działa
Guest
Heh, pochwaliłem się niestety, zasugerowałem się tym że poprawnie wyświetla mi dane, nie sprawdzałem czy wprowadza tylko zamiast mysql_query dawałem echo żeby zobaczyć czy te podczas edycji pliki txt nie następiła gdzies pomyłka i czy dane idą na pewno w grupach po 4 linijki dla jednego rekordu.
Mam tereaz pewien problem. Wyświetlam sobie kod SQL
  1. <?php
  2. echo 'INSERT INTO `rej_prot_kon_od_97` VALUES ('.$plik[$a].','. $plik[$a+1].','. $plik[$a+2].','. $plik[$a+3].');<br>';
  3. ?>

Niby ładnie, dostaję takie coś:
Kod
INSERT INTO `tabela` VALUES (id ,adres,data ,opis );

ale dane które chcę wprowadzić powinny być jeszcze otoczone '' bo MySQL wyświetla błąd (jak dodam ręcznie to nie wyświetla i dodaje), czyli :
Kod
INSERT INTO `tabela` VALUES (id ,'adres','data' ,'opis' );

Nie wiem jak wstawić znak ', wyrzuca mi błąd parse error. Probowałem \' ale też nie daje to takiego wyniku jakiego oczekuję
nospor
\' powinno dzialac. moze zle wpisales:
  1. <?php
  2. echo 'INSERT INTO `rej_prot_kon_od_97` VALUES (''.$plik[$a].'',''. $plik[$a+1].'',''. $plik[$a+2].'',''. $plik[$a+3].'');<br>';
  3. ?>

w zasadziejesli id jest liczba to nie musisz obejmowac w ciapki. ja objalem na wszelki wypadek
Guest
Faktycznie coś musiałem spitolić, za dużo tych kropek tongue.gif Teraz działa poprawnie.
Ale mam jeszcze jedno pytanie, dodawać będę do bazu pole opis. I w tym polu na pewno trafi się gdzieś fragment tekstu:
Kod
blblbjkj kjdk; jhdjfhjdhfjh

Jak w opisie będzie średnik to w ten sposób zatrzyma mi to wykonywanie zapytania, jak się ustrzec przed czymś takim?
nospor
opis to pole tesktowe. srednik w polu tekstowym nie zatrzymuje zapytania. jest traktowany jako zwykly znak tekstu.
ale to mogles se sam sprawdzic najpierw wstawiajac takie cudo do sql'a
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.