За последние 24 часа нас посетили 20138 программистов и 1573 робота. Сейчас ищут 1880 программистов ...

Разбиваем input на несколько =)

Тема в разделе "JavaScript и AJAX", создана пользователем ??? Соловьев Е ш326, 19 мар 2015.

  1. Доброго времени суток дорогие форумчане.

    Код (PHP):
    1.     <input type="file" id="attach_foto_input" class="attach_foto_input" multiple accept="image/*" />
    2.     <div class="attach attach_foto">+ фото</div>
    3.     <div class="preview_foto_new_news" id="preview_foto_new_news"></div>
    4.  
    Код (Text):
    1.  
    2.     var photo_limit = 5;
    3.     function response_preload_images_news(id){
    4.         if(window.frames[id].document.body.innerHTML.indexOf("ok;")!=-1){
    5.             var r = window.frames[id].document.body.innerHTML;
    6.             //бла бла бла
    7.         }
    8.     }
    9.     $("attach_foto_input").addEventListener("change",function(){
    10.         files = this.files;
    11.         if(files.length>photo_limit){
    12.             fixed_msg("Можно приложить не более пяти фотографий","error");
    13.             return false;
    14.         }
    15.         for(var i = 0;i<files.length;i++){
    16.             if(files[i].type.indexOf("image/")==-1){
    17.                 fixed_msg("Добавлять можно только изображения","error");
    18.                 return false;
    19.             }
    20.             var id = Math.random();
    21.             var iframe = document.createElement("iframe");
    22.                 iframe.name = "new_news_iframe"+id;
    23.                 iframe.id   = "new_news_iframe"+id;
    24.                 iframe.onload = function(){
    25.                     response_preload_images_news(this.id);
    26.                 }
    27.             var form   = document.createElement("form"  );
    28.                 form.action = base_url+"php/preload_images_news.php";
    29.                 form.method = "POST";
    30.                 form.id     = "new_news_form"+id;
    31.                 form.target = "new_news_iframe"+id;
    32.                 form.enctype= "multipart/form-data";
    33.             var input  = document.createElement("input" );
    34.                 input.type  = "file";
    35.                 input.id    = "attach_foto_input"+id;
    36.                 input.file  = files[i];
    37.                 // input.filename  = files[i].name;
    38.                 // input.file.name  = files[i].name;
    39.                 input.name  = "photo";
    40.             var hidden = document.createElement("input" );
    41.                 hidden.type = "hidden";
    42.                 hidden.name = "key";
    43.                 hidden.value= key;
    44.             var preview= document.createElement("div");
    45.                 preview.className = "img";
    46.                 preview.id        = "preview_foto_new_news_img"+id;
    47.                 preview.style.textAlign = "center";
    48.             var img    = document.createElement("img");
    49.                 img.src           = base_url+"img/ajax-loader.gif";
    50.                 img.style.width   = "31px";
    51.                 img.style.padding = "20px 0";
    52.  
    53.             $("new_news").appendChild(iframe);
    54.             $("new_news").appendChild(form);
    55.             form.appendChild(input);
    56.             form.appendChild(hidden);
    57.             $("preview_foto_new_news").appendChild(preview);
    58.             preview.appendChild(img);
    59.            
    60.             photo_limit--;
    61.             form.submit();
    62.         }
    63.     },false);
    Комментарии по коду, думаю, не нужны =)
    Суть в том, что при выборе файлов JS должен создать для каждого свой фрейм, форму и инпут с файликом.
    Но беда в том, что при отправке такой формы, файлик не отправляется, хотя (как я проверял в консоле браузера) файлик таки записывается.

    Гугл ничего толкового не дал =(

    С уважением Евгений.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Отдельно от сайта сделал чтобы всё работало?
     
  3. Чем код отдельный отличается от нужного?
    Тут проблема не во "встраивании" кода, а с тем, что код не работает. И не важно где этот код писать. Он везде работать не будет =)
    Тут вопрос в том, как инпуту отдать файлик из другого инпута.
    Если смотрел на сайте через консольку, заметил бы, что в инпут поступает нечто типа картинки со всеми доступными свойствами, но вот при отправке такого инпута, картинка не отправляется =(
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    input type=file передать файл в другой input нельзя
     
  5. как тогда быть? =(
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    забыть и использовать только одну, зачем тебе перекидывать из одной в другую?
     
  7. В первом multiple стоит. По условию можно прикрепить до пяти изображений, но грузиться они все должны по одному
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Думаю flash можно подключить и там такое сделать, почему так важно чтобы они по очереди грузились, а не асинхронно?
    Думаю что я не прав, похоже такое как тебе нужно реализовали в https://blueimp.github.io/jQuery-File-Upload/
    посмотри код и так ли это.
     
  9. Зачем флэш, когда можно на родном JS?
    Важно от того, что изображения могут быть большими по размеру, а время выполнения скрипта на сервере ограничено и ограничение снять нельзя
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Посмотри ещё javascript FileReader, такой класс есть встроенный
     
  11. Я читал про него, но это не совсем то, что мне нужно.
    Штука полезная, не спорю, но мне в данном случае нужно сразу после выбора файлов грузить их на сервер. По одному.
    Штурмую яндекс уже который раз, но толку почти ноль =(
    Если знаешь способ (на JS), буду не против подсказки. Конкретно сейчас копаю по теме загрузки файлов на AJAX, но там не совсем понимаю
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    А что на счёт той ссылки что я тебе дал? Там всё что ты хотел реализовано.
     
  13. В исходном коде, том что выше, заменил строку
    input.file = files;
    на
    input.files = files;
    и все заработало.

    НО! беда в том, что теперь в каждый инпут кидается весь исходный инпут (со всеми файлами)
    и если пользователь выбирает 5 картинок, то на сервер все эти картинки отправляются по 5 раз.
    input.files = files; такой подход снова не дает результатов.
    delete files; и метод splice совершенно не имеют никакого влияния на массив файлов.

    Как заставить в инпут записываться только по одному файлу? или при отправлении не все отправлять, а лишь нужны один??
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    я уже не могу без слёз мимо этого треда проходить... на тебе пару идей:
    1. можно сделать один инпут с мультифайлом и отправить пачку файлов. (HTTP)
    2. можно сделать несколько инпутов с синглфайлом и динамически добавлять еще и еще инпуты по нажатию на элемент интерфейса. (HTTP+JS).
    3. можно сделать один инпут с мультифайлом и никуда его не отправлять а вместо этого читать выбранные файлы в память показывать превьюшки блекджек и шлюх а по отправке формы слить содержимое файлов аяксом (АЯКС) или через скрытые поля (ХТТП). (HTTP+JS / AJAX)
     
  15. ты внимательно читал?
    Есть один инпут с мультифайлом.
    Юзер выбирает от одного до пяти файлов и все файлики нужно "незаметно" кинуть на сервер, НО!!! по одной шутке! и до того как юзер нажмет "отправить".
    Выше я писал, что можно (получилось) такое реализовать с отправление ВСЕХ файлов разом...
    Как теперь модифицировать код, чтоб было ПЯТЬ запросов по ОДНОМУ файлу ?? =)
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    это третий вариант. форма с не-важно-сколькими-полями-выбора-не-важно-скольких-файлов. безопасность запрещает общаться с файловой системой пользователя пока он не протыкал файлы. когда протыкал - они в полном распоряжении браузера. а дальше ты уже что хочешь с ними то и делаешь от имени браузера. можно и на сервер отправить. только зачем их отправлять на сервер до того как пользователь их отправит на сервер?
     
  17. А нельзя просто из мультифайла перетаскать файлы по одному в другие инпуты, по идее ведь пользователь уже слил их браузеру.
    Из одного инпута получается кинуть в другой, но они ВСЕ копируются.

    поподробнее куда копать?
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот я даже и не знаю что тебе ответить на этот вопрос. у тебя видимо знаний ноль или около того. джаваскрипт умеет со страницей взаимодействовать? да. с формами на странице? да. с файлами в инпутах? да. с сервером? да. копать тебе в сторону того как это сочетать. алгоритм.
     
  19. хреньли он тогда не разделяет мои инпуты?
    И тут хоть аякс хоть скрытые поля... JS не видит файлы ПО ОТДЕЛЬНОСТИ!!!
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    сарказм про точку произростания рук

    покажи мне два листинга:
    1. форма с инпутами
    2. обработчик формы

    Добавлено спустя 1 минуту 27 секунд:
    js-обработчик формы. на сторону сервера нам еще рано смотреть.
     
  21. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
  22. Там написано, что делать))

    Добавлено спустя 42 секунды:
    Это тоже небольшой баг, связанный с подменой урла при открытии новостей.
    Позже буду решать эту проблему

    Добавлено спустя 5 минут 4 секунды:
    А еще вопрос к челу, который вводил такие логины:
    Код (Text):
    1. date:2015-03-19 12:04:17;
    2. error:noUser;
    3. name:<script>alert(\'Yo\')</script>;
    4. pass:123;
    5. ip:91.204.180.139;
    6. ---
    7. date:2015-03-19 12:05:06;
    8. error:noUser;
    9. name:?>JOIN DELETE FROM users WHERE 1;
    10. pass:123;
    11. ip:91.204.180.139;
    12. ---
    13. date:2015-03-19 12:06:59;
    14. error:noUser;
    15. name:\' -- JOIN DELETE FROM users WHERE 1;
    16. pass:123;
    17. ip:91.204.180.139;
    18. ---
    19. date:2015-03-19 12:07:10;
    20. error:noUser;
    21. name:\' -- UNION DELETE FROM users WHERE 1;
    22. pass:123;
    23. ip:91.204.180.139;
    24. ---
    25. date:2015-03-19 12:08:36;
    26. error:noUser;
    27. name:\' UNION SELECT 1,2,3;
    28. pass:123;
    29. ip:91.204.180.139;
    У тебя что-нибудь вышло? =)
    (хочу знать для безопасности)
     
  23. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Таки делал, не помогает..

    Добавлено спустя 2 минуты 4 секунды:
    я вводил только manta 123
    А что, ты пасс хранишь в открытом виде?