Skocz do zawartości

[mysql php] Pomijanie rekordów w pętli foreach


dj.drezyna

Polecane posty

Moje pytanie dotyczy rezultatu poniższego kodu, ponieważ po jego wykonaniu tworzy się tabela, która nie posiada tylu rekordów co plik csv. Dlaczego zatem rekordy są gubione? Używam php 5,3,2 Zachowanie jest naprawdę bardzo dziwne, ponieważ gdy zmienię pplik na text (nie varchar), to zamiast tworzenia tab. o ok. 400 rekordach, tworzy się tabela, której zawartość gubi jedynie 6-15 rekordów z tych 3300. Co jest zatem nie tak?

 
<?php
$baza = mysql_connect('localhost', 'root', 'a');
mysql_set_charset('latin2',$baza);
$bazapol = mysql_select_db('danefotkol',$baza);
$zapytanie = "CREATE TABLE podst
(
pfolder varchar(8),
pplik varchar(8),
pocena varchar(1),
pserialok varchar(75),
pnrtab varchar(20),
popis text,
pmiejscowka varchar(40),
pdata varchar(10),
pmiejsce varchar(40),
pstacja varchar(40),
pautor varchar(40),
PRIMARY KEY (pplik)
)";
$wbazy = mysql_query($zapytanie,$baza);
$spisglobalny = file('Gal/Dane/SpisWsz.csv');
foreach ($spisglobalny as $linia) {
$osobne = explode(';', $linia);
$zapytanie = "INSERT INTO podst
VALUES ('$osobne[0]','$osobne[1]','$osobne[2]','$osobne[3]',
'$osobne[4]','$osobne[5]','$osobne[6]',
'$osobne[7]','$osobne[8]','$osobne[9]','$osobne[10]')";
$wbazy = mysql_query($zapytanie,$baza);
if ($wbazy) {
echo '';
}
else {
echo $osobne[1]."<br />";
}
}
echo '</p>';
mysql_close($baza);
?>

 

A tu przykładowa linia z pliku csv:

F_D00021;D0002032;2;EN57;2065;Pocig osobowy z Bydgoszczy Gł. do Olsztyna Gł. wyrusza by przy następnym zatrzymaniu zakończyć bieg.;;2009-01-14;Olsztyn;Olsztyn Zachodni;;

 

Z tym, że pierwsze pole może być tylko 8 znakowe lub 6 znakowe.

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

spróbuj zmienić zapytanie na

INSERT INTO podstawowa SET pfolder='$osobne[0]', pplik='$osobne[1]', ....

 

po za tym masz PRIMARY KEY (pplik) więc dane w tej kolumnie nie mogą się powtarzać

 

edit:

na primary lepiej dać jakieś pole id, np

`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY

Link do komentarza
Udostępnij na innych stronach

Jak wrócę do domu to sprawdzę ten sposób ale jedno mnie dziwi. Otóż przy każdym włączeniu kompa i odpaleniu tego skryptu inne pola znikają. A kiedy w danym włączeniu to znikają ale zawsze te same rekordy. A jak włączę jeszcze raz kompa nstępnego dnia to co? To znikają inne. Oczywiście za każdym razem kiedy wykonuję skrypt to wcześniej usuwam tą tabelę podst.

Poza tym to jak można zastosować set kiedy to jest do aktualizowania rekordów? No i na w3chools napisali też, że:

INSERT INTO table_name

(column1, column2, column3,...)

VALUES (value1, value2, value3,....)

Co też wypróbuję ale warto, żeby zwrócić uwagę na to dziwne zachowanie opisane na samej górze postu.

 

No i też nie wiadome było czy dane się powtórzą. Otóż się nie powtórzą, bo jest to nazwa pliku, która w założeniu mojej galerii nie może się powtórzyć na sto procent.

 

Aaaa i kolejna sprawa. Otóż jak w pierwszym polu nie wybiorę trybu text tylko varchar(8) to wszystko, czyli dane w danej komórce każdej kolumny zamienia się na coś w stylu ds07de45fgty6o A jak było mówione pierwsza kolumna do dane tekstowe 6 lub ośmioznakowe.

 

pozdr, i dzięks

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

Nie działa. Teraz jak mam kompa odpalonego to niesamowite ale nie zmieniając nic kodu przerabia 419 rekordów z ok. 3300. Nie wiem co jeszcze mam zmienić. sql nowiutkie tak samo php najnowsza wersja. No i apasz wersyjka 2.2.8

 

Po prostu próbowałem już wszystkiego i nie wiem dlaczego tak się dzieje, że pomija pewne a właściwie większość linii pliku csv. Plik csv generowany przez OpenOffice 3.2

 

Prosiłbym jeżeli ktoś zna odpowiedź to p o m o c y !

 

Dziękuję.

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...