Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Nie działają pola input o name > 20
Forum PHP.pl > Forum > Przedszkole
-Jakub-
Cześć wszystkim

Od dłuższego czasu pracuję nad własnym CMSem, a teraz właściwie już nad jego drugą edycją. Napotkałem problem, którego nie wiem jak rozwiązać i bardzo proszę o pomoc.

Sprawę opiszę krótko: formularz z polami input do wrzucenia 30 zdjęć. Zdjęcia są wrzucane na serwer, skalowane itp, ścieżka dodawana do bazy danych. Ale...

Skrypt działa mi tylko gdy wybiorę zdjęcie (albo zdjęcia) których atrybut "name" nie jest większy od 20. W praktyce wygląda to tak, że dodając do formularza 30 zdjęć, skrypt wczyta mi tylko 20 pierwszych. A jeśli dodam do formularza 20 ostatnich, to wczyta mi tylko 10 zdjec, bo ostatnia 10 jest dziwnie ucięta.

Wklejam kod. Ogólnie jest on dużo bardziej rozbudowany, ale żeby rozwiązać problem uprościłem go do minimum i zobaczyłem kilka ciekawych rzeczy.

test.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.  
  4. <title>test</title>
  5.  
  6.  
  7. </head>
  8. <form enctype="multipart/form-data" action="test_skrypt.php" method="POST">
  9.  
  10. <tr><td><input type="hidden" name="MAX_FILE_SIZE" value="99999999999999999999999999999999999999999999999999999999999999999999999999" /></td></tr>
  11. <tr><td>Zdjecie 1<input name="zdjecie1" type="file" /></td></tr>
  12. <tr><td>Zdjecie 2<input name="zdjecie2" type="file" /></td></tr>
  13. <tr><td>Zdjecie 3<input name="zdjecie3" type="file" /></td></tr>
  14. <tr><td>Zdjecie 4<input name="zdjecie4" type="file" /></td></tr>
  15. <tr><td>Zdjecie 5<input name="zdjecie5" type="file" /></td></tr>
  16. <tr><td>Zdjecie 6<input name="zdjecie6" type="file" /></td></tr>
  17. <tr><td>Zdjecie 7<input name="zdjecie7" type="file" /></td></tr>
  18. <tr><td>Zdjecie 8<input name="zdjecie8" type="file" /></td></tr>
  19. <tr><td>Zdjecie 9<input name="zdjecie9" type="file" /></td></tr>
  20. <tr><td>Zdjecie 10<input name="zdjecie10" type="file" /></td></tr>
  21. <tr><td>Zdjecie 11<input name="zdjecie11" type="file" /></td></tr>
  22. <tr><td>Zdjecie 12<input name="zdjecie12" type="file" /></td></tr>
  23. <tr><td>Zdjecie 13<input name="zdjecie13" type="file" /></td></tr>
  24. <tr><td>Zdjecie 14<input name="zdjecie14" type="file" /></td></tr>
  25. <tr><td>Zdjecie 15<input name="zdjecie15" type="file" /></td></tr>
  26. <tr><td>Zdjecie 16<input name="zdjecie16" type="file" /></td></tr>
  27. <tr><td>Zdjecie 17<input name="zdjecie17" type="file" /></td></tr>
  28. <tr><td>Zdjecie 18<input name="zdjecie18" type="file" /></td></tr>
  29. <tr><td>Zdjecie 19<input name="zdjecie19" type="file" /></td></tr>
  30. <tr><td>Zdjecie 20<input name="zdjecie20" type="file" /></td></tr>
  31. <tr><td>Zdjecie 21<input name="zdjecie21" type="file" /></td></tr>
  32. <tr><td>Zdjecie 22<input name="zdjecie22" type="file" /></td></tr>
  33. <tr><td>Zdjecie 23<input name="zdjecie23" type="file" /></td></tr>
  34. <tr><td>Zdjecie 24<input name="zdjecie24" type="file" /></td></tr>
  35. <tr><td>Zdjecie 25<input name="zdjecie25" type="file" /></td></tr>
  36. <tr><td>Zdjecie 26<input name="zdjecie26" type="file" /></td></tr>
  37. <tr><td>Zdjecie 27<input name="zdjecie27" type="file" /></td></tr>
  38. <tr><td>Zdjecie 28<input name="zdjecie28" type="file" /></td></tr>
  39. <tr><td>Zdjecie 29<input name="zdjecie29" type="file" /></td></tr>
  40. <tr><td>Zdjecie 30<input name="zdjecie30" type="file" /></td></tr>
  41.  
  42. <tr><td><input name="submit" type="submit" /></td></tr>
  43.  
  44. </form>
  45. </body>
  46. </html>


test_skrypt.php

  1. <?
  2.  
  3. $liczba = 1;
  4. while($liczba < 31)
  5. {
  6.  
  7. $plik = 'zdjecie'.$liczba;
  8. $zdjecie_tmp = $_FILES[$plik]['tmp_name'];
  9.  
  10.  
  11. if(is_uploaded_file($zdjecie_tmp))
  12. {
  13.  
  14. $zdjecie_nazwa = $_FILES[$plik]['name'];
  15. move_uploaded_file($zdjecie_tmp, "../zdjecia/$zdjecie_nazwa");
  16. }
  17. ++$liczba;
  18. }
  19.  
  20. ?>


I teraz parę modyfikacji skryptu i co następuje :

  1. <?
  2.  
  3. $liczba = 1;
  4. while($liczba < 31)
  5. {
  6.  
  7. $plik = 'zdjecie'.$liczba;
  8. $zdjecie_tmp = $_FILES[$plik]['tmp_name'];
  9.  
  10. if(is_uploaded_file($zdjecie_tmp))
  11. {
  12. echo $liczba.'kuba<br />';
  13. }
  14. ++$liczba;
  15. }
  16.  
  17. ?>


Powyższy skrypt wyświetla na ekranie napis "kuba" poprzedzony liczbą 1-20 ile plików załadowałem, oczywiście mowa tylko o 20 pierwszych polach formularza.

I następne mody:

  1. <?
  2.  
  3. $liczba = 1;
  4. while($liczba < 31)
  5. {
  6.  
  7. $plik = 'zdjecie'.$liczba;
  8. $zdjecie_tmp = $_FILES[$plik]['tmp_name'];
  9.  
  10. echo $liczba.'petla<br />';
  11.  
  12. if(is_uploaded_file($zdjecie_tmp))
  13. {
  14. echo $liczba.'kuba<br />';
  15. }
  16. ++$liczba;
  17. }
  18.  
  19. ?>


Wyświetli mi wstawiony napis 30 razy -czyli pętla wykonuje się bez problemu. Wyświetla dodatkowo to co poprzednio.

I ostatni:

  1. <?
  2.  
  3. $liczba = 1;
  4. while($liczba < 31)
  5. {
  6.  
  7. $plik = 'zdjecie'.$liczba;
  8. $zdjecie_tmp = $_FILES[$plik]['tmp_name'];
  9.  
  10. echo $liczba.'petla<br />';
  11.  
  12. if(!empty($_FILES[$plik]))
  13. {
  14. echo $liczba.'nie jest pusty';
  15. }
  16.  
  17. if(is_uploaded_file($zdjecie_tmp))
  18. {
  19. echo $liczba.'kuba<br />';
  20. }
  21. ++$liczba;
  22. }
  23.  
  24. ?>


Wyświetli to co poprzednio + 20 razy wyświetony napis "nie jest pusty". Tak jakby pola od 21-30 miały przypisaną jakąś wartość?

Pliki jakie wrzucam to nie są duże pliki, po kilkadziesiąt kb, ew. 500kb.

A tutaj istotne ustawienia PHP mojej domeny:

memory_limit = 128M
post_max_size = 64M
file_uploads = On
upload_max_filesize = 128M


Bardzo proszę o jakąś pomoc.

Pozdrawiam
b4rt3kk
Zmień max_file_uploads, które teraz masz zapewne ustawione na 20 (w pliku php.ini) i zrestartuj serwerer. PS. nie prościej by było tak generować formularz?

  1. for ($i=0; $i<30; $i++) {
  2. echo '<tr><td>Zdjecie '.$i.'<input name="zdjecie[]" type="file" /></td></tr>';
  3. }
-Jakub-
Chwilę temu włączyłem obsługę błędów, gdzieś ją kiedyś musiałem wyłączyć.

I wyskoczyło mi to:

Notice: Undefined index: zdjecie21 in (...)test_skrypt.php on line 9

Wygooglowałem i niby wiem co to oznacza. Ale dlaczego poprzednie inputy działają?
-Jakub-
Cytat(b4rt3kk @ 4.07.2013, 14:55:13 ) *
Zmień max_file_uploads, które teraz masz zapewne ustawione na 20 (w pliku php.ini) i zrestartuj serwerer.


Nie mam fizycznego dostępu do pliku, a w ustawieniach które mam udostępnione nie ma tej opcji. Zaraz napiszę do serwerowni

Dzięki za uwagę z pętlą wink.gif
b4rt3kk
Cytat(-Jakub- @ 4.07.2013, 15:55:46 ) *
Chwilę temu włączyłem obsługę błędów, gdzieś ją kiedyś musiałem wyłączyć.

I wyskoczyło mi to:

Notice: Undefined index: zdjecie21 in (...)test_skrypt.php on line 9

Wygooglowałem i niby wiem co to oznacza. Ale dlaczego poprzednie inputy działają?


Jak już mówiłem, zajrzyj do pliku php.ini i zmień wartość dla max_file_uploads, którą masz domyślnie ustawioną na 20, a następnie zrestartuj serwer.


Cytat(-Jakub- @ 4.07.2013, 15:58:24 ) *
Nie mam fizycznego dostępu do pliku, a w ustawieniach które mam udostępnione nie ma tej opcji. Zaraz napiszę do serwerowni

Dzięki za uwagę z pętlą ;)


A jaka wersja PHP na serwerze? Skoro nie ma tej opcji to przy tym hostingu nie będziesz miał póki co (póki nie przejdą na wyższą wersję PHP) uploadu więcej jak 20 plików.
-Jakub-
Ok, sprawa załatwiona. Faktycznie miałeś racje co do max_file_uploads. Admin mi zmienił i już działa, nie wywala błędu. Dzięki za pomoc wink.gif

A sprawa ustawień PHP nie zależy od wersji, tylko od tego że do zmian parametrów jest specjalny panel administracyjny i on udostępnia tylko część opcji.

Dzięki jeszcze raz za pomoc.

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