Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: upload dwóch plików do dwóch różnych katalogów
Forum PHP.pl > Forum > Przedszkole
mpps
Cześć.
Może ktoś z Was będzie tak miły i podpowie jak wykonać upload dwóch plików do dwóch różnych katalogów na serwerze za jednym zamachem?

Nie wiem, czy dobrym rozwiązaniem tutaj jest pętla foreach(), a jeśli tak, to jak rozróżnić w jej tablicy dwa różne elementy, co jest chyba niemożliwe... sam nie wiem worriedsmiley.gif

Z góry dzięki...


  1. <?
  2. if ($admaction == "addfrm_cfm"){
  3. ?>

  1. <FORM METHOD="post" NAME="frm_cfm" ACTION="index.php?admaction=addfrm_cfmok" ENCTYPE="multipart/form-data">
  2. <TR>
  3. <TD>
  4. <INPUT TYPE="text" NAME="id" VALUE="" SIZE="2">
  5. </TD>
  6. </TR>
  7. <TR>
  8. <TD>foto full</TD>
  9. <TD>
  10. <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="5000000">
  11. <INPUT CLASS="formText2" TYPE="file" NAME="foto_full" SIZE="42">
  12. </TD>
  13. </TR>
  14. <TR>
  15. <TD>foto thmb</TD>
  16. <TD>
  17. <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="5000000">
  18. <INPUT CLASS="formText2" TYPE="file" NAME="foto_thmb" SIZE="42">
  19. </TD>
  20. </TR>
  21. <TR>
  22. <TD>
  23. <INPUT TYPE="SUBMIT" NAME="dodaj" VALUE="dodaj"> <INPUT TYPE="button" NAME="powrot" VALUE="powrót">
  24. </TD>
  25. </TR>
  26. </FORM>

  1. <?
  2. }
  3.  
  4. elseif ($admaction == "addfrm_cfmok"){
  5. $plik_katalog_full = "img/fullsize/";
  6. foreach($_FILES as $plik_nazwa_full => $plik_tablica_full){
  7. echo "ścieżka: ".$plik_tablica_full['tmp_name']."<BR>";
  8. echo "nazwa: ".$plik_tablica_full['name']."<BR>";
  9. echo "typ: ".$plik_tablica_full['type']."<BR>";
  10. echo "rozmiar ".$plik_tablica_full['size']."<BR>";
  11.  
  12. if(is_uploaded_file($plik_tablica_full['tmp_name'])){
  13. move_uploaded_file($plik_tablica_full['tmp_name'],
  14. "$plik_katalog_full/$plik_tablica_full[name]") or die ("nie można przenieść pliku");
  15. echo "plik został przeniesiony!<BR><BR>";
  16. }
  17. }
  18.  
  19. /* to, co jest poniżej, mniej więcej tak by miało wyglądać do ładowania drugiego 
    pliku
  20. $plik_katalog_thmb = "img/thumbnails/";
  21. foreach($_FILES as $plik_nazwa_thmb => $plik_tablica_thmb){
  22. echo "ścieżka: ".$plik_tablica_thmb['tmp_name']."<BR>";
  23. echo "nazwa: ".$plik_tablica_thmb['name']."<BR>";
  24. echo "typ: ".$plik_tablica_thmb['type']."<BR>";
  25. echo "rozmiar ".$plik_tablica_thmb['size']."<BR>";
  26.  
  27. if(is_uploaded_file($plik_tablica_thmb['tmp_name'])){
  28. move_uploaded_file($plik_tablica_thmb['tmp_name'],
  29. "$plik_katalog_thmb/$plik_tablica_thmb[name]") or die ("nie można przenieść pliku");
  30. echo "plik został przeniesiony!<BR><BR>";
  31. }
  32. }
  33. */
  34. }
  35. ?>
Ludvik
Przecież w tej tablicy też masz zdjęcie w pełnych rozmiarach, więc odpada. Przesyłasz zdjęcie i miniaturkę, więc nie widzę problemu w wklepaniu tego na stałe. Nie ma co kombinować.

Jakbyś chciał przesyłać nieznaną ilośc miniaturek, wtedy mógłbyś je pętlą przerzucać, ale w obecnej sytuacji nie ma to żadnego sensu.
mpps
@Ludvik
Nie za bardzo zrozumiałem Twoją odpowiedź ale postaram się zadać jeszcze dodatkowe pytania lub uszczegółowić:
1. chcę wysłać dwa pliki z dwóch różnych pól formularza, nie pakiet plików z jednego pola (dla pętli foreach() nie ma to chyba większego znaczenia(?)).
2. każdy z plików ma się znaleźć w INNYM katalogu, więc nie można(?) tego załatwić jedną pętlą foreach(), a chcę to wykonać za jednym przejściem. Może nie powinienem tutaj stosować pętli foreach() (a jeśli nie, to jaką zastosować?)?
3. część zakomentowana oczywiście powtarza to, co jest powyżej, i to jest oczywiście błędne, bo jest to powielenie pętli, która została przed chwilą wykonana.
4. Czy istnieje możliwość rozbudowania pętli foreach() tak, aby był możliwy upload za jednym przejściem (mając na uwadze pkt. 2)?

pozdrawiam
siemakuba
- Każde pole INPUT type="file" nazwij inaczej.
- Umieść pola w kodzie.
- Wybierz pliki
- Zatwierdź formularz
- zrób sobie print_r($_FILES);
- i teraz już wiesz co gdzie masz, dalej dasz radę.

pozdr.
mpps
@siemakuba dzięki za podpowiedzi, chociaż w sumie to to samo uzyskiwałem, tylko, że trochę bardziej na około guitar.gif ale liczą się Twoje dobre chęci smile.gif
a rozwiązanie było proste... jak zwykle blink.gif
wystarczyło przypisać do zmiennej element tablicy zawierający nazwę, po czym zastosować tą zmienną.

oto rozwiązanie:

  1. <?
  2. //zmienne: katalogi i pobierane dane (nazwa) pliku
  3. $cat_full = "img/fullsize/";
  4. $cat_thmb = "img/thumbnails/";
  5. $foto_full = $_FILES[foto_full]['name'];
  6. $foto_thmb = $_FILES[foto_thmb]['name'];
  7.  
  8. //ładowanie plików
  9. if(is_uploaded_file($_FILES[foto_full]['tmp_name'])){
  10. move_uploaded_file($_FILES[foto_full]['tmp_name'],
  11. "$cat_full/$foto_full") or die ("nie można przenieść pliku");
  12. echo "plik został przeniesiony!<BR><BR>";
  13. }
  14.  
  15. if(is_uploaded_file($_FILES[foto_thmb]['tmp_name'])){
  16. move_uploaded_file($_FILES[foto_thmb]['tmp_name'],
  17. "$cat_thmb/$foto_thmb") or die ("nie można przenieść pliku");
  18. echo "plik został przeniesiony!<BR><BR>";
  19. }
  20. ?>


teraz pora na rozwinięcie skryptu (tzn. zastosowanie ograniczeń co do rodzaju plików, wielkości, itp.)
mam nadzieję, że to komuś z Was pomoże!
pozdrawiam i thnx
Ludvik
Problem rozwiązany, ale masz błędy w kodzie:
  1. <?php
  2. $_FILES[foto_full]['tmp_name']
  3. ?>

zamiast
  1. <?php
  2. $_FILES['foto_full']['tmp_name']
  3. ?>

Jeszcze odpowiem na twoje pytania, jako że nie miałem czasu wcześniej zaglądać na forum
Cytat
1. chcę wysłać dwa pliki z dwóch różnych pól formularza, nie pakiet plików z jednego pola (dla pętli foreach() nie ma to chyba większego znaczenia(?)).

Z jednego pola mozna wysłać tylko jeden plik. Mozna natomiast stworzyć tablicę z kilku pól.
Cytat
2. każdy z plików ma się znaleźć w INNYM katalogu, więc nie można(?) tego załatwić jedną pętlą foreach(), a chcę to wykonać za jednym przejściem. Może nie powinienem tutaj stosować pętli foreach() (a jeśli nie, to jaką zastosować?)?

Można załatwić to pętlą, ale sam już doszedłeś do tego, że to za dużo kombinowania smile.gif

Na pozostałe dwa pytania raczej nie ma potrzeby odpowiadania. Nie zrozumiałeś mojego postu, bo był trochę skrótowo napsany, ale napisałeś to o co mi chodziło smile.gif
mpps
@Ludvik dzięki za odpowiedź.
w sumie, to zapis:
  1. <?php
  2. $_FILES[foto_full]['tmp_name']
  3. ?>

nie spowodował błędu, więc pewnie można by go tak zostawić, ale dla zachowania prawidłowości stosowania kodu sam to zmieniłem w między czasie winksmiley.jpg

teraz mam kolejny problem, który staram się rozwiązać.
chodzi mi mianowicie o usuwanie plików z serwera, czyli funkcję unlink().
jakie mam problemy i pytania? całe mnóstwo... bo dopiero zacząłęm to robić winksmiley.jpg
np. w związku z tym, że informację o nazwie pliku zapisuję w bazie danych, chcę, żeby np. poprzez zastosowanie chcekbox-a przy polu formularza, w którym wartością jest nazwa pliku (dokładna, łącznie z rozszerzeniem) pobierana z bazy, plik ten był usuwany z serwera.
jeśli będziesz (wszyscy będziecie) mieli jakieś pomysły, to będę wdzięczny!

pozdrawiam!

problem rozwiązany, jak zwykle rozwiązanie było bardzo proste.
jeśli ktoś będzie potrzebował pomocy, to proszę otworzyć nowy temat i dać mi znać na priva.
jak znajdę czas, to napiszę tutaj rozwiązanie (chyba, że temat zostanie zamknięty...)
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.