Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]upload pliku
Forum PHP.pl > Forum > Przedszkole
kozioł
Witam ,

chciałem zrobić insert danych z pliku csv do tabeli z poziomu PHP ,
ale dowiedziałem się że nie mogę tak robic gdyż [temp_name] , jest zmienne , i musze najpierw plik csv przenieść na dysk potem go otworzyć pobrać z niego dane i dopiero zrobić insert.

Zatem robię trochę dla mnie głupią rzecz po uploaduję plik do lokalizacji na swoim dusku pliku który już tam jest .

mam taki kod aby przenieść uploadowany plik ze swojego dysku na swój dysk :-)

  1. <?php
  2. $uploaded = "E:/DANE/upload/". $_FILES['pliki']['name'];
  3.  if (is_uploaded_file($_FILES['pliki']['tmp_name'])) {
  4.  
  5.  
  6.  
  7. move_uploaded_file($_FILES['pliki']['tmp_name'],$uploaded);
  8. echo "Operacja przebiegła pomyślnie";
  9.  
  10. } else {
  11. echo 'Błąd przy przesyłaniu danych!';
  12. }
  13. ?>


i za każdym razem (oczywiście jak w formulazru wybiorę plik) , mam info że operacja porzebiegła pomyślnie ,ale pliku tam nie ma nie ważne co wpiszę w ścieżkę do uploadu

gdzie mam błąd?


dzięki za pomoc.
nospor
nie:
  1. <?php
  2. move_uploaded_file($_FILES['pliki']['tmp_name'],$uploaded);
  3. echo "Operacja przebiegła pomyślnie";
  4. ?>

a:
  1. <?php
  2. if (move_uploaded_file($_FILES['pliki']['tmp_name'],$uploaded))
  3. echo "Operacja przebiegła pomyślnie";
  4. else echo 'uzywaj ifow na przyszlosc a zobaczyc wlasciwy komunikat - w tym przypadku: NIE UDALO SIE :)';
  5. ?>

I wlacz raportowanie wszystkich bledow to zobaczysz czym ci pluje move_uploaded_file.

ps: i w tytulach tematu ma byc znacznik i tytul a nie ty tytul dajesz zawsze w opisie
kozioł
teraz mam tak:



  1. <?php
  2. $uploaded = "E:/DANE/upload/". $_FILES['pliki']['name'];
  3. if (move_uploaded_file($_FILES['pliki']['tmp_name'],$uploaded))  
  4. {
  5.  echo "Operacja przebiegła pomyślnie";
  6.  
  7.  
  8.  
  9. } else {
  10. echo 'Błąd przy przesyłaniu danych!';
  11. }
  12. ?>


z za kazdym razem echo 'Błąd przy przesyłaniu danych!';

tak się zastanawiam czy dobrze robię , bo podaję dysk do uploadu lokalnie na swojej maszynie , i nie wiem czasem czy serwer www , nie szuka tego katalogu po swojej stronie.
nospor
no jesli twoj komp lokalny a serwer na ktorym pracujesz to dwa rozny kompy to tak, robisz blad smile.gif Przeciez serwer nie ma dostepu do twego kompa lokalnego. musisz serwerowi podac sciezke do ktorej ma dostep.
kozioł
kurcze sciana.gif , to już nie wiem co robić ,

nie poradzę sobie chyba z tym ,

na serwerze mam swój katalog gdzie wrzucam skrypty php , i tam też są wykonywane.

czy można jakoś to inaczej rowiązać ?,

jak zwykle wielkie dzięki @nospor , za zainteresowanie moim problemem

PS. moment , udało mi się uploadować plik , jako lokalizację podałem właśnie ten katalog na serwerze gdzie mam sówj katalog do skryptów ,


teraz muszę pokombnować jak wydobyć z niego dane do insertu do tabeli a potem automatycznie go wykasować
mike
~kozioł przy zakładaniu wątku masz do uzupełniania tytuł i opis.
Ty zawsze robisz po swojemu i dajesz tytuł jako opis a w tytule tylko znaczniki. To błąd.

Proszę natychmiast poprawić ten wątek i pamiętać o tym na przyszłość.
W przeciwnym wypadku wątek (i kolejne) idą do kosza.
kozioł
ok ,

juz sobie z tym poradziłem ,to znaczy dane już wpisywane są z pliku csv do tabeli ,

ale mam inny problem , w pliku csv są dwie kolumny z danymi ,

pierwsza kolumna przenosi się normalnie a z drugiej dane zakończone są jakimś kwadracikiem , tego nie widać jak są wyświetlane na stronie ,

ale w tabeli sql widać , i przez to nie można się do nich normalnie odwołać.

myślałem że coś nie tak jest z tabelą , a niby wzsystko jest ok,

gdzie może lezeć przyczyna tego problemu?
nospor
ten kwadracik to zapewne enter. Musisz przed wlozeniem do bazy przepuscic ten tekst przez trim()
kozioł
przed insertem do bazy mam tak

  1. <?php
  2. $line = trim($line,\t");
  3. ?>


ale to jest tabulator , a jak usunąc ten enter?
nospor
samo trim:
  1. <?php
  2. $line = trim($line);
  3. ?>
kozioł
guitar.gif ,


jeszcze tylko jednego brakuje mi do tego wszystkiego ,

jak zrobię insert to mam echo o ilości zapisanych danych(wierszy) ,

tylko mam tak że rozpisuje mi to na każdą linię , czyli

dopisano 1 rekordów dopisano 2 rekordów dopisano 3 rekordów dopisano 4 rekordów itd..
w kodzie mam tak
  1. <?php
  2. $lines = 0;
  3. $lines++;
  4. echo "dopisano $lines rekordów ";
  5. ?>


jak policzyć ilośc lini zapisancyh?
nospor
ten kod masz w petli?
To daj $lines = 0; przed petle,
$lines++ w petli
a echo poza petle
kozioł
zrobiłem tak

  1. <?php
  2. $lines = 0;
  3.  
  4. $queries = "";
  5. $linearray = array();
  6. foreach(split($lineseparator,$csvcontent) as $line) {
  7. $queries .= $query . "\n";
  8.  
  9. unlink($uploaded); 
  10. $lines++;
  11. echo "dopisano $lines rekordów ";
  12. }
  13. ?>

ale nadal mam wyświetlane linie z pliku po kolei , a nie ich sumę
MMPrime
Kod
echo "dopisano $lines rekordów ";

Daj poza pętlą foreach, czyli po }
kozioł
jak dam echo poza pętlę }

to nic mi się nie wyświetla
nospor
  1. <?php
  2. $lines = 0;
  3.  
  4. $queries = "";
  5. $linearray = array();
  6. foreach(split($lineseparator,$csvcontent) as $line) {
  7. $queries .= $query . "\n";
  8.  
  9. unlink($uploaded); 
  10. $lines++;
  11.  
  12. }
  13. echo "dopisano $lines rekordów ";
  14. ?>
kozioł
już tak próbowałem ,

jak dam echo poza petlę to nic mi się nie wyświetla sadsmiley02.gif
nospor
W petli ci sie wyswietla a poza nie? A wychodzi ci wogole z tej petli? Pokaz caly kod
kozioł
  1. <?php
  2. $fieldseparator = ";";
  3. $lineseparator = "\n";
  4.  
  5. $uploaded = "//xxx.xxx.xx.x/TEMP/". $_FILES['pliki']['name'];
  6. move_uploaded_file($_FILES['pliki']['tmp_name'],$uploaded);
  7.  
  8.  
  9.  
  10. $csvfile=$uploaded; 
  11. $save = 1;
  12.  
  13. if(!file_exists($csvfile)) {
  14. echo "nie znaleziono pliku.\n";
  15. }
  16.  
  17.  
  18. $file = fopen($csvfile,"r");
  19.  
  20. if(!$file) {
  21. echo "nie mogę otworzyc pliku.\n";
  22. }
  23.  
  24. $size = filesize($csvfile);
  25.  
  26. if(!$size) {
  27. echo "pusty plik.\n";
  28. }
  29.  
  30. $csvcontent = fread($file,$size);
  31.  
  32. fclose($file);
  33.  
  34. $lines = 0;
  35.  
  36.  
  37. $queries = "";
  38. $linearray = array();
  39.  
  40. foreach(split($lineseparator,$csvcontent) as $line) {
  41.  
  42.  
  43. $line = trim($line);
  44. $line = trim($line,\t");
  45.  
  46. $line = str_replace("r","",$line);
  47.  
  48.  
  49. $line = str_replace("'","'",$line);
  50.  
  51.  
  52. $linearray = explode($fieldseparator,$line);
  53.  
  54. $linemssql = implode("','",$linearray);
  55.  
  56. $db=mssql_connect('xxx.xx.xx.x','login','hasło')
  57.  or die ("Nie mozna polaczyc sie z baza, spróbuj ponownie");
  58.  
  59. mssql_select_db("bazy",$db) or die ("nie mogę poł&plusmn;czyć z baz&plusmn;");
  60. $query = "INSERT INTO baza (numerzam,numertow,rodzaj,wydajacy,datawyd,jednostka,hrs,UWAGI) VALUES ('$linemssql','$rodzaj','$wydajacy','$data','$odbiorca','$hrs','$uwagi' )";
  61.  
  62.  
  63. $queries .= $query . "\n";
  64. mssql_query($query)or die("Wykonanie zapytania nie powiodło się: ".mssql_error());
  65.  
  66.  
  67.  
  68.  
  69. unlink($uploaded); 
  70. $lines++;
  71.  
  72. }
  73. echo "dopisano $lines rekordów ";
  74.  
  75. ?>
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.