Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dodawanie w foreach
Forum PHP.pl > Forum > Przedszkole
lary7
Witam wszystkich.


Zrobiłem skrypt uploadu i mam pewien problem. Podczas uploadu można wybrać wiele plików, które nie powinny razem przekraczać np. 400kb. Więc pomyślałem, że w foreach wyciągnę rozmiar każdego pliku, a następnie wszystko zsumuje. Kod wygląda tak:

  1. foreach( $_FILES as $file_name => $file_array ) {
  2. echo $file_array['size'].'<br>';
  3. }


Co daje mi rozmiary wszystkich plików (oczywiście są w nowych liniach przez <br>, normalnie są "złączone"):
Kod
18
33976
889


I mam teraz pytanie... jak to wszystko pododawać w foreach?
TrevorGryffits
Poczytaj np. o array_sum. Na przykład. Możesz też ustawić jakąs zmienną, która będzie przechowywała sumę rozmiarów, a potem oparetor += i heja.
Suh
  1. $suma = 0;
  2.  
  3. foreach($_FILES as $file_name => $file_array) {
  4. $suma += $file_array['size'];
  5. }
  6.  


np. tak ?
thek
Ja osobiście przy zdarzeniu onsubmit bym już JS zaprzągł i sprawdził u klienta, czy aby pliki nie są za duże. Po co ściągać je na serwer ileś tam czasu by się nagle okazało, że ktoś chciał wrzucić 10MB plik przy ograniczeniu 100kB? Sprawdzasz sumaryczny rozmiar plików i jeśli za duże to nawet nie próbujesz uploadu. A na serwie i tak sprawdzasz rozmiar bo userom sie nie ufa. Nie bez powodu admini piszą o użyszkodnikach winksmiley.jpg
lary7
Zrobiłem tak jak mówił Suh i można powiedzieć, że prawie się udało. Gdy mam taki kod:
  1. $sum = 0;
  2. foreach( $_FILES as $file_name => $file_array ) {
  3. echo $sum += $file_array['size'];
  4. }

to wynik jaki się wyświetla to 1836518, czyli skrypt "pokazuje" jak dodaje liczby, a mi chodzi tylko o wynik, czyli o liczbę 518. Pomyślałem, że po prostu ograniczę ilość wykonywania pętli:
  1. $sum = 0;
  2. $i = 0;
  3. foreach( $_FILES as $file_name => $file_array ) {
  4. echo $sum += $file_array['size'];
  5. $i++;
  6. if ($i==1) break
  7. }

ale przy czymś takim wyświetlana jest tylko pierwsza liczba (18). Czy istnieje możliwość wyświetlenia tylko ostatniego zapętlenia?



PS. A co do sprawdzania w JS, to już praktycznie zrobiłem ;]
Suh
Cytat(lary7 @ 25.08.2009, 12:18:47 ) *
Czy istnieje możliwość wyświetlenia tylko ostatniego zapętlenia?


Tak, bardzo prosto. Z pętli foreach usuń polecenie echo. Natomiast po pętli daj echo $sum;

PS. Aaa i oczywiście usuń to co napisałeś ze zmienna $i bo to w zupełności zbędne winksmiley.jpg
lary7
Dzięki, wszystko ładnie działa biggrin.gif Tyle z tym kombinowałem, pisałem jakieś funkcje, a jak zwykle wyszło, że najprostsze rozwiązania są najlepsze...
ucho
Cytat(thek @ 24.08.2009, 22:55:56 ) *
Ja osobiście przy zdarzeniu onsubmit bym już JS zaprzągł i sprawdził u klienta, czy aby pliki nie są za duże.

Oświeć mnie jak się to robi bo cały czas byłem pewien, że z poziomu JS nie można nawet sprawdzić nazwy wysyłanego pliku nie mówiąc o jego rozmiarze.
Pawel_W
nazwę sprawdzisz, ale rozmiaru nie winksmiley.jpg
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.