Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL]Dodawanie z txt do bazy
shtoc
post 19.01.2009, 15:05:43
Post #1





Grupa: Zarejestrowani
Postów: 128
Pomógł: 0
Dołączył: 18.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Mam takie pytanie!!
Jak dodaje rekordy do bazy z pliku txt to kazdy nowy wiersz pliku jest nowym rekordem.

Czy mozna zrobic tak zeby skrypt bral 1 wiersz i ustawial jako przyposcmy tytul w bazie i kolejne 10 wierszy i ustawail jako opis. zeby to bylo jednym rekordem. i pote lecial dalej 11 na tytul i kolejne 10 na opis!
czyli plik :
1
2
3
4
5
...
w bazie
id tytul opis
1 1 2 3 4 5...


kod jakim dodaje rekordy z pliku do bazy

  1. <?php
  2. $pdo = new PDO('mysql:host=localhost;dbname=test', 'admin', 'xxx');
  3. $pdo ->query("SET NAMES utf8");
  4. $plik = file("d:ksiazka2.txt");
  5.  
  6. foreach($plik as $tmp)
  7. {
  8. $sql = "INSERT INTO spam (`cont`) VALUES (:cont)";
  9. $statement = $pdo->prepare($sql);
  10. $statement->bindValue(':cont', $aaa, PDO::PARAM_STR);
  11. $statement->execute();
  12. }
  13. ?>


Ten post edytował shtoc 19.01.2009, 15:28:50
Go to the top of the page
+Quote Post
thomson89
post 19.01.2009, 15:47:36
Post #2





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


Cytat(shtoc @ 19.01.2009, 15:05:43 ) *
zeby skrypt bral 1 wiersz i ustawial jako przyposcmy tytul w bazie i kolejne 10 wierszy i ustawail jako opis. zeby to bylo jednym rekordem. i pote lecial dalej 11 na tytul i kolejne 10 na opis!


Pomocna będzie while" title="Zobacz w manualu PHP" target="_manual, oraz explode" title="Zobacz w manualu PHP" target="_manual. Oczywiście, jeżeli wiesz ile masz w pliku tytułów...

Kod
Hello<!>
Opis 1;
Opis 2;
Opis 3;
Opis 4;
...itd.


I najpierw rozbijasz explode, na tytul i tresc. Za pomocą funckji mozesz sprawdzić czy już jest koniec pliku. W ten sposób tworzysz pętlę while, która odczyta tytuły. Będziesz miał wtedy taką tabelkę:
Kod
//jak dales $tabela1 = explode('<!>', $plik)
$tabela1[0] // twoj tytul
$tabela[1] // twoje opisy

I za pomocą kolejnej pętli dzielisz $tabela[1] według ; a potem już łatwo dostosować wyniki do własnych potrzeb.


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
shtoc
post 19.01.2009, 15:54:04
Post #3





Grupa: Zarejestrowani
Postów: 128
Pomógł: 0
Dołączył: 18.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


hmm to moze inne pytanie exclamation.gif jak zrobic zeby z pliku pobierac przykladowo po 10 wierszy do jednego pola bazy?

zeby nie bylo ze po <enter> jest nowy rekord.
Go to the top of the page
+Quote Post
erix
post 19.01.2009, 17:41:32
Post #4





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




Robisz sobie pętlę pobierającą linię (fgets" title="Zobacz w manualu PHP" target="_manual) i w niej licznik zwiększający się co krok o jeden. Jeśli dziesięć - wszystkie poprzednio wczytane wpisy, to cały rekord i resetujesz licznik do zera.

Kod
licznik = 0;
while(pobierz){
   jesli
      licznik<10 to rekord .= wczytane dane
   w przeciwnym wypadku
      kasuj licznik
   zwieksz licznik
}


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Pilsener
post 20.01.2009, 08:25:10
Post #5





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

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


Po pliku poruszasz się tak:
  1. <?php
  2. $uchwyt = fopen($pliczek,'r');  
  3.   while(!feof($uchwyt)){
  4.      if(fgets($uchwyt)){
  5.            $ile_rekordow++;
  6.        }
  7.   }
  8. fclose($uchwyt);
  9. echo $ile_rekordow;
  10. ?>


1. Przerób najpierw plik tak, aby spełniał Twoje wymagania (to co odczytujesz z jednego pliku od razu możesz zapisać do drugiego)
2. Dodaj plik do bazy używając LOAD DATA INFILE zamiast INSERT - z doświadczenia wiem, że jest to nawet kilkanaście razy szybsze.
Go to the top of the page
+Quote Post
EarthCitizen
post 20.01.2009, 09:21:31
Post #6





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

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


BTW: Jak masz odpowiednią strukturę danych w pliku, np masz plik CSV z rekordami każdy w nowej linii i pola oddzielone separatorami to możesz sobie dodać przez phpmyadmina bez potrzeby pisania skryptu.
Go to the top of the page
+Quote Post
shtoc
post 28.01.2009, 11:05:24
Post #7





Grupa: Zarejestrowani
Postów: 128
Pomógł: 0
Dołączył: 18.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Cytat(Pilsener @ 20.01.2009, 08:25:10 ) *
Po pliku poruszasz się tak:
  1. <?php
  2. $uchwyt = fopen($pliczek,'r');  
  3.   while(!feof($uchwyt)){
  4.      if(fgets($uchwyt)){
  5.            $ile_rekordow++;
  6.        }
  7.   }
  8. fclose($uchwyt);
  9. echo $ile_rekordow;
  10. ?>


1. Przerób najpierw plik tak, aby spełniał Twoje wymagania (to co odczytujesz z jednego pliku od razu możesz zapisać do drugiego)
2. Dodaj plik do bazy używając LOAD DATA INFILE zamiast INSERT - z doświadczenia wiem, że jest to nawet kilkanaście razy szybsze.


ale fgets pobiera linie o zadanej długości, jednak pobieranie konczy sie jak napotka znak <enter>.

a ja potrzebuje zeby pobral przykladowo do jednego rekordu 3 linie po enterach.

czyli jak mam plik :
linia 1 <enter>
linia 2 <enter>
linia 3 <enter>
linia 4 <enter>

to chcę w bazie
w 1 rekordzie
linia 1 linia 2 linia 3
w 2 rekordzie
linia 4.....itd
Go to the top of the page
+Quote Post
erix
post 28.01.2009, 13:05:16
Post #8





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




Cytat
a ja potrzebuje zeby pobral przykladowo do jednego rekordu 3 linie po enterach.


To jaki masz problem?
  1. <?php
  2. while(!feof($f)){
  3.  $linia1 = fgets($f);
  4.  $linia2 = fgets($f);
  5.  $linia3 = fgets($f);
  6. }
  7. ?>


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 17.06.2025 - 00:36