marian2299
27.07.2009, 15:26:25
Mam taki kod:
<?php
$plik = file('plik.txt'); ?>
Jak do każdego elementu tablicy dodać jakikolwiek rekord np.:
INSERT INTO kody (kod, uzyty) VALUES (TUTAJ TO Z TABLICY, nie)
?
Z góry dzięki
za pomoc.
skowron-line
27.07.2009, 15:30:03
marian2299
27.07.2009, 15:37:03
<?php
$plik = file('plik.txt'); ?>
to mi da:
Cytat
Array
(
[0] => bu36a2
[1] => k7h6d5
[2] => 8hc8ra
[3] => hsr87p
[4] => c7bmh5
[5] => ppadu7
[6] => 5u6rmb
[7] => 424pwc
[8] => 4ph6ra
[9] => tet4hh
[10] => s3mkb3
[11] => 346ar5
[12] => bchhpt
[13] => t7nkh4
[14] => 6but86
[15] => fmnh4n
[16] => 4tswrd
[17] => 85ssd7
[18] => tec8ds
[19] => bn5a7a
[20] => uaehkh
[21] => h5w477
itd.. aż do 4999.
Chciałbym aby każdy z tych kodów dodać do mysql. Utworzyć rekord. Tak jak napisałem wyżej.
skowron-line
27.07.2009, 15:50:57
<?php
foreach( $file as $data )
{
mysql_query( 'insert into table( a ) values( "'. $f .'" ) '); }
?>
marian2299
27.07.2009, 16:13:28
Nie działa, ale to zapewne moja wina, ktoś podpowie:
<?php
$plik = file('plik.txt'); foreach( $plik as $data )
{
mysql_query('insert into kodykody (kod, uzyty) values("'. $f .'", nie)'); }
?>
Co napisałem źle ?
artur_dziocha
27.07.2009, 16:26:59
przyjrzy sie dokładnie kodowi.
skąd wzięła Ci sie zmienna $f??
Powinno być raczej $data
marian2299
27.07.2009, 16:32:57
Dałem, nic się nie zmieniło.
erix
27.07.2009, 17:22:49
Co to jest nie w wartościach?
marian2299
27.07.2009, 17:27:41
To jest czy kod jest użyty.
Użyty = nie.
Wiem, mogłem to zrobić prościej.
skowron-line
27.07.2009, 18:50:41
Cytat(marian2299 @ 27.07.2009, 15:13:28 )

Nie działa, ale to zapewne moja wina, ktoś podpowie:
<?php
$plik = file('plik.txt'); foreach( $plik as $data )
{
mysql_query('insert into kodykody (kod, uzyty) values("'. $f .'", nie)'); }
?>
Co napisałem źle ?
nie w twoim przypadku to string a stringi wrzuca sie w uszach do bazy wiec
Kod
"nie"
marian2299
28.07.2009, 11:38:00
Jest prawie ok, ale dodaje tylko pierwszy rekord, czemu?
<?php
$plik = file('plik.txt');
foreach($plik as $data)
{
$zapytanie = "INSERT INTO `kodykody` (`kod`, `uzyty`) VALUES ('".$data."', 'nie')";
}
?>
Może da się to zrobić pętlą while ?
Chwila, co masz w tym pliku??
marian2299
28.07.2009, 11:56:00
Kody:
s3mkb3
346ar5
bchhpt
t7nkh4
6but86
4999 kodów.
Pilsener
28.07.2009, 12:01:54
A nie możesz dodać od razu całego pliku do bazy za pomocą:
LOAD DATA INFILE...
? Po co się tak męczyć i obciążać pamięć?
marian2299
28.07.2009, 12:10:24
A pomożesz, jak to zrobić w tym konkretnym przypadku ? Każdy kod musi mieć "uzyty - nie" i kod...
Manual mysql jest po angielsku ;\.
erix
28.07.2009, 12:13:21
Da się:
fgets" title="Zobacz w manualu PHP" target="_manual.
Choć nie rozumiem, jak dodaje pierwszy rekord - z prawidłową zawartością?
marian2299
28.07.2009, 12:15:24
Tak, z prawidłową, ale tylko jeden, i to nie jest ten pierwszy z pliku, ale gdzieś ze środka.
erix
28.07.2009, 12:20:34
Ok, spytam tak: nie masz przypadkiem mieszanych znaków końca linii w pliku?
marian2299
28.07.2009, 13:05:07
W tym pliku nie mam znaków końca linii.
Jest po prostu
zejście
w
dół.
Próbowałem tak:
<?php
$i = 1;
$uchwyt = fopen ("plik.txt", "r"); while (!feof ($uchwyt)) { $data = fgets($uchwyt, 4096
); $zapytanie = "INSERT INTO `kodykody` (`kod`, `uzyty`) VALUES ('".$data[$i]."', 'nie')";
$i++;
?>
Ale nic ;\.
erix
28.07.2009, 13:06:42
Cytat
W tym pliku nie mam znaków końca linii.
Jest po prostu
zejście
w
dół.
Przecież to to samo.

Znak końca linii może mieć postać
\r\n albo samego
\n. Podejrzewam, że jest pomieszane.
marian2299
28.07.2009, 14:59:25
Co ? Przecież tam nie ma ani \n ani \r\n.
Wie ktoś, jak to zrobić ?
erix
28.07.2009, 17:12:47
Bo to są znaki niewidoczne w edytorze tekstu...
http://pl.wikipedia.org/wiki/End-of-line
exploduj może??
ale najlepiej
LOAD DATA INFILE
marian2299
29.07.2009, 21:59:04
Możecie podać jakiś przykładowy kod tego LOAD DATA INFO ? Tak z tymi moimi 2 rekordami.
Albo tego explode ?
Ok, a to też nie działa :|
<?php
$eol = (strpos($_SERVER['SERVER_SOFTWARE'], 'Win')) ?
"r\n" : "\n"; //przyjmij koniec linii dla Windowsa - r\n - dla linuxa - \n $line = explode($plik, $eol); //podziel plik na linie $cnt = count($line); //sprawdź ilość linii for ($i=0;$i<$cnt;$i++) //pętla
{
$zapytanie = "INSERT INTO `kodykody` (`kod`, `uzyty`) VALUES ('".$line[$i]."', 'nie')"; //zapytanie do bazy
}
?>
Czemu ?
iVorIus
30.07.2009, 08:49:31
Nie jestem pewien czy pomoże, ale u mnie działa prawidłowo kod:
<?php
$i = 0;
do {
coś_sobie_robie;
}else{
czegoś_sobie_nie_robie;
}
$i++;
} while ($i < $ile);
?>
Tylko w tym przypadku w explode chyba powinno być \r\n zamiast znaku "."
Pilsener
30.07.2009, 11:46:11
Cytat
Możecie podać jakiś przykładowy kod tego LOAD DATA INFO ?
- a korzystać z forum lub manuala nie łaska?
<?php
$pliczek = "/xampp/htdocs/folder_strony/plik_dobazy.txt";
$zapyt = "LOAD DATA LOCAL INFILE '$pliczek' REPLACE INTO TABLE dane FIELDS TERMINATED BY '\t'";
?>
Szczegóły:
http://dev.mysql.com/doc/refman/5.1/en/load-data.htmlOczywiście czasem zachodzi konieczność lekkiej obróbki pliku przed dodaniem, ale i tak jest szybciej, jeśli najpierw obrobimy plik:
<?php
$uchwyt = fopen($plik,'r+'); while(!feof($uchwyt)){//parsujemy plik linia po linii }
?>
- a potem dodamy go do bazy.
marian2299
30.07.2009, 13:03:21
Ja naprawdę jestem jakiś tępy ;|.
Wykombinowałem takie "cuś":
<?php
$line = file('plik.txt'); $cnt = count($line); //sprawdź ilość linii for ($i=0;$i<$cnt;$i++) //pętla
{
$zapytanie = "INSERT INTO `kodykody` (`kod`, `uzyty`) VALUES ('".$line[$i]."', 'nie')"; //zapytanie do bazy
}
?>
$cnt pokazuje mi że linii jest 5000.
Ale dodaje 1 rekord ;/.
TrevorGryffits
30.07.2009, 13:58:08
fander
30.07.2009, 14:38:43
załącz tutaj ten plik tekstowy
marian2299
30.07.2009, 23:35:04
Dawałem już do niego link:
http://www.fffiezet.yoyo.pl/plik.txt.
TrevorGryffits, próbowałem, nic nie pokazuje.
Mysql error:
Kod
5000Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for key 1Duplicate entry 'nie' for
itd...
TrevorGryffits
31.07.2009, 09:46:39
1) Czyli jednak pokazuje:)
2) Tak myślałem... Masz na pole z "nie" założony indeks unikalny albo primary
iVorIus
31.07.2009, 17:07:06
3) Dodanie `id` z PRIMARY KEY lub ustawienie go na `kod`
Jak wszystko będzie działało, pokaż rozwiązanie
marian2299
31.07.2009, 22:35:28
Rozwiązanie to:
<?php
$eol = (strpos($_SERVER['SERVER_SOFTWARE'], 'Win')) ?
"r\n" : "\n"; //przyjmij koniec linii dla Windowsa - r\n - dla linuxa - \n $line = explode($eol, $plik); //podziel plik na linie $cnt = count($line); //sprawdź ilość linii for ($i=0;$i<$cnt;$i++) //pętla
{
$zapytanie = "INSERT INTO `kodykody` (`kod`, `uzyty`) VALUES ('".$line[$i]."', 'nie')"; //zapytanie do bazy
?>
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.