Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][JS, jQuery?] spr. czy wpisano nazwę dla uploadowanego pliku i czy wybrano go w input file
rasten
post
Post #1





Grupa: Zarejestrowani
Postów: 86
Pomógł: 6
Dołączył: 31.05.2010

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


Witam,
mam taki formularz, w którym mogę dodać więcej niż jeden plik:
  1. <input name="attachmentNames[]" type="text" value="nazwa pliku" />
  2. <input name="attachments[]" type="file" />
  3. itd..


Czy da się po stronie klienta sprawdzić, czy wybrano w input file plik? Bo np. jeśli mam 5 takich podwójnych inputów jak wyżej i klient np. wybierze plik w 1 i 4 to chcę sprawdzić czy dla nich wpisał też nazwę pliku. Jak to zrobić? Ewentualnie, jak to rozwiązać po stronie php, gdy sprawdzę że brakuje jakiejś nazwy. Czy da się po ponownym wyświetleniu formularza i tekstu z błędami automatycznie uzupełnić input file tym co wybrał wcześniej klient?

Ten post edytował rasten 17.08.2011, 11:04:01
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
wewior
post
Post #2





Grupa: Zarejestrowani
Postów: 200
Pomógł: 8
Dołączył: 24.09.2003

Ostrzeżenie: (10%)
X----


Wg mnie najlepiej przy takich nazwach pól skorzystać z funkcji getElementsByName lub getElementsByTagName (a potem porównujesz wg nazw) i wtedy listujesz sobie pola i sprawdzasz co chcesz. Bo bezpośrednie odwołanie wymagałoby generowania dla pól id i ich listy w jakiejś zmiennej js.
Go to the top of the page
+Quote Post
mortus
post
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Można to zrobić np. tak:
  1. <form id="myform" action="" method="post">
  2. <input name="attachmentNames[]" type="text" value="nazwa pliku" />
  3. <input name="attachments[]" type="file" />
  4. <input name="attachmentNames[]" type="text" value="nazwa pliku" />
  5. <input name="attachments[]" type="file" />
  6. <input name="attachmentNames[]" type="text" value="nazwa pliku" />
  7. <input name="attachments[]" type="file" />
  8. <!-- more inputs -->
  9. </form>
  10. <script type="text/javascript">
  11. <!--
  12. var myform = getElementById("myform");
  13. var aNames = myform["attachmentNames[]"];
  14. var a = myform["attachments[]"];
  15. // i w pętli sprawdzamy, czy podano wartość w polach
  16. for(var i = 0; i < aNames.length; i++) {
  17. if(aNames[i].value == '') {
  18. // nie podano nazwy załącznika
  19. zrobCos();
  20. }
  21. if(a[i].value == '') {
  22. // brak załącznika
  23. zrobCos();
  24. }
  25. }
  26. -->
Go to the top of the page
+Quote Post
rasten
post
Post #4





Grupa: Zarejestrowani
Postów: 86
Pomógł: 6
Dołączył: 31.05.2010

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


Dzięki za odp ale mi chodzi o coś troszeczkę innego. Jak rozpoznać czy wpisano nazwę dla danego inputa wyboru pliku. U mnie liczbę tych inputów wybiera sobie użytkownik, klikając na 'dodaj' i pojawiają się kolejne dwa inputy: attachments i attachmentNames.
I teraz tak: wybierze np. że chce załadować 4 pliki. Ale ostatecznie wybierze plik w 1 i 3 inpucie a 2 i 4 zostawi pusty. Czyli chciałbym sprawdzić czy wpisał nazwę właśnie dla 1 i 3. Da się to wogóle zrobić?
Albo ostatecznie po stronie serwera w PHP jak sprawdzę, że nie wpisał tych nazw dla plików, czy jest możliwość ponownego wyświetlenia formularza z już wypełnionymi wybranymi przez klienta plikami w input type="file" ?

EDIT: czyli tak naprawdę co by mnie urządziło to możliwość sprawdzenia czy w input file został wybrany jakiś plik przez użytkownika. Nie mogę nigdzie o tym znaleźć info. Da się czy nie bardzo?

Ten post edytował rasten 17.08.2011, 12:18:39
Go to the top of the page
+Quote Post
mortus
post
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


No ale przecież jak wybierzesz jakiś plik w polu file, to zmieniasz wartość atrybutu value tego pola. Wystarczy drobna modyfikacja przedstawionego skryptu i będzie on spełniał Twoje oczekiwania. Oczywiście skrypt należy podpiąć pod jakieś zdarzenie, bo powyżej zaprezentowany kod działać nie będzie, a gotowca niestety nie dostaniesz.
  1. <script type="text/javascript">
  2. <!--
  3. var myform = getElementById("myform");
  4. var aNames = myform["attachmentNames[]"];
  5. var a = myform["attachments[]"];
  6. // i w pętli sprawdzamy, czy podano wartość w polach
  7. for(var i = 0; i < aNames.length; i++) {
  8. if(a[i].value != '') {
  9. // wybrano jakiś załącznik
  10. // sprawdzamy, czy podano dla niego nazwę
  11. if(aNames[i] == '') {
  12. // nie podano nazwy, możemy okrzyczeć użytkownika
  13. var emptyName = true;
  14. }
  15. }
  16. if(emptyName) {
  17. // tu go okrzyczymy
  18. // i zatrzymamy przetwarzanie formularza, coby nie został wysłany
  19. return false;
  20. }
  21. -->

Niestety po przesłaniu formularza pól typu file nie można ponownie wypełnić.

Właściwie rozwiązanie masz podane jak na dłoni. Jeśli nie zamierzasz wykazać się inicjatywą, to umieść ogłoszenie w odpowiednim dziale.
Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Mordus a wiesz że na forum jest tag [ javascript ] ?

@topic
Musisz sprawdzić, które pliki wybrał i zapisać sobie indeksy i po indeksach sprawdzać drugie pole.
Go to the top of the page
+Quote Post
mortus
post
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


@Fifi209 Ta uwaga to do mnie, bo chyba przekręciłeś nazwę użytkownika. <script> to tag HTML-owy. Wracając do tematu: w jednym przebiegu pętli nie można tego zrobić, bo... co? Skrypt wyżej nie zapisuje żadnych indeksów, a sprawdza odpowiednie pole. W jQuery będzie to jeszcze łatwiej obsłużyć.
Go to the top of the page
+Quote Post
rasten
post
Post #8





Grupa: Zarejestrowani
Postów: 86
Pomógł: 6
Dołączył: 31.05.2010

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


Trochę przerobiłem i napisałem w jQuery, może się komuś przyda:
  1. $('input[type=file][name^=attachments]').each(function(index) {
  2. if($(this).val() != '')
  3. {
  4. // IMPORTANT get() zwraca element DOM a nie obiekt jQuery dlatego jest 'value'
  5. var nazwa = $('input[name^=attachmentNames]').get(index).value;
  6. if( trim(nazwa) == '' || trim(nazwa) == 'nazwa pliku')
  7. {
  8. is_valid = false;
  9. errorsMsg.push('* Proszę podać nazwy wszystkich plików.');
  10. return false;
  11. }
  12. }
  13. });


Ten post edytował rasten 17.08.2011, 14:50:04
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: 25.08.2025 - 20:55