Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Upload plików [php], [mysql], Upload plików wg roku i m-ca
wlodek
post 15.04.2014, 11:03:42
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


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.

Go to the top of the page
+Quote Post
Turson
post 15.04.2014, 11:05:18
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


pobierasz datę i robisz ścieżkę
Go to the top of the page
+Quote Post
wlodek
post 15.04.2014, 11:09:59
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


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

Ten post edytował wlodek 15.04.2014, 11:14:00
Go to the top of the page
+Quote Post
Turson
post 15.04.2014, 11:20:19
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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
Go to the top of the page
+Quote Post
wlodek
post 15.04.2014, 11:34:17
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


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?
Go to the top of the page
+Quote Post
Turson
post 15.04.2014, 11:44:51
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  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;
Go to the top of the page
+Quote Post
wlodek
post 15.04.2014, 11:48:25
Post #7





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


Tz. muszę zapisać rekord a później go edytować w celu dodania pliku?
Go to the top of the page
+Quote Post
Turson
post 15.04.2014, 11:52:41
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Jeżeli ma to chodzić wg. daty w tabeli, to musisz pobrać datę
Go to the top of the page
+Quote Post
wlodek
post 15.04.2014, 12:08:21
Post #9





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


  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.
Go to the top of the page
+Quote Post
Turson
post 15.04.2014, 12:18:13
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Co to znaczy, że nie działa. O jakiej tabeli mówisz? Tabela w bazie danych czy nie?
Go to the top of the page
+Quote Post
wlodek
post 15.04.2014, 12:20:59
Post #11





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


tabela "protokoly" jest w bazie danych MySQL.

to co zrobiłem zapisuje plik w katalogu głównym
Go to the top of the page
+Quote Post
Turson
post 15.04.2014, 12:24:05
Post #12





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  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
Go to the top of the page
+Quote Post
in5ane
post 15.04.2014, 13:23:26
Post #13





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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.


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
lukaskolista
post 15.04.2014, 14:36:54
Post #14





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


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()
Go to the top of the page
+Quote Post
wlodek
post 15.04.2014, 17:49:27
Post #15





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


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.
Go to the top of the page
+Quote Post
Turson
post 15.04.2014, 17:52:55
Post #16





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Pokaż jakiś kod, bo nie zgadniemy
Go to the top of the page
+Quote Post
wlodek
post 17.04.2014, 22:38:31
Post #17





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


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);


Ten post edytował wlodek 17.04.2014, 22:42:08
Go to the top of the page
+Quote Post
nospor
post 18.04.2014, 11:20:46
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wlodek
post 18.04.2014, 13:55:03
Post #19





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 3.10.2009
Skąd: Łódź

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


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.
Go to the top of the page
+Quote Post
nospor
post 18.04.2014, 13:57:46
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  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. }



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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 13.06.2025 - 06:13