Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Upload plików [php], [mysql]
Forum PHP.pl > Forum > PHP
wlodek
Witam,

mam tabelę z danymi: id,data,skan,...,...,

mam problem z przesyłaniem plików na serwer do katalogów wg roku i m-ca (sam upload działa)

chciałbym, żeby wyglądało to tak: pliki/rok/m-c wg daty z tej tabeli.

proszę o pomoc.

Turson
pobierasz datę i robisz ścieżkę
wlodek
Cytat(Turson @ 15.04.2014, 12:05:18 ) *
pobierasz datę i robisz ścieżkę



To ja wiem. Ale jak pobrać tą datę z formularza gdzie rekord jeszcze jest nie zapisany?

to mi się udało:
  1. $month = date('m');
  2. $year = date('Y');
  3. $folder = "pliki/" .$year."/".$month;


ale to tworzy katalog z daty systemowej
Turson
Jeżeli rekord nie jest zapisany to jak chcesz z niego datę wyciągnąć?
Zależy jaki masz format w bazie. strtotime() powinno pomóc
wlodek
Moje umiejętności są raczej słabe i w tym celu kupiłem program PHPrunner, więc praktycznie to on generuje cały kod.
Daje jednak możliwość dodawania wstawek z własnymi funkcjami czy fragmentami kodu.
Kilka drobiazgów udało mi się samemu rozwiązać. Zatrzymałem się na tym przesyłaniu plików do właściwych katalogów.

Czy możesz mi pomóc?
Turson
  1. $data = date("Y-m-d H:i:s"); //data z bazy
  2. $ex = explode("-",$data);
  3. $rok = $ex[0];
  4. $miesiac = $ex[1];
  5. $path = $rok."/".$miesiac;
  6. echo $path;
wlodek
Tz. muszę zapisać rekord a później go edytować w celu dodania pliku?
Turson
Jeżeli ma to chodzić wg. daty w tabeli, to musisz pobrać datę
wlodek
  1. function GetUploadFolderExpression($field, $file, $table="", $data="")
  2. {
  3. global $strTableName;
  4. if(!$table)
  5. $table = $strTableName;
  6. if($table=="protokoly" && $field=="skan" && $data=="data")
  7. {
  8.  
  9.  
  10. $data = date("Y-m-d H:i:s"); //data z bazy
  11. $ex = explode("-",$data);
  12. $rok = $ex[0];
  13. $miesiac = $ex[1];
  14. $path = $rok."/".$miesiac;
  15.  
  16. $folder = "files/".$path;;
  17. return $folder;
  18. }
  19. return "";
  20. }


Zrobiłem tak i nie działa.
Turson
Co to znaczy, że nie działa. O jakiej tabeli mówisz? Tabela w bazie danych czy nie?
wlodek
tabela "protokoly" jest w bazie danych MySQL.

to co zrobiłem zapisuje plik w katalogu głównym
Turson
  1. if($table=="protokoly" && $field=="skan" && $data=="data")

czym jest $field? Przecież przekazujesz $file co najwyżej
A co do zapisywania, to folder należy wcześniej stworzyć zanim doda się tam dane. mkdir
in5ane
Nie zastanawiałem się zbytnio, ale możesz zrobić to w ten sposób, że robisz upoad to tymczasowego folderu. Później odczytujesz sobie date utworzenia za pomocą funkcji stat. I w tym momencie mając date możesz sprawdzić, czy istnieje taki folder, jeśli nie istnieje, to go tworzysz, następnie przenosisz plik z tymczasowego katalogu do tego konkretnego katalogu funkcją rename.
lukaskolista
Wlodek, Twoje myslenie jest bledne.

1. Funkcja nie ma tylko zwrocic nazwy katalogu, ale tez go utworzyc:
  1. // Rekursywne tworzenie katalogu
  2. mkdir($path, 0777, true);

2. Do przenoszenia uploadowanych plikow proponuje uzyc funkcji move_uploaded_file()
wlodek
Z tworzeniem katalogów nie mam problemów. Problemem jest tworzenie katalogów na podstawie daty wpisanej do bazy.
Tworzy mi tylko katalogi na podstawie daty systemowej. Jeśli zmienię datę na 01-01-2011 to tworzy katalog: 2011/01 - czyli prawidłowo.
Turson
Pokaż jakiś kod, bo nie zgadniemy
wlodek
Cytat(Turson @ 15.04.2014, 18:52:55 ) *
Pokaż jakiś kod, bo nie zgadniemy


Jak już wcześniej napisałem. Jestem słaby w PHP i dlatego kupiłem program PHPRunner (http://xlinesoft.com/phprunner/index.htm), który generuje potrzebny kod (jest tego od cholery) na podstawie tabel i bazy którą utworzyłem.

Drobne przeróbki dałem sobie radę a utknąłem z tym uploadem.

Na stronie PHPRunner jest taka pomoc, ale nie potrafię tego rozgryźć.

http://xlinesoft.com/phprunner/docs/rename_uploaded_file.htm


częściowo rozwiązałem problem. Udało mi się tworzyć katalogi na podstawie daty z formularza ale są to katalogi z datą (np. 2012-06-01) a nie 2012/06.
i drugi problem. Jeśli nazwa dodawanego pliku się powtarza to jest nadpisywany (nie dodaje mi kolejnego nr za nazwą pliku.

Czy jest ktoś w stanie mi pomóc?

  1. $fileArray = my_json_decode($values["skan"]);
  2. for($i = 0; $i < count($fileArray); $i++)
  3. {
  4. $fileName = $fileArray[$i]["name"];
  5.  
  6. if (!file_exists("files/pkt/".$values["data"]."/")) { mkdir("files/pkt/".$values["data"]."/", 0777, true); }
  7.  
  8. $newFileName = "files/pkt/".$values["data"]."/".$values["nazwa"].$i.".pdf";
  9. rename($fileName, getabspath($newFileName));
  10. $fileArray[$i]["name"] = $newFileName;
  11. }
  12.  
  13.  
  14. $values["skan"] = my_json_encode($fileArray);
nospor
Cytat
Udało mi się tworzyć katalogi na podstawie daty z formularza ale są to katalogi z datą (np. 2012-06-01) a nie 2012/06.

$vd = date('Y/m', strtotime($values["data"]));
I w kodzie co pokazales zmien wystapienia $values["data"] na $vd
wlodek
Cytat(nospor @ 18.04.2014, 12:20:46 ) *
$vd = date('Y/m', strtotime($values["data"]));
I w kodzie co pokazales zmien wystapienia $values["data"] na $vd


Dzięki, teraz katalogi są tworzone zgodnie z moimi oczekiwaniami.

A może wiesz jak mi pomóc z nazwami plików? Chcę, żeby po nazwie była dopisywana cyfra np. dokA1, dokA2, itd. a u mnie dodaje zawsze "0" i przy takiej samej nazwie dokumentu nadpisuje je.
nospor
  1. $j = $i;
  2. while (true) {
  3. $newFileName = "files/pkt/".$values["data"]."/".$values["nazwa"].$j.".pdf";
  4. if (file_exists($newFileName)) $j++;
  5. else break;
  6. }

wlodek
Cytat(nospor @ 18.04.2014, 14:57:46 ) *
  1. $j = $i;
  2. while (true) {
  3. $newFileName = "files/pkt/".$values["data"]."/".$values["nazwa"].$j.".pdf";
  4. if (file_exists($newFileName)) $j++;
  5. else break;
  6. }


Dzięki!!!

Jeśli masz jeszcze odrobinę czasu dla mnie, to tak dla pewności czy nie mam zbędnych linii kodu w całości.

  1.  
  2. $fileArray = my_json_decode($values["skan"]);
  3. $vd = date('Y/m', strtotime($values["data"]));
  4.  
  5. for($i = 0; $i < count($fileArray); $i++)
  6. {
  7. $fileName = $fileArray[$i]["name"];
  8.  
  9. if (!file_exists("files/pkt/".$vd."/")) { mkdir("files/pkt/".$vd."/", 0777, true); }
  10. $j = $i;
  11. while (true) {
  12.  
  13. $newFileName = "files/pkt/".$vd."/".$values["data"].$j.".pdf";
  14. if (file_exists($newFileName)) $j++;
  15. else break;
  16. }
  17. rename($fileName, getabspath($newFileName));
  18. $fileArray[$i]["name"] = $newFileName;
  19. }
  20.  
  21.  
  22. $values["skan"] = my_json_encode($fileArray);
  23.  
  24.  
  25. return true;
nospor
Czy kupa pustych linii tez sie zalicza do zbednych linii kodu? wink.gif
wlodek
No nie, ale skasowałem różne wstawki kodu jak testowałem.
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.