Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] BARDZO dziwny problemz iteracją INSERT'a
Forum PHP.pl > Forum > PHP
radosss
Witam

Moze zaczne od poczatku. Chcialbym otworzyc plik txt, wczytac z niego wartosci po czym zapisac je w tabeli w bazie. Wydaje sie banalne, ale niestety jedna rzecz ktora POWINNA za cholere nie chce dzialac. Ale do rzeczy:

Otwieramy plik:

Kod
if($_POST["choice"] == "file"){

     $filename = $_POST["file"];
    
     if (is_file($filename))
     {
         $file = fopen($filename, "r");


Dane w pliku txt zapisane sa w formacie:

dane1(średnik)dane2(średnik)dane3 przkładowo:
1999-03-04;23;45

nastepnie petla while i rozbicie kazdej lini na pojedyncze elementy:

Kod
while(!feof($file))
         {
             $line = fgets($file, 1024);
             $dane = explode(";",$line);


przy kazdej iteracji mamy zmienne $dane[0], $dane[1] i $dane[2] reprezentujace poszczegolne wartosci z kazdej lini z pliku. no to co z nimi zrobic? do bazy je i konczymy petle:

Kod
$query = mysql_query("INSERT INTO $table_name VALUES( '0' , '$id_patient' , '$dane[0]', '$dane[1]' , '$dane[2]'");
               }

        
         }
          
         fclose($file);
     }

}


(w insercie pierwsza wartosc "0" to zmienna autoincrement "id" a id patient to stała, wiec zmieniaja sie prtrzy kazdej iteracji tylko dane[x])

Majac taki kod, przy kazdej iteracji while dostajemy rozne dane[x], wiec przeprowadzajac kazdorazowo insert powinnismy miec tyle insertow ile lini w pliku tak? NIE! dostajemy nie dosc tylko JEDEN wpis (nawet jezeli while iteruje wielorotnie) to jest to wpis zawierajacy dane z OSTANIEJ lini, wszystkie pozostale sa olewane.
Moim zdaniem wyglada to jakby insert wykonywany byl PO po wykonaniu petli while, pomimo ze znajduje sie w niej :/

ktos ma jakis pomysl?
z gory dzieki
erix
Nadaj wątkowi sensowny tytuł.

Cytat
OSTANIEJ lini, wszystkie pozostale sa olewane.
  1. masz na pewno dobre znaki końca linii?
  2. sprawdź, czy var_dump" title="Zobacz w manualu PHP" target="_manual zwraca zawsze to samo
radosss
Cytat(erix @ 8.04.2009, 19:13:29 ) *
Nadaj wątkowi sensowny tytuł.
  1. masz na pewno dobre znaki końca linii?
  2. sprawdź, czy var_dump" title="Zobacz w manualu PHP" target="_manual zwraca zawsze to samo


sorki ze tak dlugo odp, male problemy techniczne

1. Znaki końca lini poprawne
2. var_dump NIE zwraca tego samego ohmy.gif

mianowicie każda linia wyglada tak:

string(10)
string(5)
string(3)

a OSTATNIA (czyli ta wpisywana do bazy)

string(10)
string(5)
string(1)

niestety nie rozumiem dlatego tak, mozesz wyjasnic?
erix
Popraw tytuł wątku, ostatni raz upominam.

Cytat
mianowicie każda linia wyglada tak:

Mam na myśli to, co jest w każdym kroku tablicy dla $dane.
radosss
no tak, zrozumialem, wiec juz wyjasniam:

dane:
2009-03-17;11:02;4
2009-03-17;12:02;6
2009-03-17;13:02;8

wynik dump'a:
string(10) "2009-03-17"
string(5) "11:02"
string(3) "4"
string(10) "2009-03-17"
string(5) "12:02"
string(3) "6"
string(10) "2009-03-17"
string(5) "13:02"
string(1) "8"

jak juz wspominalem ostatnia linia odczytywana jest jako wartość jednoznakowa, pozostale jako 3-znakowe

mam pomysl o co kaman:
na koncu 1 i 2 lini sa jeszcze (zaraz po ostatniej danej) znaki konca lini (enter) a po ostatniej lini takiego znaku nie ma.
moze gdyby dodac na koncach kazdej z lini znak srednika...?

edit: no dobrze, sprobowalem, dziala
przy kazdej iteracji nastepuje okreslona (prawidlowa) liczba insertow i dane wskakuja do bazy
problemem byl byl brak srednika na koncu lini, przez co dane zapisywane byly razem ze znakiem enter, co wykazal var_dump
dzieki za pomysl erix smile.gif
pozdrawiam
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.