Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Nie działają pola input o name > 20
--Jakub--
post
Post #1





Goście







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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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





Goście







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ą?
Go to the top of the page
+Quote Post
--Jakub--
post
Post #4





Goście







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ą (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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





Goście







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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.09.2025 - 23:10