Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapisywanie do bazy wyniku z pliku csv
Forum PHP.pl > Forum > PHP
Spyder
  1. <?php
  2. $row = 0;
  3. $handle = fopen("invoice.csv", "r");
  4. while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  5.  
  6. $row++;
  7. $num = count($data);
  8. for ($x=0; $x < $num; $x++) {
  9.  
  10. }
  11.  
  12.  
  13.  
  14.  
  15.  
  16. $update = mysql_query ("INSERT INTO items VALUES ( 
  17.  'ddd', 
  18. '".$data[0]."', 
  19. '".$data[1]."', 
  20. '".$data[2]."', 
  21. '".$data[3]."', 
  22. '".$data[4]."', 
  23. '".$data[5]."', 
  24. '".$data[6]."')
  25.  ")or DIE(mysql_error());
  26.  
  27.  
  28. }
  29. ?>


Witam ta funkcja pobiera mi dane z pliku csv i wpisuje do bazy tylko wpisuje wszystko co jest w csv jak to przerobic aby wpisala mi raz ostatnia linie (rzad ) z pliku csv. Z gory dzieki
b_chmura
otwierasz plik do tablicy (file" title="Zobacz w manualu PHP" target="_manual)
odwracasz tablice (array_reverse" title="Zobacz w manualu PHP" target="_manual)
i resztę chyba wiesz jak zrobić biggrin.gif

  1. <?php
  2. $plik = 'jakis-plik.csv';
  3. $dane = file($plik);
  4. $dane = array_reverse($dane);
  5. $dana = explode(';'. $dane[0]);
  6. //...
  7. ?>
Spyder
Tak tylko w moim przypadku data[0] - data[6] to kolumny czyli plik csv wyglada tak id imie nazwisko data... i te kolumny sa brane wpisywane do bazy kazdy wiersz to 6 imputow.T co napisales wiswietli mi pierwsza dana ostatniego wiersza tak ?
  1. <?php
  2. $data = array();
  3. $x = 0;
  4. if ($file = fopen("invoices.csv")) {
  5. foreach($file as $l) {
  6. $record = explode("\t", $l);
  7. $data[$x]["id"] = time() + $x;
  8. $data[$x]["clientid"] = trim($record[0]);
  9. $data[$x]["clientname"] = htmlspecialchars(trim(str_replace('"','',$record[1])), ENT_QUOTES);
  10. $data[$x]["invoiceid"] = trim($record[2]);
  11. $data[$x]["invoicedate"] = substr(trim($record[3]), 0, strpos(trim($record[3]), " "));
  12. $data[$x]["nettotal"] = trim($record[4]);
  13. $data[$x]["taxtotal"] = trim($record[5]);
  14. $data[$x++]["grosstotal"] = trim($record[6]);
  15. }
  16. }
  17. $message = "";
  18. foreach($data as $d) {
  19. if ($d["clientid"] != "" && $d["invoiceid"] != "") {
  20. mysql_query("delete from items where customer_id = '" . $d["clientid"] . "' and invoice_id = '" . $d["invoiceid"] . "'");
  21. mysql_query("insert into items (id, customer_id, customer_name, invoice_id, invoice_date, net, tax, price) values (" . $d["id"] . ", '" . $d["clientid"] . "', '" . $d["clientname"] . "', '" . $d["invoiceid"] . "', '" . $d["invoicedate"] . "', " . $d["nettotal"] . ", " . $d["taxtotal"] . ", " . $d["grosstotal"] . ")") or die(mysql_error() . "<br/>insert into items (id, customer_id, customer_name, invoice_id, invoice_date, net, tax, price) values (" . time() . ", '" . $d["clientid"] . "', '" . $d["clientname"] . "', '" . $d["invoiceid"] . "', '" . $d["invoicedate"] . "', " . $d["nettotal"] . ", " . $d["taxtotal"] . ", " . $d["grosstotal"] . ")");
  22. $message .= "Client ID: " . $d["clientid"] . "\nInvoice ID: " . $d["invoiceid"] . "\n\n";
  23. }
  24. }
  25. ?>
Tylko cos mi nie chce mi wpisac do bazy....
b_chmura
1.
  1. <?php
  2. $dana = explode(';'. $dane[0],$dane[1]),$dane[2]),$dane[3]),$dane[4],$dane[5],$dane[6]);
  3. ?>

co to jest?

2.
Z tego co ja rozumiem chcesz zapisać ostatni wpis (czyli wszytko id;imie;nazwisko;data...)
Czyli:
  1. <?php
  2. $plik = 'jakis-plik.csv';
  3. $dane = file($plik);
  4. $dane = array_reverse($dane);
  5. $dana = explode(';'. $dane[0]); //$dane[0] to ostatni wpis 
  6. /*
  7. Teraz kolejno każda zmienna $dana[0]. $dana[1], $dana[2]... 
  8. będzie wartością kolumny id, imię, nazwisko, data...
  9. */
  10. $update = mysql_query("INSERT INTO `items` (`ID`, `imie`, `nazwisko`, `data`) VALUES ('$dana[0]', '$dana[1]', '$dana[2]', '$dana[3]');");
  11. ?>


"(`ID`, `imie`, `nazwisko`, `data`)" - to nazwy kolumn w bazie

coś w ten deseń. Mam nadzieje że rozumiesz o co chodzi ohmy.gif
Spyder
Kuknij to co wkleilem powinno miec teraz sens tylko z jakiegos powodu nie dziala i nie wywala zadnego bledu... J sprawdze to twoje winksmiley.jpg
b_chmura
napisz mi jak wygląda ten plik csv. Z tego co ja widzę to każdą dane masz na nowej linijce...

Kod
id
imie
nazwisko
data
...

jest tak?
Kod
id;imie;nazwisko;data;...
id;imie;nazwisko;data;...
id;imie;nazwisko;data;...

czy tak?
Spyder
nie nie jest tak:

1171461479 | 1172 | Thurman | 20005 | 17/11/04 | 533.45 | 82.25 | 615.7
1171461480 | 1301 | Bill | 20006 | 18/11/04 | 73.12 | 11.2 | 84.32

i tak dalej ok 300 wpisow...
b_chmura
  1. <?php
  2. $dana = explode(';'. $dane[0]); //$dane[0] to ostatni wpis
  3. ?>

ta linijkę zmień na:
  1. <?php
  2. $dana = explode(' | '. $dane[0]); //$dane[0] to ostatni wpis
  3. ?>
Spyder
  1. <?php
  2. include('connect.php');
  3. ini_set('display_errors','On');
  4.  
  5. $plik = 'invoice.csv';
  6. $dane = file($plik);
  7. $dane = array_reverse($dane);
  8. $dana = explode(';'. $dane[0]); //$dane[0] to ostatni wpis 
  9. /*
  10. Teraz kolejno każda zmienna $dana[0]. $dana[1], $dana[2]... 
  11. będzie wartością kolumny id, imię, nazwisko, data...
  12. */
  13.  
  14. echo $dana[0];
  15. echo $dana[1];
  16. echo $dana[2];
  17. echo $dana[3];
  18. echo $dana[4];
  19. echo $dana[5];
  20. echo $dana[6];
  21. echo $dana[7];
  22.  
  23. $update = mysql_query("insert into items (id, customer_id, customer_name, invoice_id, invoice_date, net, tax, price) values ('$dana[0]', '$dana[1]', '$dana[2]', '$dana[3]', '$dana[4]', '$dana[5]', '$dana[6]', '$dana[7]');");
  24.  
  25.  
  26. ?>


Te kreski to ja dopisalem zeby pokazac ci jak sa kolumny mam tak i nie wyswietla ani w echo ani nie wpisuje do bazy ? plik napewno dziala bo jak mialem funkcje do czytania tylko pliku to czytala wszystko bez problemu questionmark.gif?
b_chmura
mała literówka
  1. <?php
  2. $dana = explode(';'. $dane[0]); //$dane[0] to ostatni wpis
  3. ?>

zmień na:
  1. <?php
  2. $dana = explode(';', $dane[0]); //$dane[0] to ostatni wpis
  3. ?>


u mnie działa, nie patrzyłem jeśli chodzi o zapis do bazy ale zapytanie wydaje sie ok

EDIT
zamiast przecinka w explode dałem kropkę :P
Spyder
u mnie musialo byc z przecinkiem ale dziala dzieki wielkie za pomoc smile.gif
  1. <?php
  2. $record = explode(",", $dane[0]);
  3. ?>
b_chmura
Cytat
Wsparcie dla plików CSV w programie Microsoft Excel było zgodne z standardem do wersji 2000, jednakże od wersji 2003 przecinek został zastąpiony średnikiem, który nie działa z kolei w wersji 2000. W związku z tym wersja 2003 nie jest zgodna ze standardem oraz z wersją 2000.


Nie wiem jakiej wersji używasz smile.gif

pozdrawiam
Chmura
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.