Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] tablica - dodawanie rekordu do każdego, elementu tablicy
marian2299
post
Post #1





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował marian2299 27.07.2009, 15:30:44
Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


http://pl2.php.net/manual/pl/function.array-map.php ale niewiem dokladnie o co tobie chodzi.
Go to the top of the page
+Quote Post
marian2299
post
Post #3





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


  1. <?php
  2. foreach( $file as $data )
  3. {
  4. mysql_query( 'insert into table( a ) values( "'. $f .'" ) ');
  5. }
  6. ?>
Go to the top of the page
+Quote Post
marian2299
post
Post #5





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
artur_dziocha
post
Post #6





Grupa: Zarejestrowani
Postów: 320
Pomógł: 53
Dołączył: 18.09.2007
Skąd: Radom

Ostrzeżenie: (0%)
-----


przyjrzy sie dokładnie kodowi.
skąd wzięła Ci sie zmienna $f??
Powinno być raczej $data

Ten post edytował artur_dziocha 27.07.2009, 16:27:39
Go to the top of the page
+Quote Post
marian2299
post
Post #7





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


Dałem, nic się nie zmieniło.
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Co to jest nie w wartościach?
Go to the top of the page
+Quote Post
marian2299
post
Post #9





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


To jest czy kod jest użyty.
Użyty = nie.
Wiem, mogłem to zrobić prościej.
Go to the top of the page
+Quote Post
skowron-line
post
Post #10





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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"
Go to the top of the page
+Quote Post
marian2299
post
Post #11





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował marian2299 28.07.2009, 00:43:22
Go to the top of the page
+Quote Post
MWL
post
Post #12





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

Ostrzeżenie: (0%)
-----


Chwila, co masz w tym pliku??
Go to the top of the page
+Quote Post
marian2299
post
Post #13





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


Kody:

s3mkb3
346ar5
bchhpt
t7nkh4
6but86

4999 kodów.
Go to the top of the page
+Quote Post
Pilsener
post
Post #14





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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ęć?
Go to the top of the page
+Quote Post
marian2299
post
Post #15





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


A pomożesz, jak to zrobić w tym konkretnym przypadku ? Każdy kod musi mieć "uzyty - nie" i kod...

Manual mysql jest po angielsku ;\.
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Da się: fgets" title="Zobacz w manualu PHP" target="_manual.

Choć nie rozumiem, jak dodaje pierwszy rekord - z prawidłową zawartością?
Go to the top of the page
+Quote Post
marian2299
post
Post #17





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


Tak, z prawidłową, ale tylko jeden, i to nie jest ten pierwszy z pliku, ale gdzieś ze środka.
Go to the top of the page
+Quote Post
erix
post
Post #18





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ok, spytam tak: nie masz przypadkiem mieszanych znaków końca linii w pliku?
Go to the top of the page
+Quote Post
marian2299
post
Post #19





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


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 ;\.
Go to the top of the page
+Quote Post
erix
post
Post #20





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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

Przecież to to samo. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Znak końca linii może mieć postać \r\n albo samego \n. Podejrzewam, że jest pomieszane.
Go to the top of the page
+Quote Post
marian2299
post
Post #21





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


Co ? Przecież tam nie ma ani \n ani \r\n.

Wie ktoś, jak to zrobić ?
Go to the top of the page
+Quote Post
erix
post
Post #22





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Bo to są znaki niewidoczne w edytorze tekstu... (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)

http://pl.wikipedia.org/wiki/End-of-line
Go to the top of the page
+Quote Post
MWL
post
Post #23





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

Ostrzeżenie: (0%)
-----


exploduj może??
ale najlepiej
  1. LOAD DATA INFILE


Ten post edytował MWL 28.07.2009, 17:21:16
Go to the top of the page
+Quote Post
marian2299
post
Post #24





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
iVorIus
post
Post #25





Grupa: Zarejestrowani
Postów: 145
Pomógł: 18
Dołączył: 11.11.2008
Skąd: Pwo

Ostrzeżenie: (0%)
-----


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 "."
Go to the top of the page
+Quote Post
Pilsener
post
Post #26





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
marian2299
post
Post #27





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


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 ;/.
Go to the top of the page
+Quote Post
TrevorGryffits
post
Post #28





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 29.07.2007
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


A spróbuj użyć po zapytaniu mysql_error" title="Zobacz w manualu PHP" target="_manual. Może wyrzuci jakiś błąd?
Go to the top of the page
+Quote Post
fander
post
Post #29





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

Ostrzeżenie: (0%)
-----


załącz tutaj ten plik tekstowy
Go to the top of the page
+Quote Post
marian2299
post
Post #30





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
TrevorGryffits
post
Post #31





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 29.07.2007
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


1) Czyli jednak pokazuje:)
2) Tak myślałem... Masz na pole z "nie" założony indeks unikalny albo primary
Go to the top of the page
+Quote Post
iVorIus
post
Post #32





Grupa: Zarejestrowani
Postów: 145
Pomógł: 18
Dołączył: 11.11.2008
Skąd: Pwo

Ostrzeżenie: (0%)
-----


3) Dodanie `id` z PRIMARY KEY lub ustawienie go na `kod`


Jak wszystko będzie działało, pokaż rozwiązanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował iVorIus 31.07.2009, 17:09:08
Go to the top of the page
+Quote Post
marian2299
post
Post #33





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 05:07