Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Import CSV
Forum PHP.pl > Forum > Przedszkole
Anja
Witam wszystkich. Mam na imię Anka i mam problem z zadaniem na zaliczenie :/ Musze napisać skrypt, który bedzie importował plik CSV do bazy danych, z tym, że musi on sprawdzać czy imię i nazwisko osoby nie jest już w bazie, jeżeli jest to tylko wyedytować tą osobę.

A więc tak:

Mam plik CSV o takiej mniej-więcej strukturze:
Kod
#Imie i nazwisko;Wpłata/wypłata;Stan;Wartość
** Klasa I;;;
Andrzej Andrzejczak;2;1;2.60
Bogdan Bogdanek;1;1;2.60
** Klasa II;;;
* A;;;
Celina Celińska;1;1;233.70
Dariusz Darecki;0;1;155.15
Edward Edwarczyk;1;1;395.90
* B;;;
Filip Filipiak;1;1;299.99
Grzegorz Grzegorzewski;2;0;473.72
Halina Haliniak;1;1;286.99


Legenda:
Listę wszystkich uczniów przedzielają wiersze określające przynależność ucznia do danej klasy(kategorii) i symbolu klasy (podkategorii). Nazwy kategorii poprzedzone są dwoma znakami gwiazdki * a podkategorii jednym znakiem gwiazdki.
W pierwszym wierszu znajduje się legenda pliku poprzedzona znakiem komentarza #.
Kodowanie polskich znaków w formacie Win-1250.

/************************************************/

Oto co muszę zrobić:
1. skryptem przekonwertować treśc pliku z kodowania Win-1250 na UTF-8 lub ISO 8859-2
2. wgrać do bazy zawartośc pliku: czyli skrypt sprawdza czy dany uczeń jest w bazie, jesli jest to aktualizacja danych, jeśli nie ma daodanie do bazy i/lub utworzenie kategorii. Plik bedzie wgrywany z serwera. Czyli ma być okienko w formularzu, gdzie podaj sie adres pliku.

/************************************************/

Gdy wrócę wieczorem to pokarze mój kod, który robiłam... Jak narazie to on dodaje lub aktualizuje... Albo raczej Dodaje pisząc ze aktualizuje albo na odwrót.

=== EDIT ===
oto mój kod
  1. <?php
  2. //include "header.php";
  3. include "conf.php";
  4.  
  5. if(isset($_POST['submit']))
  6.  {
  7.  $filename=$_POST['filename'];
  8.  $handle = fopen("$filename", "r");
  9.  $licznik = 0;
  10.  while (($data = fgetcsv($handle, 10000, ";")) !== FALSE)
  11.  {
  12. if($data[0][0]=='#') continue;
  13. if($data[0][0]=='*') continue;
  14. if($data[0]!="$imie")
  15. {
  16.  $import="INSERT skladka (imie,wplata,stan,wartosc) values('$data[0]','$data[1]','$data[2]','$data[3]')";
  17.  mysql_query($import) or die(mysql_error());
  18.  echo "<span style="color:green">$licznik. Dodano: $data[0]</span><br />";  
  19.  }
  20.  else
  21.  {
  22.  $query="UPDATE skladka SET imie='$data[0]', wplata='$data[1]', stan='$data[2]', wartosc='$data[3]]' WHERE imie='$imie'";
  23.  mysql_query($query);
  24.  echo "<span style="color:red">$licznik. Zaktualizowano: $data[0]</span><br />";
  25.  }
  26.  $licznik++;
  27.  }
  28.  fclose($handle);
  29.  print "Dodano $licznik nazwisk";
  30.  }
  31.  else
  32.  {
  33. print "<form action='csv.php' method='post'>";
  34. print "Dodaj plik do importu:<br>";
  35. print "<input type='text' name='filename' size='20'><br>";
  36. print "<input type='submit' name='submit' value='submit'></form>";
  37.  }
  38. ?>


Tak jak pisałam... on dodaje, czasem aktualizuje i nie wiem od czego to zależy.. a już na serio nie wiem jak zrobić aby dodawał do odpowiednich kategorii sad.gif
Sabistik
Proszę o zapoznanie się z tematem: Temat: Tematyka i zasady panujące na forum Przedszkole a następnie o PW z poprawnym tematem.

Do tego czasu zamknięte.

Cytat
Gdy wrócę wieczorem to pokarze mój kod, który robiłam... Jak narazie to on dodaje lub aktualizuje... Albo raczej Dodaje pisząc ze aktualizuje albo na odwrót.

To lepiej pokaż bo tu nie robimy za nikogo prac na zaliczenie.

Otwieram.
Anja
Czy ktoś pomoże... nie potrafię tego zrobić, bądźcie wyrozumiali sad.gif
JaRoPHP
Cytat(Anja @ 8.06.2007, 15:37:30 ) *
Tak jak pisałam... on dodaje, czasem aktualizuje i nie wiem od czego to zależy..

Twój kod wygląda tak:
  1. <?php
  2. // ... 
  3. while (($data = fgetcsv($handle, 10000, ";")) !== FALSE) {
  4.  if($data[0][0]=='#') { // tu jest ok
  5. continue;
  6.  }
  7.  if($data[0][0]=='*') { // tu jest ok
  8. continue;
  9.  }
  10.  
  11.  if($data[0]!="$imie") { // tu jest coś nie tak
  12. // ...  
  13.  }
  14. ?>

Z analizy Twojego pliku, przyjmuję, że linijka może się zaczynć: #, * albo imieniem - nie ma innej możliwości. Dlatego pierwsze warunki są ok, natomiast potem sprawdzasz, czy linijka jest równa zmiennej $imie (której nigdzie nie deklarujesz wcześniej).

Ja bym robił mniej więcej tak:
- sprawdził, czy jest #, lub * (mniej więcej jak Ty masz) - jak tak, to continue,
- odczytał linijkę i wyodrębnił dane (imię, nazwisko, ...
- zapytanie do bazy, czy rekord z podanym nazwiskiem istnieje (zakładam, że nazwisko to jest klucz główny) (mozesz skorzystac z funkcji: mysql_query" title="Zobacz w manualu PHP" target="_manual, mysql_num_rows" title="Zobacz w manualu PHP" target="_manual)
- jak istnieje, to UPDATE Syntax,
- w przeciwnym razie (nie istnieje): INSERT Syntax.

Oczywiście wcześniej musisz zmienić kodowanie: iconv
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.