За последние 24 часа нас посетили 17625 программистов и 1724 робота. Сейчас ищут 1848 программистов ...

загрузка файлов ajax

Тема в разделе "PHP для новичков", создана пользователем askanim, 8 авг 2016.

  1. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Я умею проставлять запятые, просто не вижу в них смысла. Знаю что такое обороты, вводные слова, и тому подобное, но я про это забываю когда пишу, потому что я думаю и тут же пишу, на автомате растовление знаков препинания у меня не стоит, ибо эта задача не в приоритете
    --- Добавлено ---
    разве он сам не говорит собрать по форме массив... Если нет то как (=_?_=), я где то на форуме не здесь вообще в нете вычитал помоему даже на буржуйском, что он сам соберёт массив из данных этим выражением input type=file.
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Вот сделал для multiple и input name=file[] массив
    http://code.runnable.com/V6g3OfA2BvNyeisg/
    --- Добавлено ---
    отлично, самый лучший вариант, подправлю свои примеры на его основе
    --- Добавлено ---
    Код (Javascript):
    1. //<form id='form'>
    2. var formData = new FormData($('#form').get(0));
    3.  
    4. // если нужно добавить ещё
    5. formData.append('custom', 'hello custom');
     
    askanim нравится это.
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    когда идет перечисление перед и не ставится запятая. Например: картошка, редиска, морковка и капуста.
    :eek:
    --- Добавлено ---
    @askanim, лучше вообще не расставляй если сомневаешься.
    --- Добавлено ---
    Ошибаются все, но ты говоришь, я знаю, и такую хрень пишешь, это хуже чем не знать
    имхо.
    --- Добавлено ---
    извините за оффтоп.
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты про формдата вкурил вообще?
     
  5. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @igordata так себе.
    --- Добавлено ---
    @igordata ну мне кажется я логику понимаю, но такое ощущение, что не до конца...
    --- Добавлено ---
    Так ну из того что было по ссылке не хрена не работает, кроме .get(0);

    Код (Javascript):
    1. $('#ModalExe').on("click",function() {
    2.  
    3.             var $that = $(this);
    4.             var formData = new FormData($('#image').get(0));
    5.             jQuery.ajax(root+'admin/modules/ajax/add-files', {
    6.                 processData: false,
    7.                 contentType: false,
    8.                 type: "POST",
    9.                 data: formData,
    10.                 success: function(result) {
    11.                     alert(result);
    12.                 },
    13.                 error: function (result) {
    14.                     alert(result);
    15.                 }
    16.             });
    17.         });
    Я очень тяжко понимаю js он для меня не логичный не разу вообще. Я его вообще туго понимаю вот php куда проще осваиваю... А js тяжеловато.
    --- Добавлено ---
    если влепить по кнопке submiit и форму то вообще релодается страничка по не объяснимым причинам.
    --- Добавлено ---
    @igordata я js понимаю по типу вот это работает ага запомнил, а почему не всегда ясно.
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    Такая же фигня, поэтому без гугла жизнь не айс
     
    askanim нравится это.
  7. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @igordata А ты можешь объяснить как он должен работать я был бы благодарен тебе от всей души, нормальное объяснение, потому что я не где так и не нашёл инфу на то, как он типа работает, тока на то как он должен работать, и какие то кривые примеры то где jquery прямо ошибку синтаксиса пишет, то пустой массив с файлами.
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Срабатывает поведение по умолчанию, submit, его нужно отменить, смотри мой код, там есть event.preventDefault(); это он и делает.

    У тебя мои примеры не работают?
     
  9. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @denis01 мой пример работает который я скинул и всё добавляет на сервер, помог кусочек твоего кода. Вот это за это спасибо, мне помогла вот эта часть, о ней был не вкурсах, точней не понимал её.


    --- Добавлено ---
    остальное напрочь либо пустой массив files либо ошибка синтаксиса в jquery либо ещё какая нибудь не понятная хрень.
     
  10. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    вот документация FormData()
     
    askanim нравится это.
  11. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @mahmuzar :eek::eek::eek: Почему она не тут jquery
    Что за нафиг... Я и не заходил туда потому что смотрю mozilla написано, меня вообще от этого слова воротит... Это же, mozilla... jquery О_о
     
    Ganzal нравится это.
  12. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
  13. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @Ganzal у меня весь день огонь, вот смотри, я сделал задачу свою, так ща , посчитаю, в 10 пришёл, и сейчас 19 42... 10 часов почти, охереть, да меня уволить за такое надо, но норм я учусь и зп у меня низенькая, так что мне можно. В первый раз решал такую задачу, а именно загрузку через аякс, как на php массовую загрузку сделать я знаю, а вот как реалезовать это через аякс я не знал, но теперь на всю жизнь запомнил, фишка в том, что в следующий раз чтобы сделать тоже самое мне потребуется максимум час.
     
  14. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    За это спасибо @MAN_IFE_ST, хотя вижу ты лайк ему поставил, молодец

    Это плохо, что ты не понял, что куда, потому что FormData можно вручную append или сразу всё через get, но и другие способы есть.

    FormData это из JavaScript, а mozilla потому что они свой движок javascript делают, он в разных браузерах разный, вот и документацию к своему движку дали, хорошо что почти во всех новых браузерах FormData работает одинаково.
     
  15. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Та не, я не про это. Ты зашел на МДН, увидел слово мозилла и как мудак ушел. Потому что не джейквери. А почему? Мозилла, да будет тебе известно, вносит огромный вклад в развитие емакси (джаваскрипт) и иногда даже придумывает какие-то фишки, доступные в их движке, но пока еще не принятые консорциумом. Обходить стороной документашку мозиллы по джаваскрипту потому что мозилла - быть мудаком. Это мы уже выяснили. Дальше. Не джейквери. Ну так джейквери это всего лишь библиотека, написанная на джаваскрипте. Чтоб ею пользоваться - надо знать джаваскрипт. Обходить стороной документашку мозиллы по джаваскрипту потому что не джейквери - быть мудаком. Как-то так.
     
    askanim и denis01 нравится это.
  16. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Всё дело в том, что ты не понимал как весь код взаимодействует, 1-2 часа в отладке и ты бы не за 10 часов управился, а меньше.
    Подумай над этим.
     
    askanim и Ganzal нравится это.
  17. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
  18. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    хых не, это я понял, ща я ещё фишку покажу какую я провернул ГЫ.....
    Я не знал этого :(

    @Ganzal я не знал об этом :(
     
    denis01 нравится это.
  19. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ну вот тебе еще один пример как ты принимаешь решение без участия своего мозга. Ты действительно головой только кушаешь...
     
  20. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @Ganzal Да, как бы если ты помнишь раньше был браузер mozilla и я всё детство просидел за этим браузером, и если честно он меня мягко говоря тогда з...ал. Вот и ассоциация такая возникла.
     
  21. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Прогресс не стоит на месте. Ты стоишь.
     
  22. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Короче выкладываю весь код по загрузке файлов мб кому пригодится вместе с обработкой

    Первое html документ
    HTML:
    1. <div class="modal-header ">
    2.     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
    3.     <h4 class="modal-title" id="myModalLabel">
    4.         {% if str.try == 1 %} Запись добавлена. Можете загружать файлы.{% endif %} {% if str == 0 %} произошла ошибка добовления записи {% endif %}
    5.         {% if str.try == 2 %} Картинки загружены. Можете продолжить. {% endif %}
    6.     </h4>
    7. </div>
    8.  
    9. {% if str.try == 1 %}
    10. <form id="image" enctype="multipart/form-data">
    11.     <div class="modal-body">
    12.     {% for file in str.base  %}
    13.     {% if file.type_string == 5 %}
    14.     <p>{{ file.info_string }}</p>
    15.         <div class="col-md-12">
    16.             <div class="section">
    17.  
    18.                 <label class="field prepend-icon append-button file"><span class="button btn-primary">Выбрать файл</span>
    19.                     <input id="{{ file.id_string }}" type="file"  name="file_up[]" onchange="document.getElementById('{{ file.name_string }}').value = this.value;" class="pussy gui-file">
    20.                     <input id="{{ file.name_string }}" type="text" name="content[{{ file.name_string }}]" placeholder="Выбрать файл" class="gui-input">
    21.                     <label class="field-icon"><i class="fa fa-upload"></i></label>
    22.                 </label>
    23.             </div>
    24.         </div>
    25.     {% endif %}
    26.     {% endfor %}
    27.     <hr>
    28.     </div>
    29.     <div class="modal-footer koks">
    30.         <button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
    31.         <button type="button" class="btn btn-primary" id="ModalExe" data-id-module="{{ str.module_id }}" data-file="{{ str.module_file }}" data-name="{{ str.module_name }}" data-id="{{ str.id }}">Загрузить</button>
    32.     </div>
    33. </form>
    34.  
    35.         $('#ModalExe').on("click",function() {
    36.             var nameModal = $('#ModalExe').attr('data-name');
    37.             var idStr = $('#ModalExe').attr('data-id');
    38.             var idModule = $('#ModalExe').attr('data-id-module');
    39.             var arr = {};
    40.             arr['model_name'] = nameModal;
    41.             arr['str_id'] = idStr;
    42.             arr['model_id'] = idModule;
    43.             var formData = new FormData($('#image').get(0));
    44.             UploadFile(arr, formData, 'admin/modules/ajax/add-files', 'resultModal');
    45.         });
    46.  
    47.  
    48. {% endif %}
    49.  
    50.  
    Второе файл со скриптом

    Код (Javascript):
    1. function UploadFile(object, formData, url, id) {
    2.     for(var key in object) {
    3.         formData.append(key, object[key]);
    4.     }
    5.     jQuery.ajax(root + url, {
    6.         processData: false,
    7.         contentType: false,
    8.         type: "POST",
    9.         data: formData,
    10.         success: function (result) {
    11.             $('#'+id).html(result);
    12.         },
    13.         error: function (result) {
    14.             $('#'+id).html(result);
    15.         }
    16.     });
    17. }
    третье файл обработки на php
    PHP:
    1. public function addFiles() {
    2.         // функции подготовки и загрузки массовых файлов
    3.         $uploadFiles = Gabriel::upLoadPrepare($_FILES['file_up']);
    4.         $res = [];
    5.         $res['upload'] = Gabriel::upLoadFiles($uploadFiles, ROOT.'/Template/Files/');
    6.      
    7.         // добавление в базу данных
    8.         $this->table($_POST['model_name'])->where(['id' => $_POST['str_id']])->Update($_POST['content']);
    9.  
    10.         $res['str']['id'] = $_POST['model_id'];
    11.         $res['str']['name'] = $_POST['model_name'];
    12.         //возвращаем массив
    13.         return $res;
    14.  
    15.     }
    и четвёртое файл с функциями для загрузки данных на сервер

    PHP:
    1. public static function upLoadPrepare($file_post) {
    2.             $file_ary = array();
    3.             $file_count = count($file_post['name']);
    4.             $file_keys = array_keys($file_post);
    5.  
    6.             for ($i=0; $i<$file_count; $i++) {
    7.                 foreach ($file_keys as $key) {
    8.  
    9.                     $file_ary[$i][$key] = $file_post[$key][$i];
    10.  
    11.                 }
    12.             }
    13.             return $file_ary;
    14.  
    15.     }
    16.     public static function upLoadFiles($array_files, $root_directory) {
    17.         foreach($array_files as $key => $value){
    18.             $uploaddir = $root_directory;
    19.  
    20.             $uploadfile = $uploaddir . basename($array_files[$key]['name']);
    21.  
    22.  
    23.             if (move_uploaded_file($array_files[$key]['tmp_name'], $uploadfile)) {
    24.                 $report = 2;
    25.             } else {
    26.                 return 1;
    27.             }
    28.  
    29.         }
    30.         return $report;
    31.     }
    --- Добавлено ---
    @Ganzal ну я не особо стремлюсь стать мастером по js, меня больше интересует разработка на php, а js это побочная штука которая нужна для разработки сайтов, и в данный момент нужна мне, а в будущем скорее всего другой человек этим будет заниматься и я уйду полностью в бек.
     
  23. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @askanimпочему в итоге используешь цикл? Можно было get сделать.
     
  24. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @denis01 потому что мне нужно было разделить полученные данные на массивы в php, не понял наверное обработку в php, я там сразу из пост запроса данные в бд отправляю.
    В общем смотри какого вида я получаю массив в php

    PHP:
    1. $_POST = [
    2.       'content' => [
    3.                'img' => 'egegweg;g.jpg'
    4.                 'image_second' => 'img2.png'
    5. ]
    6.        'model_name' => 'Demo',
    7.        'model_id' =>  '40',
    8.        'str_id' => '2'
    9.  
    10. ]
    объясняю для чего это, это авто генерируемая загрузка файлов в моём движке, сначала ты собераешь поля для базы данных которые выводятся потом в html, а потом мне же как то надо их ещё заполнить не через phpmyadmin ведь будет чувак сидеть какой-нибудь заполнять.
    Так что у меня там всё хитро. И это всё само в коробке у меня соберается собираются поля для бд без какого либо кодинга, создаются страницы в которые потом добовляются модули, у каждого модуля своя база данных в котором хранятся строки с этими данными это я сегодня доделал настройки и добавление строк в базу данных в модуле, завтра сделаю, апдейт этого всего, и буду писать инсталлятор движка. Допишу потестирую, потом запишу видео, в котором и покажу что у меня за система такая. @igordata имеет ключик к бета тесту, но он сказал, что он занят :D
     
  25. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    зачем такие данные передавать в запрос? проще new сделать в action