Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] tablica - dodawanie rekordu do każdego
Forum PHP.pl > Forum > Przedszkole
marian2299
Mam taki kod:
  1. <?php
  2. $plik = file('plik.txt');
  3. echo '<pre>';
  4. print_r($plik);
  5. echo '</pre>';
  6. ?>


Jak do każdego elementu tablicy dodać jakikolwiek rekord np.:
  1. INSERT INTO kody (kod, uzyty) VALUES (TUTAJ TO Z TABLICY, nie)

?

Z góry dzięki
za pomoc.
skowron-line
http://pl2.php.net/manual/pl/function.array-map.php ale niewiem dokladnie o co tobie chodzi.
marian2299
  1. <?php
  2. $plik = file('plik.txt');
  3. echo '<pre>';
  4. print_r($plik);
  5. echo '</pre>';
  6. ?>

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
  1. <?php
  2. foreach( $file as $data )
  3. {
  4. mysql_query( 'insert into table( a ) values( "'. $f .'" ) ');
  5. }
  6. ?>
marian2299
Nie działa, ale to zapewne moja wina, ktoś podpowie:
  1. <?php
  2. $plik = file('plik.txt');
  3. foreach( $plik as $data )
  4. {
  5. mysql_query('insert into kodykody (kod, uzyty) values("'. $f .'", nie)');
  6. }
  7. ?>

Co napisałem źle ?
artur_dziocha
przyjrzy sie dokładnie kodowi.
skąd wzięła Ci sie zmienna $f??
Powinno być raczej $data
marian2299
Dałem, nic się nie zmieniło.
erix
Co to jest nie w wartościach?
marian2299
To jest czy kod jest użyty.
Użyty = nie.
Wiem, mogłem to zrobić prościej.
skowron-line
Cytat(marian2299 @ 27.07.2009, 15:13:28 ) *
Nie działa, ale to zapewne moja wina, ktoś podpowie:
  1. <?php
  2. $plik = file('plik.txt');
  3. foreach( $plik as $data )
  4. {
  5. mysql_query('insert into kodykody (kod, uzyty) values("'. $f .'", nie)');
  6. }
  7. ?>

Co napisałem źle ?

nie w twoim przypadku to string a stringi wrzuca sie w uszach do bazy wiec
Kod
"nie"
marian2299
Jest prawie ok, ale dodaje tylko pierwszy rekord, czemu?
  1. <?php
  2. $plik = file('plik.txt');
  3.    
  4.     foreach($plik as $data)
  5.     {
  6. $zapytanie = "INSERT INTO `kodykody` (`kod`, `uzyty`) VALUES ('".$data."', 'nie')";
  7. $idzapytania = mysql_query($zapytanie);
  8.     }
  9. ?>


Może da się to zrobić pętlą while ?
MWL
Chwila, co masz w tym pliku??
marian2299
Kody:

s3mkb3
346ar5
bchhpt
t7nkh4
6but86

4999 kodów.
Pilsener
A nie możesz dodać od razu całego pliku do bazy za pomocą:
  1. LOAD DATA INFILE...
? Po co się tak męczyć i obciążać pamięć?
marian2299
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
Da się: fgets" title="Zobacz w manualu PHP" target="_manual.

Choć nie rozumiem, jak dodaje pierwszy rekord - z prawidłową zawartością?
marian2299
Tak, z prawidłową, ale tylko jeden, i to nie jest ten pierwszy z pliku, ale gdzieś ze środka.
erix
Ok, spytam tak: nie masz przypadkiem mieszanych znaków końca linii w pliku?
marian2299
W tym pliku nie mam znaków końca linii.
Jest po prostu
zejście
w
dół.

Próbowałem tak:
  1. <?php
  2. $i = 1;
  3. $uchwyt = fopen ("plik.txt", "r");
  4. while (!feof ($uchwyt)) {
  5.    $data = fgets($uchwyt, 4096);
  6.    $zapytanie = "INSERT INTO `kodykody` (`kod`, `uzyty`) VALUES ('".$data[$i]."', 'nie')";
  7. $idzapytania = mysql_query($zapytanie);
  8. $i++;
  9. ?>

Ale nic ;\.
erix
Cytat
W tym pliku nie mam znaków końca linii.
Jest po prostu
zejście
w
dół.

Przecież to to samo. tongue.gif Znak końca linii może mieć postać \r\n albo samego \n. Podejrzewam, że jest pomieszane.
marian2299
Co ? Przecież tam nie ma ani \n ani \r\n.

Wie ktoś, jak to zrobić ?
erix
Bo to są znaki niewidoczne w edytorze tekstu... dry.gif

http://pl.wikipedia.org/wiki/End-of-line
MWL
exploduj może??
ale najlepiej
  1. LOAD DATA INFILE
marian2299
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 :|
  1. <?php
  2. $plik = file_get_contents('plik.txt'); //otwórz plik
  3. $eol = (strpos($_SERVER['SERVER_SOFTWARE'], 'Win')) ? "r\n" : "\n"; //przyjmij koniec linii dla Windowsa - r\n - dla linuxa - \n
  4. $line = explode($plik, $eol); //podziel plik na linie
  5. $cnt = count($line); //sprawdź ilość linii
  6. for ($i=0;$i<$cnt;$i++) //pętla
  7. {
  8.  $zapytanie = "INSERT INTO `kodykody` (`kod`, `uzyty`) VALUES ('".$line[$i]."', 'nie')"; //zapytanie do bazy
  9.  mysql_query($zapytanie); //wykonanie zapytania SQL
  10. }
  11. ?>

Czemu ?
iVorIus
Nie jestem pewien czy pomoże, ale u mnie działa prawidłowo kod:

  1. <?php
  2. $file    =    file($dane);
  3. $i        =    0;
  4. do {
  5.    $file[] = explode(",", $file[$i]);
  6.          
  7.    if(file_exists($file[1][$i])){
  8.  
  9.                coś_sobie_robie;
  10.    
  11.    }else{
  12.  
  13.        czegoś_sobie_nie_robie;
  14.  
  15.    }
  16.    $ile    =    count($file[1]);
  17.    
  18.    $i++;
  19. } while ($i < $ile);
  20. ?>


Tylko w tym przypadku w explode chyba powinno być \r\n zamiast znaku "."
Pilsener
Cytat
Możecie podać jakiś przykładowy kod tego LOAD DATA INFO ?
- a korzystać z forum lub manuala nie łaska?

  1. <?php
  2. $pliczek = "/xampp/htdocs/folder_strony/plik_dobazy.txt";
  3. $zapyt = "LOAD DATA LOCAL INFILE '$pliczek' REPLACE INTO TABLE dane FIELDS TERMINATED BY '\t'";
  4. ?>


Szczegóły: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

Oczywiście czasem zachodzi konieczność lekkiej obróbki pliku przed dodaniem, ale i tak jest szybciej, jeśli najpierw obrobimy plik:
  1. <?php
  2. $uchwyt = fopen($plik,'r+');
  3. while(!feof($uchwyt)){//parsujemy plik linia po linii
  4.   $linia = fgets($uchwyt);
  5. }
  6. ?>
- a potem dodamy go do bazy.
marian2299
Ja naprawdę jestem jakiś tępy ;|.
Wykombinowałem takie "cuś":
  1. <?php
  2. $line = file('plik.txt');
  3. $cnt = count($line); //sprawdź ilość linii
  4. echo $cnt;
  5. for ($i=0;$i<$cnt;$i++) //pętla
  6. {
  7.  $zapytanie = "INSERT INTO `kodykody` (`kod`, `uzyty`) VALUES ('".$line[$i]."', 'nie')"; //zapytanie do bazy
  8.  mysql_query($zapytanie); //wykonanie zapytania SQL
  9. }
  10. ?>

$cnt pokazuje mi że linii jest 5000.
Ale dodaje 1 rekord ;/.
TrevorGryffits
A spróbuj użyć po zapytaniu mysql_error" title="Zobacz w manualu PHP" target="_manual. Może wyrzuci jakiś błąd?
fander
załącz tutaj ten plik tekstowy
marian2299
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
1) Czyli jednak pokazuje:)
2) Tak myślałem... Masz na pole z "nie" założony indeks unikalny albo primary
iVorIus
3) Dodanie `id` z PRIMARY KEY lub ustawienie go na `kod`


Jak wszystko będzie działało, pokaż rozwiązanie smile.gif
marian2299
Rozwiązanie to:
  1. <?php
  2. $plik = file_get_contents('plik.txt'); //otwórz plik
  3. $eol = (strpos($_SERVER['SERVER_SOFTWARE'], 'Win')) ? "r\n" : "\n"; //przyjmij koniec linii dla Windowsa - r\n - dla linuxa - \n
  4. $line = explode($eol, $plik); //podziel plik na linie
  5. $cnt = count($line); //sprawdź ilość linii
  6. for ($i=0;$i<$cnt;$i++) //pętla
  7. {
  8.  $zapytanie = "INSERT INTO `kodykody` (`kod`, `uzyty`) VALUES ('".$line[$i]."', 'nie')"; //zapytanie do bazy
  9.  mysql_query($zapytanie); //wykonanie zapytania SQL
  10. ?>
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.