Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> upload dwóch plików do dwóch różnych katalogów, funkcja foreach() dla uploadowanych dwóch plików
mpps
post
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


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


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
Ludvik
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


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.


--------------------
Go to the top of the page
+Quote Post
mpps
post
Post #3





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


@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


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
siemakuba
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


- 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.
Go to the top of the page
+Quote Post
mpps
post
Post #5





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


@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


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
Ludvik
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


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

Ten post edytował Ludvik 6.07.2006, 13:31:06


--------------------
Go to the top of the page
+Quote Post
mpps
post
Post #7





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


@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...)

Ten post edytował mpps 8.07.2006, 21:57:09


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post

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 Aktualny czas: 19.08.2025 - 22:18